Test ortamlarında sürekli entegrasyona bağlı kararsızlıklardan nasıl kaçınılır?


19

Bazı hedef ortamları sık sık güncelleyen sürekli entegrasyon süreçleri kullandığınızı, böylece her değişiklik yaptığınızda "siz" değişikliklerinizi hemen test edebileceğinizi varsayalım. Bu CI'nin hedeflerinin bir parçası, değil mi?

Ancak, test döngünüzde yer alan başka yöneticilerin de olduğunu varsayalım (örneğin, yöneticiler veya müşteriler). Diğer insanların gelecek değişikliklerinizi gözden geçirmeye (kırmaya?) Katılmalarını sağlamak mantıklı, değil mi?

Ancak, diğer insanların bulunduğu ortamlarda sürekli olarak değişiklikler yapmaya devam ederseniz , ciddi olarak, bunları test etmeye çalışırsanız , aşağıdakiler gibi birden fazla sorun ortaya çıkabilir:

  • they (derinlemesine) raporu kaydettikleri zaman, sorunu artık kendileri bile üretemedikleri (örneğin yanlışlıkla aynı sorunla karşılaştınız ve zaten ortamlarına sabitlediniz) sorun bildirirken zamanlarını boşa harcayabilirler.
  • you bir sorunla karşılaştıkları ortamlar artık aynı olmadığından (siz (!!!) çevrelerini bindirmiş olabilirsiniz) bildirdikleri sorunları yeniden oluşturamayabilir.

Peki böyle (sinir bozucu) durumlardan kaçınmak için ne yapabilirsiniz (bir şeyler nasıl yapılandırılır?)?

Yanıtlar:


10

Bu konuda deneyimimi vereceğim, çünkü çoğunlukla bazı cevapların neden her zaman geçerli olmadığını gösteriyor.

Başlamak için bazı bağlamlar:

  • Yaklaşık 80 uygulama barındıracak 7 ortamımız var, bunların çoğu db2-iSeries üzerindeki web hizmetleri veya paylaşılan tablolar aracılığıyla birbirlerine güveniyor.
  • İyi ya da kötü, iSeries bizim DB referans sistemimizdir.
  • Bu son nokta, her biri için bir AS400 getirmenin çok pahalıya mal olacağı ve zaten onu çalıştıracak donanıma sahip olmayacağımız için, uygulamayı yalıtılmış bir ortamda bağımlılıkları ile getirme fikrini geçersiz kılar.

Yaptığımız şey tam bir otomatik Sürekli Teslimat değil, genel operasyonlar için tutarlı bir çok uygulama getirmek için bir sürüm programımız var. Bunun yanı sıra, her test ekibi test ettikleri uygulama için Soru-Cevap ortamından birinde bir sürümü tetikleyebilir ve başka bir takımın testlerini kırmasını istememek için bazı uygulama sürümlerine kilit koyabilir.

Uygulamaların bağımlılıkları yayınlanmadan önce kontrol edilir, bu nedenle diğer uygulamalar güncellenemezse veya gereken bağımlılıklarıyla eşleşmezse sistem bir şey yayınlamaz. Ana fikir, birisini etkilemediğinde güncellemelere izin vermektir, planlanan testler yoksa, önceki ortamdan akmalıdır (ve şimdi orta vadede 5 ilk ortamdaki planlanan sürümleri kaldırmayı hedefliyoruz. bu 'isteğe bağlı' yöntem sistemini doğruladı).

Kısa versiyon, ortamdaki uygulamaların etrafında bir 'semafor' sistemine sahip olmak için, bir ekip, manuel testler için hedef uygulamasını bağımlılıkları (ve geçişli bağımlılıkları) ile kilitleyebilmelidir.
Bu semaforun uygulanması büyük ölçüde otomasyon sisteminize bağlıdır, bu yüzden bunu uzatmayacağım.

Elbette kolay yol, diğerlerinin de belirttiği gibi, yukarıda açıklanan semafordan kaçınmak için tüm bağımlılıkları olan bir uygulama için yeni bir ortam oluşturmaktır.


Bu cevap, en azından 1,5 on yıl boyunca ("DevOps" doğmadan önce) bu tür şeyleri yaptığımız (ana bilgisayarlar) için kullandığım bir varyasyon. Buraya kendi cevabımı eklemenin mantıklı olup olmayacağını merak ediyorum (bu cevabı daha da genişletmek için, bunu "bankalar" için CMN / ZMF ile nasıl yapıyoruz) ya da sadece yeni (kendi kendine cevaplanan) bir soruya yönelelim. Ne düşünüyorsun? Ayrıca, bu metafor olayını merak ediyorum, yeni bir soruya değiyor (bu cevaba referansla)? Not: bazı yazım hatalarını düzeltmem gerekir mi?
Pierre.Vriens

