13 Haziran 2022

Jenkins'de Toplu Paket Deployment (All Job Release) İşlemleri için Pipeline Oluşturmak

Jenkins All Job Release

Jenkins uygulaması paket yönetimi ve Deployment işlemleri için kurumsal dünyada vazgeçilmez bir tamir çantasıdır diyebiliriz. Jenkins'de bir projeye ait birçok paket bulunabilir. Kurumsal iş süreçlerinde bazı durumlarda bu paketleri tek tek manuel olarak Build etmek durumunda kalabilirsiniz. Eğer Deploy etmeniz gereken birçok paket varsa ve başınıza toplu bir Deployment ihtiyacı geldiyse işte bu gibi durumları daha da kolaylaştırmak için All Release işlemi Jenkins'de nasıl tanımlanır biraz bundan bahsedeceğim. Öncelikle benim kullandığım Pipeline organizasyonu Branch yani Dev, Test ve Preprod gibi ortamlar altında projeler ve o projelerin içinde proje ait ekran, servis gibi paketlerin bulunduğu bir yapıdır. Örneklendirmeyi bu yapı üzerinden anlatacağım. Sizin şirketinizde buna benzer veya bundan farklı bir Pipeline organizasyonu olabilir fakat paket Build süreci hemen hemen aynı olacağı için yapacağımız konfigürasyon genel olarak geçerlidir diyebiliriz. Kısayol olması adına bu oluşturacağımız yapıyı proje bazlı oluşturdum çünkü bir proje içerisinde ortalama 3-10 arası paket bulunurken tüm şirketin projelerinin toplamı ise 100'den fazla olabilir ve tek seferde tüm projelere ait paketleri tetiklemek Jenkins Node'ların da kuyrukta çok fazla takılmaya ve Failed olmaya sebep olacağından proje bazlı yapmaya karar verdim.

İlk olarak Kontrol Merkezi kısmından Job oluşturacağımız Branch kısmını açarız. Örnek Test ortamı için oluşturmak istersek jenkins-url/job/test/ adresine giriş yapmamız lazım. Oradan Job oluşturacağımız Proje sayasına tıklarız. Örnek projemizin adı CRM olsun gideceğimiz görüntüleme sayfası jenkins-url/job/test/view/CRM şeklinde olacaktır. Test ortamı içerisindeki CRM projesi sayasını açtığınızda içerisinde ekran, servis ve diğer paket adlarını alfabetik sıralanmış şekilde göreceksiniz. İlgili ekranda sağda New Item (Yeni Öğe) diyerek yeni bir Job oluştururuz. Örneğin Test ortamı için yeni bir Job oluşturma şekli jenkins-url/job/test/newJob/ dizini üzerinden olacaktır.

Jenkins All Job Release

Yukarıdaki gibi açılan ekranda "Enter an item name" kısmına paket adı ile aynı başlayacak şekilde Wide Release, All Release veya Release yazarak yeni Job ismi belirleyebilirsiniz. Job adını yazarken paket isimlendirme kuralı ile aynı olmasına dikkat edin ve büyük küçük har duyarlılığını göz önünde bulundurun. Örneğin CRM projemizin paketleri CRM-Core, CRM-UI, CRM-WS olsun o zaman Job ismi olarak CRM-Release veya CRM-WideRelease şeklinde isimlendirme yapabilirsiniz. Burada Wide kelimesini kullanma sebebim ise paket isimli alfabetik olarak proje içerisinde sıralanmaktadır ve Wide kelimesi genelde en aşağılarda hatta aşağıda olacağı için bu Job'ı bu şekilde konumlandırmak istedim. İsim belirledikten sonra listeden Pipeline seçip OK diyerek yeni Job'ı oluşturmuş olursunuz.

