Genç programcılarla sürekli konuşlandırma yapabilir misiniz?


11

Mikro hizmet mimarisinde, her şeyin birlikte çalıştığından emin olmak için bir hafta boyunca tüm mikro hizmetleri dağıtmak için bir hafta beklemenin, api sürümlemesini sıkı bir şekilde uygulamaktan çok daha otomatik olduğunu anlamaya başladığınız bir an var. testler (her biri biraz: birim ve keşif, entegrasyon) ve taahhütleriniz sahnede testler geçer geçmez üretime otomatik olarak dağıtılır.

Şimdi, testler yazmayı hatırlama, taahhütte bulunmadan önce değişiklikleri test etmeyi, API sürümünü nasıl kullanacağınızı bildiğiniz ve dağıtımda yürütülen artımlı db güncelleme komut dosyanızda veritabanı bırakmayacağınız sürece harika bir fikir gibi görünüyor ( sahnede başarısız olması gerektiği için büyük bir mesele değildir).

Ama bunu genç programcılar ile yapmak mümkün müdür? Belki çekme talebi şemasını uygulamak zorunda kalacağım. Bu sürekli dağıtım gibi daha az olur (bu benim tahminim)?

Umarım bu fikir temelli değildir ve deneyiminizi paylaşmanıza güvenebilirim, teşekkürler.

Unutmayın, CI veya sürekli teslimat hakkında soru sormuyorum. Bizde zaten var. Şu anda denediğimiz şey sürekli dağıtım yapmaktır, bu da kod girişinden hemen sonra üretime geçmesi anlamına gelir.


it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage- bu görüş temelli;) IMHO bağımsız hizmet dağıtımı ile monolitik bir yaklaşımdan ziyade başarı sağlamak çok daha zordur: softwareengineering.stackexchange.com/a/342346/187812 . Ve gerçek CI (özellik / entegrasyon dalı yok) ile bir hafta beklemek zorunda kalmamalısınız.
Dan Cornilescu

İyi bir CI sistemi yardımcı olmalıdır - sadece gençler değil herkes hata yapar. Ve ihlaller mutlaka geliştiricilerin hata yaptıkları veya işlerini düzgün bir şekilde yapmadığı anlamına gelmez, bkz. Önceden doğrulanmış değişiklikler nasıl yakalanmalı regresyonlara neden olabilir?
Dan Cornilescu

Yanıtlar:


16

Neden olmasın? Açıkladığınız şeylerden herhangi biri, sürekli dağıtım kullansanız da kullanmasanız da sorun yaratacaktır. Sorun, görünüşe göre, gençler felaket bir hata yapacak endişeli olmasıdır. Ve bu hata, kimse onu yakalayamadan üretime geçecektir.

Bu yüzden kod incelemeleri yapar ve testler yaparsınız. Bir şey ana dalınızla birleştirilmeden ve serbest bırakılmak üzere planlanmadan önce, hem diğer bazı gençler (böylece deneyim kazanırlar) hem de üst düzey geliştiriciler (kodu daha iyi hale getirmek için uzmanlıklarını kullanmak için) tarafından kodun gözden geçirilmesini gerektirir. Herkes bu felaket böcekleri aramalı. Ve onları durdurmalı. Değilse, muhtemelen bir hazırlama ortamında daha iyi bir KG / teste ihtiyacınız vardır (ve kod incelemeleri bu şeyleri kaçırırsa belki de daha iyi geliştiriciler).


1
Özellik dalları ve çekme istekleri kullanmanın onu sürekli konuşlandırmayı daha az hale getirdiğinden endişeliyim. Çözmek istediğim yönler üzerinde bileşenler arasındaki uyumluluk. Hizmetlerden birinde bir değişiklik yaptıktan sonra birlikte çalıştıklarından eminim. Birçok değişiklikten sonra hepsini bir araya getirmemiz gerektiğinde stresli hissediyorum. Değişiklikleri ana şubeye katılmadan önce gözden geçirirsem, bileşenler farklı depolarda olduğu için değişikliklerin sırasını bile karıştırabilirim.
doker

