Dediğin gibi üçüncü bir yol var. Bence geliştirme, test etme ve konuşlandırmayı karıştırıyorsunuz. İlk olarak, ne elde etmeye çalıştığınızı anlamak için tüm SDLC'ye bir bütün olarak bakılmasını öneriyorum. Bu büyük bir konu ama özetlemek için elimden geleni yapacağım.
TL; DR;
Kısacası, ayırmanız gerekir:
- kodunuz
- uygulama yapılandırması,
- sistem ortamı yapılandırması.
Her birinin birbirinden bağımsız ve uygun olması gerekir:
- sürüm kontrollü
- test edilmiş
- konuşlandırılabilir
Daha Uzun Versiyon
İlk olarak, kod ve (ayrı ayrı) konfigürasyondan oluşan bir uygulamanız var. Bunun hem yapı hem de kasıtlı işlev için test edilmesi gerekir - buna sürekli entegrasyon (CI) denir. Bu hizmetin hem çevrimiçi hem de yerel olarak birçok sağlayıcısı vardır - örneğin deponuza bağlanan ve taahhüt ettiğiniz her seferde oluşturup test eden bir bulut sağlayıcısı için CircleCI . Deponuzu on-Prem ve benzeri bir bulut sağlayıcı, bir şeyler kullanamıyorsanız Jenkinseşdeğerdir. Uygulamanız oldukça standartsa, muhtemelen CI hizmetinin kullanabileceği bir Docker görüntüsü vardır. Değilse, uygulama kodunuzun ve yapılandırmanızın dağıtılabileceği bir tane veya böyle bir küme oluşturmanız gerekir. Doğru şekilde yapılandırıldığında, uygulama kodunuzun kalitesi hakkında çok sayıda istatistiğe sahip olacaksınız.
Ardından, uygulamanızın işlevselliğinden ve doğruluğundan memnun olduğunuzda, kod tabanı belirli bir sürüm için uygun şekilde etiketlenmelidir. Bu yapı daha sonra bir test ortamına dağıtılmalıdır. Kodun, CI'nizde test edilenle aynı olacağını unutmayın (muhtemelen bunu doğru yaptıysanız), ancak yapılandırmanız farklı olabilir. Yine bazı CI sağlayıcıları bu adımı sunabilir, böylece paketlenmiş bir uygulama ve ayrık yapılandırmanın dağıtımını test edebilirsiniz. Bu aşama tipik olarak kullanıcı işlev testlerini (yeni işlevler için) ve otomatik testleri (bilinen işlevler için) içerir. Sürüm bu aşamayı geçerse, entegrasyon testi için bir sürüm adayınız vardır. Otomasyon testlerini başka bir Docker konteynerinden çalıştırabilir,Kodlama çabası için 1: 1 olduğunu belirten bazı ölçümler (buna rağmen emin değilim).
Nihayetinde, bir sonraki adım (sistem) ortamınızı üretimdeymiş gibi inşa ettiğiniz yerdir. Üretimde Docker kullanıyorsanız, burası güvenlik sertleştirme, ağ ve sunucu optimizasyonu vb. , söylediğim gibi. Şimdiye kadar uygulamanın fonksiyonel testi tamamlanmalıdır, güvenlik ve performansla daha fazla ilgilenirsiniz. İşlevsel testlere göre, buradaki testleriniz diğer Docker görüntülerinden geliştirilebilir, dağıtılabilir ve çalıştırılabilir. Bu adım eskiden çok pahalıydı ve nadiren yapıldığı için, üretimi yeniden üreten özel bir donanıma ihtiyacınız vardı. Bugün, bu talep üzerine hemen hemen her ölçekte tüm ortamı ayağa kaldırabileceğiniz için tamamen uygulanabilir.
Son olarak, entegrasyon testinizin (IP adresleri, veritabanı URI'leri, şifreler vb.) Sadece küçük bir yapılandırma deltası seti ile üretime hazır olması gereken bir sürümünüz var. Kod tabanınız en az üç farklı ortamda test edildi noktası ve sistem yapılandırmasının çoğunluğu en az bir kez.