Sayfalar

12 Mart 2022

Jenkins Matrix Authorization Strategy Plugin ve No Type Prefix Hatası, Jenkins Versiyon Güncelleme ve Güvenli Restart İşlemleri

Jenkins Bilgi

Kurumsal dünyanın kullandığı DevOps uygulaması olan Jenkins'de bu hafta Matrix Authorization Strategy eklentisinden dolayı aldığım No Type Prefix hatası ve çözümünü, Jenkins versiyon güncelleme işlemlerini ve güvenli Restart nasıl atılır bunları anlatacağım. Jenkins aracı için öğrendiğim ve size aktaracağım bilgileri genelde kurumsal dünya dili ile aktarmaya çalışacağım. Örneğin bir önceki makalemde kullanıcı ekleme işlemini internet üzerinde anlatılan şekilde standart bir kullanıcı ekleme şeklinde değil de kurumsal departmanlarda nasıl bu işlerin yapıldığı üzerinden biraz sizlere anlatmaya çalıştım. Aynı şekilde bundan sonraki süreçleri de bu şekilde sizlere anlatarak bilgi teknolojileri departmanında çalışan arkadaşlar için umarım faydalı olacağını düşünüyorum. İlk olarak No Type Prefix hatası ile nasıl karşılaştım ve çözümünü nasıl bulduğumu anlatayım. Bildiğiniz gibi geçen haftalarda Jenkins uygulamasının kararlı sürümüne güncelleme paketi geldi ve siz de şirkette güncellediyseniz şu an Jenkins sürümünüz 2.319.3 olmalıdır. Bu güncelleme sonrası kullandığımız Plugin araçları içerisinde Matrix Authorization Strategy isminde bir eklenti vardır. Bu eklenti genelde kullanıcılar üzerinde yetkilendirme, kullanıcıların tek tek silinme işlemi ve izinlerin ayarlanması gibi işlemler için gereklidir.

Matrix Authorization Strategy eklentisinin 3.1 versiyonu olarak ana bir sürümü çıkmıştır. Bunu güncellemeden önce zaten paket uyarı vermektedir. Bu eklentinin yeni sürümü kurulu olan Jenkins sürümü ile uyumsuz olabilir şeklinde bir Warning mesajı vardır. Ben yine de eklentiyi güncelledim ve sonradan Jenkins'i Yönet panelinden Manage and Assign Roles sekmesinden Assign Roles alanı geldim ve tüm kayıtlı kullanıcıların üzerinde No Type Prefix hatasının yazdığını gördüm. Sonrada Community Jenkins üzerinden Matrix Authorization Strategy eklentisi ve No Type Prefix hata sözcüğünü arattığımda çoğu Admin bir önceki sürüm olan 2.6.11 sürümüne eklentiyi düşürmüş ben de aynı yöntemi izledim ve hata çözüldü. Eklenti sürümünü düşürmek içinse Jenkins'i Yönet kısmından Eklentileri Yönet paneline gelin ve yukarıdaki Yüklenmiş sekmesine tıklayıp Matrix Authorization Strategy eklentisini aratın ve 3.1 versiyondan 2.6.11 sürümüne alçalt butonuna basarak eklentiyi eski sürümüne geri döndürebilirsiniz. Hata adlığınız birçok eklenti için ve bir önceki kararlı sürüme eklentiyi döndürmek için bu yöntemi izleyebilirsiniz.

Jenkins No Type Prefix Hatası

İkinci anlatacağım işlem ise Jenkins versiyon güncelleme işlemidir. Evinizdeki lokal bilgisayara kurduğunuz Jenkins'i eklenti kurar gibi ana sürümün versiyonunu panel üzerinden Upgrade yapıp versiyon yükseltme yapabilirsiniz. Fakat kurumsal hayatta bu şeklide işler yürümediği için bu güncellemeyi genelde sunucunun sahibi olan Linux Admin yapmaktadır. Siz her ne kadar DevOps ekibi yönetseniz bile hatta Jenkins'in kurulu olduğu Red Hat veya Centos sunuculara SSH ile bağlanma yetkiniz olsa bile Root (Süper Kullanıcı) yetkisini asla size vermezler. Genelde Linux, Unix ve Windows sunucuların süper kullanıcı yetkisi sadece sistem ekiplerinde olur ve bu ekiplere Jenkins versiyon yükseltmesi için talep açmanız gerekebilir. Peki Jenkins versiyon yükseltme için talep açtığınız Linux sunucu üzerinde genel hatları ile bu güncelleme işlemleri nasıl yapılıyor ondan biraz bahsedeceğim.

İlk olarak yüklü Jenkins versiyonu sunucu üzerinde aşağıdaki komutlar ile kontrol edilir.
# cat /var/lib/jenkins/config.xml | grep /version
# cat /var/lib/jenkins/config.xml | grep '<version>'

Red Hat veya Centos sunucularda Yum yükleme paket yardımcısı ile ana Jenkins sürümü güncellenir.
# yum check -update jenkins (Önce Sürüm Paketi Kontrol Edilir.)
# yum update jenkins

Sonrasında güncel versiyonun yansıması için Jenkins uygulaması değil sunucu komple Reboot edilir. Hostname komutu ile sunucu adı önce öğrenilir ve sonrasında Reboot komutu verilir.
# hostname
# reboot jenkins.kurumsalcompany.com