@doker Çok sayıda hizmeti bir araya getirme konusunda endişeleriniz varsa, yapma. Her hizmetin (ve bu hizmette yapılan değişikliklerin) tek başına durduğundan emin olun. Hizmet A değiştirilirse, yeni değişikliklerle çalışacağından ve kendi başına dağıtılabildiğinden emin olmak için hızlı bir kod incelemesi yapın. Kesme değişiklikleri yapılırsa, API incelemesini zorunlu kılmak için kod incelemesini bir yer olarak kullanın. Hizmet B, hizmet A'ya bağlıysa, önce A üzerinde çalışın, ardından çıkarın. Sonra B üzerinde çalışın. Eğer bir çocuk A, B, C ve D olarak değiştirirseniz ve hepsi birbirine bağımlıysa, inceleyebilmeniz için bunu belgelemeleri gerekir.
17'de Becuzz

1
@doker Bu tür senaryolar, sürekli dağıtım / dağıtım çalışanlarının genellikle çok profesyonel özellik anahtarları olmasının nedenidir. Değişiklikleriniz genellikle özellik düğmelerinin arkasındaysa (her küçük değişiklikte olması gerekmez), özellikleri kapalıyken parçaları dağıtabilir, tüm parçalar yerinde olduğunda bunları açabilir ve önemli bir sorun bulursanız bunları kapatabilirsiniz.
Derek Elkins SE

3

İyi bir otomatik test kümeniz varsa sürekli dağıtım iyi çalışır.

Küçük geliştiriciler kendi görevleri hakkında heyecanlanabilirler ve etrafta bir şeyler kırdıklarını görmezler. Bunu bazı otomasyonlarla düzeltebilirsiniz. Testleri her zaman çalıştıracak bir derleme sunucusu kurun ve onlara CatLight derleme bildirimcisi gibi bir araç alın . Bir şeyleri kırdıklarında onlara hızlı ve net bir geri bildirim verecektir.

CatLight oluşturma durumu simgesi

Küçük sorunları meydana geldikçe düzeltir ve sürekli teslimatınızı çalışır durumda tutarlar.


3

İyi alışkanlıkları öğrenmenin tek yolu onları uygulamaktır, bu nedenle evet genç geliştiriciler de sürekli konuşlandırma uygulayabilir. Test kapsamını kontrol etme ve muhtemelen bir statik kod analizi çalıştırma gibi şeyler yapmak için boru hattına adımlar ekleme konusunda biraz düşünmek isteyebilirsiniz ve test kapsamı yeterince yüksek değilse yapıda başarısız olabilirsiniz. Bu, küçük geliştiricilerin bir şey tamamlanmadan önce beklentileri anlamasını sağlayacaktır.


1

Bunu sadece küçük geliştiricilerle yapabileceğiniz değil, aynı zamanda sizden de gereklidir. İlk olarak, aksi takdirde yazılım kalitenizi düşürürsünüz ve ikincisi bu, küçük geliştiricilerin iyi yazılım geliştirme becerileri öğrenmesine yardımcı olur.

Bir benzetme olarak: Doktorunuzun genç çıraklık hatalarından korkacağı için bilgisine göre ilaç uygulamamasını ister misiniz? Doktorlar potansiyel hasarla nasıl başa çıkıyor?


1

Bir kazandığı tecrübeye itibaren Çamur Of The Big Balosu'nda birçok denetimsiz genç geliştiricilerin elinde doğal olarak üzerinde uzun yıllar gelişti kod tabanı, sana ne olur işaret etmek isteriz yok o geliştiricileri ile CI pratik.