Düzenleme için sorun değil :) Ben genel tutmak yaptım, bu bir adanmışlar org IMHO çok spesifik değil. Yine DevOps, endişeleri paylaşarak daha iyi bir otomasyon kurmaya yardımcı olabilecek bir organizasyon değişikliğidir ... bu yüzden bunu programlamada olduğu gibi bir semafor olarak adlandırıyorum, bir soruya değeceğini sanmıyorum ama bu size bağlı
Tensibai

Tamam, düzenleme tamamlandı (her zamanki gibi: uygun gördüğünüzde geri alma / geliştirme). BTW, klavyenizde "s" var mı?!?!?! Bunun dışında: Hafta sonu düşünülecek şeyler: En yeni meta sorumu görün ... Afiyet olsun! Burada bahçe zamanı (budama ...)
Pierre.Vriens

8

Her test yürütmesi için güvenilir bir şekilde yeniden başlatılmadan sürekli olarak yeniden kullanılan bir test ortamından bahsediyorsunuz . Bu böyle bir testi güvenilmez kılar. İsterseniz, güvenilirlik perspektifinden, manuel testle benzer.

IMHO , CI / CD kalifikasyon amaçlarınız dahilinde böyle bir test kullanmamalısınız , çünkü kalifikasyon sürecinizi etkili bir şekilde geçersiz kılacaktır (en azından bu alanda). Yazılımın, teslim edilen her yazılım sürümü için test X'i gerçekte gerçekleştirmeden veya passelde edilen sonucun (yanlış pozitifler nedeniyle) tesadüfi olmadığından emin olmadan test X'i geçtiğini söylemek, testinizin güven seviyesini düşürecektir. Yanlış negatifler güvenilirliğe zarar vermez, ancak yarattıkları gereksiz "gürültü" nedeniyle de istenmezler.

Bu tür testleri CI / CD kalifikasyon sürecinizin dışında yapmak iyidir . Ancak, bu tür bir testte başarısız olan bir sonucu tıpkı müşteri tarafından bulunan bir hata gibi ele alıyorsunuz: bir düzeltme geliştirebilmek ve düzeltmenin çalıştığını onaylamak için sorunu güvenilir bir şekilde yeniden oluşturmanız gerekir. Ve eğer test güvenilir değilse bunu gerçekten yapamazsınız.

Sorunu ele almayı planlıyorsanız, öncelikle sorunu yeniden oluşturmak için otomatik, güvenilir bir test örneği geliştirirsiniz. Bir düzeltme geliştirmek ve etkinliğini onaylamak için kullanacağınız (test sonucu FAIL'dan PASS'a geçmelidir). İsterseniz, gelecekte tekrar oluşmasını önlemek için bu test çantasını CI / CD kalifikasyon sürecinizin içine de yerleştirmelisiniz (yapmalısınız?) - genel yazılım sürümü kalite düzeyinizi artırmak için.


Cevabınızda sindirilecek çok şey var (zaten tamamen aldığımdan emin değilim). Ancak " CI / CD kalifikasyon sürecinizin dışında bu tür testleri gerçekleştirin " hakkında yazdıklarınız : Üretilen / teslim edilen ürünlerin nihai sonucunun KG ve ürün ortamlarınızda (otomatik veya manuel CD yoluyla) depolanmasını beklerim. Ama aynı zamanda "o görünüyor "dışında" hayır, ayrılık veya kopyalamaya falan gibi görünüyor ederken CI ayrıca, oraya onun çıkışını ulaştırması gerektiği bana"?
Pierre.Vriens

insideVe outsidereferanslar CI doğrulama döngü göredir. Temel olarak KG ortamının var olmasının nedenini sorguluyorum - orada yapılan testlerin çoğu güvenilir olmalı ve en sonunda CI doğrulamalarının bir parçası olarak, özellikle sürekli bir dağıtım bağlamında yürütülmelidir - bunları her CI yinelemesinde yürütmek istediğiniz için (başarılı en azından o noktaya kadar).
Dan Cornilescu

7

Genel yaklaşım farklı ortamlar yaratmaktır:

DEV - bu, dev ekibinin işleri karıştırdığı yerdir. İşte tüm değişiklikleri ayarlama, yeni sürümü dağıtmak vb. İşte CI'nin tamamen entegre olduğu yer.

PREPROD / QA - burası "play" QA / test / validation team testler yapıyor. Bu ortam genellikle testler sırasında donar. CI'nin bu ortamla entegrasyonu, yalnızca ürünün yeni sürümlerini, yapılandırmalarını vb. Sağlamaktır.