Sunucu Reboot işlem sonrası Jenkins servislerinin statüsünü kontrol edebilirsiniz. Eğer Jenkins ayağa kalkmazsa fakat sunucuya Connection atabiliyorsanız Jenkins Start komutunu kullanabilirsiniz.
# systemctl status jenkins
# sudo service jenkins start

Reboot işleminden sonra tekrardan Jenkins versiyonu sunucu üzerinden komutla kontrol edilir ve yeni versiyonun yansıdığı görülür. Sunucu üzerinde Jenkins dosyaları hangi Path yani dizindedir ve burada yetkili SSH kullanıcı seviyesine nasıl geçilir biraz da bunlardan bahsedelim.

# cd /var/lib/jenkins
# sudo su - jenkins

Yukarıdaki komut ile Jenkins ana dizinine girip sudo komutu ile yetkili kullanıcı konumuna geçebilirsiniz. Geçiş sırasında SSH terminal ekranındaki SH komut imleci BASH komut imlecine dönüşecektir buradan da sudo komutu ile yetkili olarak geçiş yaptığınızı anlayabilirsiniz.

# var/lib/jenkins/plugins (Eklentiler Klasörü)

# var/log/jenkins (Log Dosyaları)

# var/lib/jenkins/plugins/fortify (Fortify Güvenlik Eklentisi Path)

# var/lib/jenkins/plugins/fortify/META-INF/maven/org.jenkins-ci.plugins/fortify/pom.xml (Fortify Versiyonu Öğrenebilirsiniz)

# var/lib/jenkins/plugins/fortifyJenkins (Fortify Jenkins Plugin Güvenlik Eklentisi Path)

Son olarak şunu da eklemek isterim şu an Jenkins versiyonuna yeni sürüm gelmiş olup 2.332.1 paketi gelmiştir. Normalde yukarıda bahsettiğim gibi kendi evinizdeki lokal Jenkins'i panel üzerinden güncelleyebilirsiniz fakat kurumsal dünyada bu işler biraz daha benim ikinci anlattığım şekilde olup terminal üzerinden yapılmaktadır. Ayrıca Jenkins güncellemesi zamanını genelde mesai saatleri sonrası yapmanızı tavsiye ederim. Özellikle Production geçiş haftası Preprod ve diğer Stage aşamalarında paket Deploy işlemleri çok olacağı için Production geçiş süreci sonrası yükseltme işlemi yapmanızı tavsiye ederim. Çünkü canlı çıkışı öncesi birçok ekip Deployment işlemi yapacağı için Jenkins yapılandırması ve Node'lar dolu olacağı için versiyon yükseltme işlemini biraz erteleyebilirsiniz. Bu arada Jenkins versiyonunun diğer beta sürümü olan 2.338 olanı vardır bir de. Bu ikinci beta paket kurumsal dünyada pek kullanılmamak ile birlikte belki Matrix Authorization Strategy gibi eklentilerin son sürümü bu paket ile daha senkronize çalışabilir. Tabii denemediğim için detayını bilemiyorum.

Jenkins Safe Restart

Üçüncü anlatacağım işlem ise panel üzerinden güvenli (Safe Restart) Restart ve normal yeniden başlatma (Restart) işlemlerini anlatacağım. Siz de fark ettiyseniz Jenkins'i Yönet ekranında Jenkins yeniden başlat diye bir seçenek yoktur. Onun yerine Kapatma İşlemine Hazırlan seçeneği vardır. Bu opsiyon bir sebep girilerek Jenkins uygulamasını sunucu üzerinde tamamen kapatır ve yeniden başlatmaz bu yüzden burayı asla yeniden başlatma ve benzeri ihtiyaçlar için kullanmayınız. Jenkins uygulamasını yeniden başlatmak için Browser yani İnternet tarayıcısı kısmındaki Hostname (Domain) adının sonuna safeRestart veya restart yazarak bu işlemi panel üzerinden sunucuya SSH bağlantısı yapmadan sağlayabilirsiniz.

1) Safe Restart (Güvenli Yeniden Başlatma)
# localhost:8080/safeRestart

2) Restart (Normal Yeniden Başlatma)
# localhost:8080/restart

Peki Safe Restart ve Restart arasındaki fark nedir diye soracak olursanız; Jenkins'te safeRestart yapmaya çalıştığınızda çalışan tüm işlerin, yapılandırmaların ve Deploy işlemlerinin bitmesini bekleyecek ve ardından Yeniden Başlatma işlemini başlatacaktır. En tavsiye edilen yöntem de budur. Normal Restart yani yeniden başlatma işlemi ise tüm işleri öldürür ve yeniden başlatma ile ilerler. Bunu pek tavsiye etmiyorum çünkü o sırada önemli bir Deployment işlemi olabilir ve siz o sırada paket Pipeline'da süreçlerini bitirmeden öldürmüş olursunuz. Bu yüzden bu yöntemi acil olmadığı sürece kullanmanızı tavsiye etmiyorum. Umarım Jenkins ile ilgili yeni öğrendiğim bilgiler işinize yaramıştır. Önümüzdeki günlerde Jenkins ile ilgili yeni bilgileri sizlerle paylaşamaya devam edeceğim.

Burak AVCI - Update: 12.04.2022

Hiç yorum yok:

Yorum Gönder

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