Ekibim şu anda oldukça basit bir dallanma / dağıtım işlemi kullanıyor:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
Her ortamın kendi dalı ( git'i kullanırız) ve o dalı kullanan kendi yapısı vardır. Bir ortamdan diğerine, örneğin DEV'den KG'ye yükseltmek istediğimizde, master
dalı qa
yeni bir KG yapısına birleştirir ve başlatırız (daha sonra otomatik olarak KG ortamına dağıtılır).
Her bir çevre için özel bir şubeye ve yapı oluşturmaya gerek bırakmayacak yeni bir sürece geçmeyi düşünüyoruz. Bunun yerine, tek bir sürüm derlemesi daha sonra herhangi bir ortama dağıtılabilecek bir "dağıtım paketi" oluşturur. Tipik bir iş akışının şöyle görüneceğini düşünüyoruz:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
Bir ortamdan diğerine terfi etmek artık kaynak kontrolünde ele alınmayacaktır; bunun yerine, önceden oluşturulmuş ikili dosyaları ("dağıtım paketi") alıp yeni ortama bırakıyoruz.
Bu yeni sistem, herhangi bir yapıyı çeşitli avantajlara sahip herhangi bir ortama dağıtmamıza izin verecektir. Örneğin, DEV ve KG'de PROD hata düzeltmelerini test etmek önemsizdir. Mevcut sistemimiz, kaçınmak istediğimiz bir dalı geri almadan bunu yapmanın kolay bir yolunu sunmuyor.
Bu yeni sistemle ilgili en büyük dezavantaj, artık hangi ortamda hangi kodun bulunduğunu izlemenin otomatik bir yoluna sahip olmamamızdır. PROD'da bir düzeltme yapmamız gerekiyorsa, artık mevcut üretim kod tabanıyla senkronize edilmiş özel bir şubemiz yok. Aynı şey KG için de geçerlidir - devam eden çalışmaları taramadan KG'ye hızlı bir değişiklik yapmak istiyorsak master
, artık KG ortamının mevcut durumunu yansıtan bir şubemiz yok.
Her ortamda hangi kodun bulunduğunu nasıl takip edebiliriz?
Düşündüğümüz bazı seçenekler:
- hangi ortamda hangi taahhüdün bulunduğunu takip etmek için git etiketlerini kullanma
- derleme tarafından kullanılan git komutunu her dağıtım paketine gömme