Birbirimize bağımlı birçok uygulama ve web hizmetimiz var (bazı halka açık ürünler, bazıları dahili ve özel bir "arka ucun" parçası). Bu bileşenlerin her birinin 4 ortamı vardır (belirli amaçlara hizmet eden sunucu / düğüm kümeleri):
- Üretim Dışı
DEV- CI'nin push değişiklikleri oluşturduğu entegre geliştirme ortamı; mühendisler için yerel olarak yeniden üretilemeyen bulunması zor hataların giderilmesinde kullanışlıdırQA- Yalıtılmış KG / Test ortamıDEMO- İş ortakları için istikrarlı UAT ortamı
- Üretim
LIVE- Canlı / prodüksiyon ortamımız
Kod tanıtımı: LOCAL(geliştiricinin makinesi) => DEV=> QA=> DEMO=> LIVE.
Diyelim ki , kendisi denilen bir DB tarafından desteklenen myappadlı bir RESTful web hizmeti tarafından desteklenen adlı bir uygulama var .mywsmydb
Şu anda, ben dediğimiz şeyin "var düzenledi : Bu bağımlılıkları arasında" promosyon myapp-devişaret ettiği myws-devkullanımlar mydb-dev. Benzer şekilde, kullandığı myapp-qanokta . Aynı için ve .myws-qamydb-qaDEMOLIVE
Bu sorun diyelim ki, ben bir değişiklik yapmak o zaman olduğunu myapp, bu değişiklik yapmak için beni gerektirir mywsve mydbhem de. Ancak her DEVortam bağımlılıklarının ortamlarına işaret ettiğinden DEV, bu değişiklikleri aynı anda planlamak ve sunmak zorunda olduğum anlamına gelir. Ayrıca, bir yapı dengesiz / kırılırsa, genellikle diğer yukarı akış bileşenlerini indirir; değiştirirken mesela bir geliştirici sonları şey varsa mydb-dev, myws-devve myapp-devkümeler genellikle de kararsız hale gelir.
Bunu çözmek için bir araya gelerek " siled " terfi stratejisi olarak adlandırdığım bir teklif hazırlıyorum : bileşenler arası bağımlılıkların tümü bu kılavuzu izler:
- Memba bağımlılıklar bağlıdır
DEMObunların üretim dışı ortamın tümü için, kendi alt bağımlılıklar için çevre (DEV,QAveDEMO); ve - Yukarı
LIVEakım bağımlılıkları üretim ortamlarına aşağı akım bağımlılıkları için ortama bağlıdır
Bu sözleşmeyi kullanmak , hangi myapp-devnoktanın myws-demokullanılacağını gösterir mydb-demo. Benzer şekilde ve myapp-qaişaret eder .myws-demomydb-demo
Burada bulabileceğim avantaj, yapı stabilizasyonu : DEMObelirli bir bileşen için ortamın kararsız hale gelmesi çok daha az olasıdır , çünkü kod DEMOhem DEVve üzerinde sıkı testler yapmadan bunu yapamaz QA.
Eğer bu yöntem bulmak tek dezavantajı, DEMObelli bir bileşen için kırıldığında, tüm tüm üst bağımlılıkları olmayan üretim ortamlarında anda ayrılır. Ancak bunun DEVve üzerinde yapılan testler nedeniyle bunun çok nadir olması gerektiğine karşı çıkardım QA.
Bu gelmiştir var (çok akıllı ve kendimden daha deneyimli) pek çok geliştirici çözdük bu bir problem olmaya ve bu sorun ve çözümleri zaten kendilerine isim varsa ben sürpriz olmaz (I / babası silo adlandırdığım yanı sıra). Bu yüzden soruyorum: Aptal bir promosyon stratejisinin esası herhangi bir eksilerden daha ağır mı ve burada göz ardı edebileceğim eksiler neler?