Düzenle / Güncelle : RubberDuck'un yorumuna göre; bu cevap, entegrasyon için birleştirme hedefinizin bir değerlendirme veya sürüm dalı yerine bir geliştirme dalı olduğunu varsayar.

  • Açıkçası yayın ve canlı dağıtım için kod üzerinde çok daha fazla kontrol olması gerekiyor; ayrı bir üretim dalı yoksa, ana serbest bırakma dalının yanında bir ana geliştirme dalı (entegrasyon testi için kullanılır ve asla serbest bırakılmak için kullanılır) çalıştırmak için dallanma / birleştirme stratejinizde bir değişiklik düşünmeye değer. Bu, üretim kodunu kırma riski olmadan CI ve sık birleştirme işlemlerinin tüm avantajlarını korur.

1. Küçük geliştiricilerin iş arkadaşları veya amirleri ile iletişim kurma olasılıkları daha düşüktür

Sürekli entegrasyon sadece kodun birleştirilmesi değil, aynı zamanda bir geliştiricinin diğer paydaşlarla etkileşime girmeye zorlandığı bir noktadır.

İletişim önemlidir ve aşırı genelleme yapmak istemeden, deneyimsiz geliştiricilere bir ekip ortamında çalışmaya alışkın olanlardan daha az doğal olarak ulaşan öğrenilmiş bir beceri olma eğilimindedir.

Küçük geliştiricilerin, sık raporlar / incelemeler sorulmadan haftalarca kendi kabinlerinde oturmasına ve kodlara basmasına izin verirseniz, iletişimden tamamen kaçınma olasılıkları daha yüksektir.

2. Ürettikleri kodun daha titiz bir incelemeye ihtiyacı olması muhtemeldir.

Hiç bu kadar kötü bir şeyi gözden geçirdiniz ve daha önce almanızı ve yazılmasını engellediniz mi? Bu çok oluyor.

Bozuk kodun yazılmasını engelleyemezsiniz, ancak boşa harcanan zamanı sınırlayabilirsiniz. Sık sık gözden geçirmeyi ve birleştirmeyi taahhüt ediyorsanız, zaman kaybı için kapsamı en aza indirirsiniz.

En kötü senaryo, küçük bir geliştiriciyi kendi minyatür projelerinde birkaç hafta yalnız bırakabilmeniz ve sonunda kod incelemesi için hazır olduklarında, tüm karışıklığı atmaları için yeterli zaman kalmamasıdır. uzakta ve sıfırdan tekrar başlayın.

Birçok proje büyük bir çamur topu haline gelir, çünkü kimse çok geç olana kadar dikkat etmediği zaman bir sürü kötü kod yazılmıştır.

3. Küçük bir geliştiricinin veya diğer yeni ekip üyelerinin gereksinimleri anladığından daha az emin olmalısınız

Bazen bir geliştirici yanlış soruna mükemmel bir çözüm oluşturabilir; bu üzücüdür, çünkü genellikle birileri süreçte daha önce doğru soruları sorsaydı kaçınılması kolay olan basit yanlış anlamalar söz konusudur.

Yine, bu, geri itmek ve gereksinimin bilgeliğini sorgulamak yerine, yüz değerinde "kötü" gereksinimleri kabul etme olasılığı daha yüksek olan deneyimsiz geliştiricileri etkileme olasılığı daha yüksek olan bir sorundur.

4. Yaygın kalıplara, mevcut kodun mimarisine ve iyi bilinen araçlara ve çözümlere daha az aşinadırlar.

Bazen bir geliştirici tekerleği gereksiz yere yeniden icat etmek için çok fazla zaman harcar, çünkü daha iyi bir çözümün var olduğunu bile bilmiyorlardı. Ya da yanlış yaptıkları şeyi fark etmeden günlerce kare bir saplamayı yuvarlak bir deliğe çekmeye çalışabilirler.

Yine, bu tür şeylerin deneyimsiz geliştiricilere olma olasılığı daha yüksektir ve sorunu ele almanın en iyi yolu düzenli incelemeler sağlamaktır.

