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.
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.