Yeni oluşturduğum Job için gerekli ayarları yapmaya geçecek olursak; ilk olarak General sekmesinden başlayacağım. Açıklama alanını boş bırakabilir veya bilgilendirici uyarı yapmak istiyorsanız buraya bir açıklama yazabilirsiniz. Hemen aşağısında "Bu yapılandırma parametreleştirilmiştir." sekmesini tıklayın ve açılan alt ekranda Parametre Ekle Combobox butonuna basıp Boolean Parameter seçeneğini seçiniz. Name kısmına tek tek paketlerin tam adını yazarak hepsini ekleyiniz. Burada önemli olan bir noktaya değinmek isterim. Mesela CRM-Core paketi için Set by Default seçeneğini işaretlemedim fakat diğer tüm paketler için bu seçeneği işaretledim. Bunun sebebi ise genelde Core paketlerde yapılan değişiklik önce Deploy edilip sonradan diğer paketlere yansıması için diğer alt paketlerin Deployment işlemleri paralelde Core bitince başlatılır. Bu yüzden siz manuel olarak Core paketin Deployment ve Jenkins Test süreci bitince Release Job'ı çalıştırmanızı öneririm. Zaten oluşturacağımız Job sonucunda Build etmek istediğiniz zaman siz de göreceksiniz Core dışındaki tüm paketler Default işaretlenmiş gelirken Core paketi işaretsiz gelecektir.

Jenkins All Job Release

Jenkins All Job Release

İkinci ayar olarak Do not allow concurrent builds seçeneğini işaretleyiniz. Bu sayede eş zamanlı Job Release çalıştırılıp Node kitlenmesi yaşanmasın. Üçüncü ayar olarak Eski Yapılandırmalardan Kurtul seçeneğini seçin ve Yapılandırmaların geriye dönük saklanacağı toplam gün sayısı olarak 30 veya 120 gibi tutacağınız log sayısı ve alanınız kadar bir gün belirleyebilirsiniz. General sekmesi bu kadar olup ekstra bir ayarınız yoksa Build Triggers ve Advanced Project Options sekmelerini geçebiliriz.

Jenkins All Job Release

Son olarak Pipeline sekmesinden ayarlar için Definition kısmında Pipeline script for SCM kısmını seçiniz. SCM'nin açılımı Source Code Management yani Sürüm Kontrolü demektir. Alt SCM sekmesinden Git seçebilirsiniz. Repositories altında bulunan kurumun Repository URL adresini buraya yazabilirsiniz. Ekstradan Git Repo'ya ulaşmak için şifre kullanıyorsanız Credentials kısmını buradan konfigüre edebilirsiniz.

Branches to build kısmında ise Branch Specifier ayarlarını girebilirsiniz. Burası */master veya refs/master şeklinde bir ayar olacaktır. Git ayarlarınıza göre burayı doldurabilirsiniz. Script Path kısmı ise Jenkinsfile olabilir bunu da Git ayarlarınızdan bakabilirsiniz. Son dokunuş olarak Lightweight checkout seçeneği de işaretli olmalıdır ve Apply Kaydet diyerek Job oluşturmayı tamamlayabilirsiniz.

Job oluşturma işlemimiz tamamlandığına göre ayarladığımız paketleri toplu Deployment etme işlemine geçebiliriz. Test ortamı altındaki CRM projesi için bu işlemi yapmıştık. Bu yüzden oluşturduğumuz CRM-WideRelease Job'ı jenkins-url/job/test/view/CRM/job/CRM-WideRelease/ adresi altında olacaktır. İlgili sayayı açtığınızda Build with Parameters sekmesine tıklayın ve Set by Default olarak işaretlediğimiz paketlerin seçili olarak geleceğini göreceksiniz. Aşağıdaki Yapılandırma butonuna basarak tüm paketlerin Deployment işlemini artık paralelde otomatik başlatabilirsiniz. Pipeline üzerinde Applications kısmı hata vermediği sürece toplu Deployment işlemimiz başarılı sonuçlanmıştır diyebiliriz. 

Son olarak şunu da eklemek isterim sadece tüm paket Deployment işlemleri değil bir projeye ait Re-Deploy ihtiyaçları içinde bu Job'ı kullanabilirsiniz. Örneğin bir projenin ortak paketine kod çıkılmıştır ve sonrasında tüm paketler ortak paket Deployment işleminden sonra Re-Deploy ihtiyacı doğmuştur işte bu gibi durumlarda da kısayol olarak bu yöntem işinize yarayacaktır. Yine bu makalede Core paketler için ekstra bir yapılandırma daha yapacak olursam ekleyeceğim yazımı okumayı ve takip etmeyi unutmayınız.

Burak AVCI - Update: 14.06.2022

Hiç yorum yok:

Yorum Gönder

Makaleye Yorum ve Sorularınızı Bırakabilirsiniz.