Jenkins sunucuda Pipeline üzerinde başlamış bir Build yani Deployment işlemini tamamlanmasını beklemeden nasıl iptal edebileceğinizi bir Groovy Script çalıştırarak sizlere göstereceğim. Bazı durumlarda yanlışlıkla Build işlemi başlatmış olabilirsiniz veya Pipeline aşamaları olan Test, Deploy, Unit Test, Otomasyon veya Güvenlik (Fortify Application Security) adımlarından birine takılı kalıp kuyruğa alınan diğer Build işlemlerini tıkayan bir Deployment işlemi başınıza gelebilir. Bu tip durumlarda genelde süreci iptal etmek (Kill) istersiniz. Panel üzerinden iptal butonuna bazen basınca süreç durmayabilir. Bu tip durumlarda çözümü Groovy Script çalıştırarak çözüyoruz. Jenkins'de Pipeline süreçleri, Branch yapısı olsun birçok geliştirmeyi Groovy yazılım dili ile yapabilirsiniz. Groovy temelde Java platformu (JVM) üzerinde çalışan bir programlama dilidir. Groovy programlama dilinin en önemli özelliği ise Java üzerinde çalışan dinamik diller arasında en yüksek ve kolay entegrasyona sahip dil olmasıdır. Groovy içinden herhangi bir Java nesnesini bir Groovy nesnesi gibi çağırabilirsiniz. Aynı şekilde Java içinden de Groovy nesnelerini, diğer Java nesneleriyle aynı şekilde çağırırsınız.
Jenkins üzerinden Groovy Script çalıştırmak için Jenkins'i Yönet (Manage Jenkins) kısmından Script Konsolu (Script Console) sekmesine tıklamanız yeterli olacaktır. Çıkan ekranda Groovy Script yazıp Çalıştır (Run) demeniz yeterlidir. Yazacağınız Groovy kodunun başına jenkins ve hudson Import paket isimlerini eklemeniz gerekmez bunları zaten konsol otomatik algılamaktadır. "All the classes from all the plugins are visible. jenkins.*, jenkins.model.*, hudson.*, and hudson.model.* are pre-imported" Daha önce tetiklenmiş bir Build sürecini aşağıdaki örnek Groovy kodu ile iptal etmeniz mümkündür. Aşağıdaki kod parçacığında test kısmı paketin bulunduğu Branch bilgisini yansıtmakta olup bu alan test, preprod veya uat olabilir. Örneğin siz Preprod ortamda bir paketin Build sürecini öldürmek istiyorsanız ("preprod/PaketName") şeklinde kodun içerisine yazmalısınız.
Groovy Script 1;
def build = Jenkins.instance.getItemByFullName("test/PaketName").getBuildByNumber(115)
build.doStop()
build.doKill()
Aşağıdaki kod parçacığında ise paketler hakkında detaylı bilgiler alabilir ve paketlerin hangi Branch ortamlarında olduğunu size söyler. Item içerisinde sadece paket adı yazmanız yeterlidir ilk koddaki gibi Branch bilgisini belirtmeyeceksiniz.
Groovy Script 2;
Jenkins.instance.getAllItems(AbstractItem.class).each{
item ->
[
"Paket-1",
"Paket-2",
"Paket-3"
].any {elm -> if(item.fullName.contains(elm)) println item.fullName}
};
Bu kodu çalıştırdığınızda, Pipeline'da kodu manuel elle yapılandırma listesinden çarpıya basınca aborted olarak gözükürken bunda gözükmez. Tüm Stage View kısımlarını ekrandan logları ile birlikte siler ve süreci öldürür. Öldürmek istediğiniz Build sürecinin öncelikle Yapılandırma Listesi üzerindeki ID numarasını almanız ve getBuildByNumber parametresi içerisine yazmanız gereklidir. Sonra Build sürecinin detayına tıklayıp Full Project Name kısmında yazan tam paket adını yazmanız gerekir. Bu kısım önemli olup Full proje adını almanız lazım sadece paket adını yazmanız yeterli olmaz Build olduğu Stage yani ortamı da yazmanız gerekebilir. Bu bilgiyi de getItemByFullName parametresi içerisine yazıyoruz. Sonrasında kodu Run ettiğimizde sorunsuz şekilde Build işlemi Kill olacaktır.
Jenkins.instance.queue.clear()
Son olarak Jenkins üzerindeki tüm Build ve Deployment süreçlerini iptal etmek içinse yukarıdaki kodu çalıştırmanız yeterli olacaktır. Bu işlemi dikkatli yapmanızı öneririm çünkü iptal edilmesini istemediğiniz başka süreçlerde olabilir. Bu komut ile Jenkins'deki Yapılandırma Listesi kısmında kuyrukta olan işler ile Yapılandırıcı Durumu altındaki işleyen Job'ların hepsini Kill eder yani durdurur. Yapılandırma listesi üzerinde devam eden Build süreçlerini inceleyip buna göre işlem yapmanızı öneririm.
Burak AVCI - Update: 24.06.2022
Hiç yorum yok:
Yorum Gönder
Makaleye Yorum ve Sorularınızı Bırakabilirsiniz.