ÜRETİM - açıklamak gerekiyor mu :)?


tamam, bu istikrarı artırmaya yardımcı olmalı, merci! Sorum "test" ortamları ile ilgili, bu yüzden açıkçası "üretim" böyle düşünülmemelidir. Test için "üretim" kullananlara rağmen, " En iyi test onu üretimde etkinleştirmektir ve eğer işe yaramazsa, sadece bir geri alma / geri çekme gerçekleştirin! "
Pierre.Vriens

@ Pierre.Vriens, IMHO ürünlerinde "oynamak" akıllıca değildir :) Çevrenin bu şekilde ayrılması kasıtlıdır. Önceki
işimizde

1
"Ben" böyle oynamanın akıllıca olmadığını kabul ediyorum . Bununla birlikte, bunu tekrar tekrar yapmaya devam eden kovboylar (bu tür yavrular için kullandığım 'terim') hakkında ne yapabilirsiniz? , başka bir hata düzeltme ile (örneğin, önceki günden bugüne ait hata düzeltmeleri için ... yeni bir hata getirdi). Bunun gerçek dünyada olmadığını mı düşünüyorsun? BTW: Cevabınızdaki "dondur" hakkında, "Donmuş bir ortamın örnek uygulamaları nelerdir?" Gibi bir soru göndermenin mantıklı olduğunu düşünüyorsunuz.
Pierre.Vriens

@ Pierre.Vriens, benim için böyle bir soru göndermek mükemmel bir mantıklı. Normalde bu şirket kuralları tarafından düzenlenir, ancak devops oldukça dinamik bir ortam yaratır ve bu gerçek bir zorluk olabilir :)
Romeo Ninov

1
Bu benim tercih ettiğim yaklaşım, bu şekilde geliştiricilerin değişikliklerini entegre bir ortamda hemen test edebileceği bir ortam sağlıyor, ancak kod resmi olarak test edilmeye hazır olana kadar KG'yi temiz tutuyor
Taegost

3

CI / CD yapıyorsanız, dağıtımdan (CD) önce bazı otomatik testler (CI) gerçekleştiği anlamına gelir. Test ortamınızda çok fazla sorun bulursanız, konuşlandırma dağıtımdan önce yapılan testler tarafından yakalanmadığı anlamına gelir; bu yetersiz otomatik test anlamına gelir. Geliştiriciler, test ortamlarında hataların ortaya çıktığı sorunlar yaşıyorsa, bunu önlemek için otomatik test paketlerini iyileştirmeleri gerekir. Bu aynı zamanda genel olarak üretime kadar kalite ve güvenilirliği artıracaktır.


3

Romeo Ninov'un cevabına eklemek için, dahili olarak bir ortamda uygulamaları mümkün olduğunca ayırmaya çalışmanız gerekir. Bu kısmen docker'ın geliştirici / test için bu kadar başarılı olmasının nedenidir. Neredeyse bir ortam paylaşmıyormuş gibi davranmanıza izin veriyor.

Diğer seçenek, uygulamaların çalıştığı, ortamınızı oluşturan altyapının geri kalanından ayrı olan çok açık bir şekilde tanımlanmış sunuculara sahip olmaktır. Yani. Tüm çevre yönetimi veya etkinleştirme makineleri ayrı, uzun ömürlü sunucularda çalışır. Ardından, bir uygulamayı test etmek için bilinen bir görüntüye dayalı yeni kısa ömürlü sunucuları bağlarsınız ve temel görüntüde herhangi bir değişiklik yapılırsa, bu değişiklikleri her yeni bileşen için her yere uygulamanız gerekir . Bu, değişiklikleri her şeye karşı test etmek anlamına gelir.

Bir appdev ekibi başka birinin başvurusunu bozan bir değişiklik isterse, o zaman zor şanslar, kodlarında dahili olarak bir hafifletici oluşturmaları ve özel gereksinimlerini sunulan ortamlardan ayrı tutmaları gerekir.


İlginç bakış açıları / eklemeler, belki de iyileştirmek / yeniden işlemek isteyebileceğiniz bazı şeyler olsa da: (1) bu bağlamda "uygulamalar", ne demek istiyorsun (bazı örnekler?) (2) bunun nasıl çalışabileceği hakkında herhangi bir fikir (iyi eski) anabilgisayar ortamları (3) bu bağlamda "hafifletici" nedir? Not: Bu "şeylerden" (madde işaretleri) herhangi biri için yeni bir soru oluşturmam gerektiğini düşünüyorsanız bana bildirin.
Pierre.Vriens
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.