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 myapp
adlı bir RESTful web hizmeti tarafından desteklenen adlı bir uygulama var .myws
mydb
Şu anda, ben dediğimiz şeyin "var düzenledi : Bu bağımlılıkları arasında" promosyon myapp-dev
işaret ettiği myws-dev
kullanımlar mydb-dev
. Benzer şekilde, kullandığı myapp-qa
nokta . Aynı için ve .myws-qa
mydb-qa
DEMO
LIVE
Bu sorun diyelim ki, ben bir değişiklik yapmak o zaman olduğunu myapp
, bu değişiklik yapmak için beni gerektirir myws
ve mydb
hem de. Ancak her DEV
ortam 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-dev
ve myapp-dev
kü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
DEMO
bunların üretim dışı ortamın tümü için, kendi alt bağımlılıklar için çevre (DEV
,QA
veDEMO
); ve - Yukarı
LIVE
akı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-dev
noktanın myws-demo
kullanılacağını gösterir mydb-demo
. Benzer şekilde ve myapp-qa
işaret eder .myws-demo
mydb-demo
Burada bulabileceğim avantaj, yapı stabilizasyonu : DEMO
belirli bir bileşen için ortamın kararsız hale gelmesi çok daha az olasıdır , çünkü kod DEMO
hem DEV
ve üzerinde sıkı testler yapmadan bunu yapamaz QA
.
Eğer bu yöntem bulmak tek dezavantajı, DEMO
belli 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 DEV
ve ü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?