5. Kod yürütme / birleştirme arasındaki uzun süreler hataları saptamayı ve düzeltmeyi zorlaştırır

Bir hata, ana dalda birkaç hafta değerinde kod değişiklikleri birleştirildikten hemen sonra ortaya çıktığında, hangi değişikliğin hatanın neden olabileceğini belirleme zorluğu daha da zorlaşır.

Açıkçası genel dallanma stratejiniz de burada devreye giriyor; ideal olarak tüm geliştiricileriniz kendi dallarında veya özellik dallarında (ya da her ikisinde) çalışacak ve hiçbir zaman doğrudan ana / bagajdan çalışmayacaklardır.

Tüm ekiplerin aynı anda doğrudan master / trunkta çalıştığı durumları gördüm ve bu CI için korkunç bir ortam, ancak neyse ki herkesi master / trunk'tan çekmenin çözümü genellikle bireysel çalışma için yeterli istikrar sağlar ürün / bilet / vb.

Herhangi bir geliştiricinin ana / gövde dalını kırması , birleştirme işleminin bu kadar düzenli bir şekilde yapılması gerektiği, kırılma değişikliklerinin ve kusurlarının daha hızlı bir şekilde tanımlanması ve dolayısıyla daha hızlı bir şekilde çözülmesi anlayışıyla her zaman "Tamam" olmalıdır. En kötü kusurlar tipik olarak aylarca hatta yıllarca tespit edilmeyen kusurlardır.


Özetle; sürekli entegrasyonun / sürekli konuşlandırmanın başlıca avantajları:

  • Ekibiniz arasındaki iletişim gelişiyor
  • Kod kalitesi genellikle daha yüksek bir standartta tutulur
  • Gereksinimlerin gözden kaçması veya yanlış yorumlanması daha az olasıdır
  • Mimari ve tasarım sorunları daha hızlı tespit edilmeli,
  • Kusurların daha erken bir aşamada tespit edilmesi ve giderilmesi daha olasıdır

Dolayısıyla, genç geliştiricilerinizle CI uygulamıyorsanız, ekibinizin diğerlerinden daha fazlasına ihtiyaç duyan üyeleri olduğu için çok fazla gereksiz risk kabul ediyorsunuz.


OP, üretimin gerçek bir dağıtımını tetiklemeyi taahhüt eden bir modelden bahsediyor . Yani, hayır. Bu modeldeki ana dalı kırmak doğru değil.
RubberDuck

@RubberDuck iyi bir nokta, bu yaklaşımın yeni kod değişikliklerini doğrudan bir üretim koluna itmek için değil, entegrasyon testi için olduğunu açıklığa kavuşturmak üzere bir yorum ekledi.
Ben Cottrell

0

Evet, genç geliştiricilerle CI uygulayabilirsiniz. Mevcut kalkınma ikliminde olmamak aptalca olur. Repo'ya itmek ve daha sonra otomatik olarak hazırlama koduna birleştirilmek ve bunları Travis'te (veya Bamboo, Pipelines vb ...) gerçek zamanlı olarak izlemek inanılmaz derecede faydalıdır!

DevOps arkadaşınızı alın ve onlarla birlikte bu süreçten geçmesini sağlayın, ayrıca bir şeyleri izlemek ve kod incelemeleriyle bağlantı kurmak için beklemede olan kıdemli bir geliştirici (bunları yaparsınız, değil mi?)

Endişeniz, boktan kodun geçeceği yönündeyse, bu CI'de değildir ve gençler üzerinde değildir: bu sizin üzerinizde .

Bu yüzden daha iyi olmalarına yardımcı olun ve sahne / ürün kodunu daha hızlı dağıtmaya alışın. Kendinize uzun vadede teşekkür edeceksiniz.


1
OP Sürekli bahsediyor Dağıtım değil Sürekli Entegrasyon / Teslim
Rubberduck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.