Merhaba, bu makalede BiVendor ismiyle ilk defa karşılaşanlar için BiVendor Nedir? soruna cevap bulduktan hemen sonra, BiVendor Deployment sürecinde kullandığımız CI/CD(Continuous Integration ve Continuous Delivery) araçlarından en popülerlerinden biri olan Jenkings hakkında detaylı bilgileri bulabileceksiniz.

BiVendor Nedir?

Online pazar yerlerinde satış yapan satıcıların iş akış süreçlerini tek bir panelden kolayca yönetilmesini sağlayan bir uygulamadır. BiVendor hakkında daha detaylı bilgiye bu link üzerinden erişebilirsiniz.

Jenkins Nedir?

data/admin/2020/9/JenkingsMimarisi.jpeg

Java dili ile geliştirilmiş Continuous Integration CI (Sürekli Entegrasyon) için yazılmış açık kaynak kodlu otomasyon aracıdır. Resimde görüldüğü gibi kısaca local ortamda yazılmış kodun commit edildikten sonra herhangi bir git versiyon kontrol sistemine(GitLab,GitHub,Bitbucket vs.) gönderilip buradan son halini çekerek Deploy, Build ve test işlemlerinin otomatik bir şekilde gerçekleşmesi sağlar. Eğer proje build olurken hata ile karşılaşıyorsa bu hatanın hangi sebepten dolayı olduğu bilgisini göstererek geliştiricilerin bundan haberdar olmasını sağlar.

Jenkins Kurulumu

Bu yazıda Jenkins'in windows işletim sisteminde nasıl kurulum yapılacağı adım adım gösterilecektir. Diğer platformlarda nasıl yükleneceği bilgisine resmi sitesinden erişebilirsiniz.

Ön koşullar

Jenkins'i windows bir makineye yüklemeden önce bazı yazılımsal ve donanımsal gereksinimler bulunmaktadır.

Donanımsal Gereksinimler:

Minimum 256 MB Ram gereklidir.

Sabit sürücünüzde en az 1 GB alana ihtiyaç bulunmaktadır.

Yazılımsal Gereksinimler:

Jenkins, Java üzerinde çalıştığı için, Java'nın yüklü olması gerekmektedir. Eğer Java yüklü değilse Jenkings kurulumu yapılamaz. Resmi sitesindeki Java Gereksinimleri şu şekildedir. (link üzerinden orijinal haline erişebilirsiniz.)

Modern Jenkins sürümleri aşağıdaki Java gereksinimlerine sahiptir:

  • Java 8 çalışma zamanı ortamları, hem 32 bit hem de 64 bit sürümleri desteklenir
  • Jenkins 2.164 ve 2.164.1 2'den beri Java 11 çalışma zamanı ortamları desteklenmektedir
  • Jenkins'in Java 11 ile çalıştırılması burada belgelenmiştir
  • Jenkins'te Java 8'den Java 11'e yükseltme yaparken alınması gereken bazı önlemler vardır, lütfen bu yönergeleri izleyin .
  • Eski Java sürümleri desteklenmez
  • Java 9 ve Java 10 desteklenmez
  • Java 12 desteklenmez
  • Java 13 desteklenmez

Windows makinede Java versiyon bilgisini en kısa yoldan öğrenmek için bu linke(Chrome harici bir tarayıcı desteklemektedir.) tıklayabilirsiniz.

data/admin/2020/9/JavaVersiyonSS.png

Bu kontrolleri yaptıktan sonra Jenkins'in kuruluma başlayabiliriz. Jenkins'in resmi sitesinde bulunan kurulum dosyalarına bu link üzerinden erişebilirsiniz. Bu makalede stable versiyonu olan LTS(Long-Term Support) sürümünün windows makineye kurulumu aşamaları anlatılacaktır.

data/admin/2020/9/LTSVersiyon.png

İndirme tamamlandıktan sonra jenkins.msi uzantılı dosya çalıştırıldığında yükleme adımları toplam 5 adım ile sırasıyla şu şekilde olacaktır.

Adım 1:

data/admin/2020/9/Adım1.png

Adım 2:

Burada Jenkins'in nereye kurulacağı adımı yer almaktadır. Jenkins varsayılan olarak 64 Bit olan makinede C:\Program Files\Jenkins\ klasör yoluna yükleme yapar. 32 Bit için ise varsayılan yükleme yeri C:\Program Files (x86)\Jenkins\ şeklindedir. Burada değişiklik yapmadan devam edebilirsiniz.

data/admin/2020/9/Adım2.png

Adım 3:

Logon Type seçeneğini önerilen seçenek olan Run service as local or domain user seçildikten sonra Account ve Password değerleri girilmesi gerekmektedir. Burada dikkat edilmesi gereken girilecek olan bu iki değerin Windows'a giriş yapılan kullanıcı adı ve şifre değerlerinin olmasıdır.

Account: Tam Kullanıcı İsmi (Komut Satırına whoami yazdığınızda çıkan ismin tümünü kopyalamanız gerekmektedir).

data/admin/2020/9/whoiam.png

Password: Oturum açtığınız kullanıcı şifresi. (Eğer windowsa girişte 4 haneli PIN kullanılıyorsa bu değeri kabul etmemektedir. Bu sebepten parola değeri girilmesi gerekmektedir.)

data/admin/2020/9/Adım3.png

Kullanıcı adı ve şifre girildikten sonra Test Credentials butonuna basıp girilen değerlerin kontrolü sağlanır. Eğer bu bilgiler doğruysa ileri diyerek port seçim adımına geçebiliriz.

data/admin/2020/9/Adıım3.2.png

Önemli Not

Test Credentials butonuna tıkladıktan sonra"This account either does not have the privilege to logon as a service.." şeklinde başlayan bir hata mesajı ile karşılaşırsanız giriş yapılan kullanıcıya yetki vermeniz gerekmektedir.

data/admin/2020/9/Not1.png

Bu adımları takip ederek kolaylıkla oturum açılan kullanıcıya yetki verebilirsiniz.

Windows aramaya Yönetimsel Araçlar yazarak ilgili ekrana girin.

Yönetimsel Araçlar ekranında Yerel Güvenlik dosyasını açın.

Yerel İlkeler altında Kullanıcı Hakları Atamasına tıklayın.

Sağ bölümde yer alan Hizmet olarak oturum aça çift tıklayın.

Yeni kullanıcı veya grup seçeneğine tıkladıktan sonra giriş yapılan kullanıcı seçilip yetki verildikten sonra Uygula yapılır ve yetki verilerek bu sorun giderilmesi sağlanır. Kaynak Link

data/admin/2020/9/Not2.png

Adım 4:

Jenkins servisinin çalışacağı port numarası seçim ekranıdır.Varsayılan olarak 8080 port numarasını seçerek ilerleyebilirsiniz. Eğer ilgili port numarası dolu ise farklı bir port numarası girilebilir.

data/admin/2020/9/Adım4.png

Adım 5:

Son adımda Windows makinede Javanın yüklü olduğu klasör seçilerek yükleme işleminin bitmesi beklenir.

data/admin/2020/9/Adım5.png

Kurulum tamamlandıktan sonra eğer yükleme adımında varsayılan port bilgisi değiştirilmediyse http://localhost:8080/ url adresine yönlendirilmesi otomatik sağlanacaktır. 

Tarayıcıda ilgili url açıldıktan sonra Jenkings arayüzünün gelmesi biraz vakit alabilir bu sebepten dolayı biraz bekledikten sonra yönetici şifre ekranı gelmektedir.

data/admin/2020/9/JenkinsKurulumTamamlandı.png

Önemli Not

Jenkins yükleme işlemi tamamlandığında eğer tarayıcıda üsteki ekran görüntüsü gelmiyorsa Windows aramaya Servisler yazdıktan sonra Jenkins servis durumunun Çalışıyor durumunda olup olmadığı kontrol edilmelidir. Servis çalışmıyorsa durum bilgisi boş gözükecektir.

data/admin/2020/9/ServisCalisiyor.png

Servisin çalışmadığı durumda Jenkins'in yüklü olduğu yerdeki log dosyası açılıp C:\Program Files\Jenkins\jenkins.err.log.txt hatanın sebebine göre aksiyon alınmalıdır. Aşağıdaki örnek hata mesajında belirtildiği gibi Java versiyonunun 8 veya 11 olması gerektiği mevcut versiyonun 13 olduğu bu sebepten dolayı başlatamadığı uyarsı bulunmaktadır.

data/admin/2020/9/1_rJAb2vAyVf7ozyDoo0iA0Q.png

Böyle bir sorunla karşılaşıldığında mevcut windows yüklü makineye java 8 veya 11 versiyonlarını yüklendikten sonra Jenkins'in yüklü olduğu yerde bulunan jenkins.xml C:\Program Files\Jenkins\jenkins.xml dosyasında desteklenen Java'nın yüklü olduğu yer belirtilmelidir. Servisler bölümünde Jenkings servisini tekrar başlattığınızda durumunu çalışıyor olarak düzelecektir.

Jenkins'in kilidini açmak için, ekranda belirtilen konumundaki dosyadan şifreyi kopyalayın ve Yönetici şifresi alanına yapıştırın. Ardından, "Devam Et" butonuna tıklayın.

data/admin/2020/9/UnlockJenkins.png

Şifreyi girdikten sonra Jenkins plugin yükleme ekranı gelmektedir. Bu adımda önerilen pluginleri yüklemeyi seçerek ilerleyelim. Daha sonrasında gerekli olan pluginleri Jenkins arayüzü üzerinden rahatlıkla yükleyebilmekteyiz.

data/admin/2020/9/Customize.png

Varsayılan pluginler yüklendikten sonra giriş yapılacak kullanıcı adı ve şifresi belirlenir ve yükleme ekranı tamamlandıktan sonra artık Jenkins kullanıma hazır durumdadır. Jenkins'in kurulumunu tamamladık. Şimdi basit bir .Net Core projesi ile build ve deploy işlemleri nasıl otomatik hale getirilir ondan bahsedelim.

Önemli Not

Jenkins'te yeni işler oluşturmadan önce windows yüklü makinenizde Git ve MS Build yüklenmesi ve Jenkins üzerinden bu yüklü yolların belirtilmesi gerekmektedir. Bunun sebebi projenin derlenebilmesi ve Git üzerinden SSH Key ile projenin son haline erişebilmesi içindir.  Git indirme linki. Jenkins üzerinden git.exe dosyasının yüklü olduğu yolun doğru olduğunu kontrol ediniz sonrasında build ederken hata ile karşılaşabiliniyor. Bunun için Jenkins'i Yönet> Global Tool Configuration >Git Path to Git executable alanının kontrol edilmesi gerekmektedir.

data/admin/2020/9/GitPath.png

MS Build için Microsoft'un resmi sitesinden projenin hangi versiyonu build edilecekse onun SDK si indirilmesi gerekmektedir. Bu link üzerinden seçim yaparak indirebilirsiniz. Eğer .NET Framework versiyonlu bir projenin derlenmesi gerekiyorsa bunun için bu ayarın yapılması gerekmektedir. .Net Core versiyonunda dotnet build satırı bu işlemi otomatik olarak yaptığı için bu ayara gerek yoktur. Jenkings üzerinden MS Build eklentisinin yüklü olduğundan emin olunuz. Eğer yüklü değilse Jenkingsi Yönet>Eklentileri Yönet>Kullanılabilir sekmesinden "MS Build" yazarak yükleyebilirsiniz. Bu eklentiyi yükledikten sonra Jenkins'i Yönet> Global Tool Configuration>MsBuild sekmesinden windows'ta yüklü msbuild.exe yolu verilmesi gerekmektedir. Bu .Net Core projeleri için gerekli değildir.

Örnek Proje İle Jenkins Ayaları Nasıl Yapılır?

Yeni Item seçeneğini seçtikten sonra istediğimiz ismi tanımlayıp Serbest-stil yazılım projesi yapılandır seçeneğini seçiyoruz. Burada birçok farklı seçenek bulunmaktadır. Pipeline olarakta itemimizi oluşturabiliriz fakat bu makalede BiVendor projesindeki gibi deploy örneğinin anlatımı yapıldığından dolayı ilk seçeneğe seçip isim verdikten sonra butona basıp bir sonraki ekrana geçelim.

data/admin/2020/9/1_M9fOZyvxwdDabHWPgwWy-Q.png

GitHub üzerinden örnek olarak yeni bir repository oluşturularak basit bir Hello World çıktısı veren .Net Core projesi SSH url GitHub linkini kopyalayıp Git seçeneği seçtikten sonra SSH Key bilgilerini oluşturduktan sonra GitHub üzerinden Jenkins ile arasındaki bağlantıyı sağlamış oluyoruz.

data/admin/2020/9/Github.png

Repository URL bilgisini yapıştırıktan sonra ilgili projenin hangi Branch'ini çekmek istediğimizi belirtiyoruz.

data/admin/2020/9/1_L48hkypkXZXfM5z1-2UJmg.png

Eğer SSH key oluşturulmadıysa Git Gui programını açarak yeni oluşturulabilir. (Repository URL olarak eklediğiniz projenin git versiyon kontrol sisteminde GitHub,GitLab vs. SSH Key'in localinizde bulunan SSH key olacağı bilgisi unutulmamalıdır.)

data/admin/2020/9/1_7aA1buXKFqo3WkTnaAtrOw.png

Yeni Credentials ekranında SSH Username with private key seçeneğini seçip resimdeki gibi doldurulması yeterli olacaktır.

data/admin/2020/9/SSH.png

Bu işlemlerden sonra Yapılandırma adımında Windows bath ve PowerShell komutlarıyla projenin build olması deploy klasörünün IIS'te belirtiğimiz yola kopyalanması gibi ayarları yaptıktan sonra işlemlerimiz tamamlanmış olacaktır. Yapılandırma seçeneğinde bulunan PowerShell seçeneğini seçip ilk olarak build klasörünü temizleme shell komutunu ekliyoruz. Eğer PowerShell plugin olarak yüklü değilse Jenkingsi Yönet>Eklentileri Yönet>Kullanılabilir sekmesinden "PowerShell" yazarak indirebilirsiniz.

data/admin/2020/9/Yapilandirma.png

Bu örnekte Jenkins "C:\Program Files (x86)\Jenkins" yolunda yüklü olduğundan dolayı shell komutları bu yola göre yazılmıştır. İlk yapılandırma adımında Console Output ekranında adımların rahat okunabilmesi açısından ECHO ile ilgili işlem bilgi amaçlı yazılmaktadır.

ECHO Starting Delete Publish Folder $source = "C:\Program Files (x86)\Jenkins\workspace\DotnetCoreForJenkins\publish" If(Test-path $source ) {Remove-item $source -recurse -force }

Jenkinste her eklenen job yüklü olduğu klasöre workspace içinde item oluşturukenki verdiğimiz isim ile oluşmaktadır. Bu işlemi yapılandırma tamamlandıktan sonra ve ilk build işleminde otomatik belirttiğimiz item isminde klasör oluşturarak yapmaktadır. Bu sebeple yazmış olduğumuz shell ve batch komutlarında ilgili klasörler olmamasına dikkat etmeyiniz. İlk buildten sonra otomatik oluşacağı ve Git üzerindeki son halini alarak publish klasörüne yazmış olucağımız dotnet build komut satırı ile build edilip başarılı ise diğer adımlarda publish klasörüne deploy edilmesi sağlanacaktır.

Birsonraki yapılandırma adımı olarak Windows Batch seçip item ismi olarak belirttiğimiz Jenkings'te oluşturduğumuz item isimli otomatik oluşacak klasörün içine cd ile girerek dotnet restore komutunu çalıştıyoruz.

ECHO Starting dotnet restore cd C:\Program Files (x86)\Jenkins\workspace\DotnetCoreForJenkins dotnet restore

data/admin/2020/9/Restore.png

Projenin başarılı bir şekilde build edilmesi için dotnet build komut satırı çalıştırılması gerekmektedir. Bu satır ile projede küçük bir değişiklik yapıp derlemeden projeyi commitlediğiniz taktirde eğer derlemede hata ile karşılaşılırsa console ekranında bu hatayı bize gösterilmesi sağlanacaktır. Bu komut isteğe bağlı yazılabilir. dotnet publish komutu build işlemeni otomatik yapmaktadır.

ECHO Starting dotnet build cd C:\Program Files (x86)\Jenkins\workspace\DotnetCoreForJenkins dotnet build

Yeni bir windows batch yapılandırma adımı ekleyerek projenin publish ve Debug modda deploy edilmesi için ilgili yolu tanımlıyoruz. dotnet publish komut satırı için ayrıntılı bilgiyi buradan bulabilirsiniz.

ECHO Starting dotnet publish publish/DotnetCoreForJenkins cd C:\Program Files (x86)\Jenkins\workspace\DotnetCoreForJenkins dotnet publish --configuration "Debug" CoreConsoleBasicExample/CoreConsoleBasicExample.csproj --output ./../publish/CoreConsoleBasicExample

data/admin/2020/9/222.png

Son adım olarak publish klasörünü IIS üzerinde belirtmiş olduğumuz dosya yoluna kopyala adımı ile birlikte yapılandırmayı tamamlayalım.

xcopy /y "C:\Program Files (x86)\Jenkins\workspace\DotnetCoreForJenkins\publish\CoreConsoleBasicExample" D:\inetpub\wwwroot\CoreConsoleBasicExample

data/admin/2020/9/333.png

Yazmış olduğumuz komutların çalışması için Şimdi Yapılandır butonuna tıklamamız gerekmektedir. Olası bir hatada Yapılandırm Geçmişi altında ilgili buildin içine girerek Console Output üzerinden hata mesajına ulaşabilirsiniz.

data/admin/2020/9/Yapilandir.png

Yeni oluşturmuş olduğumuz item için basit bir şekilde nasıl Git üzerinden projeyinin son halini alıp derleyip bizim yazmış olduğumuz bath komutlarıyla otomatik olarak deploy edilmesini sağlamış bulunmaktayız. Basit bir örnek üzerinden en kısa yoldan Jenkins'in ne gibi kolaylıklar sağladığını öğrenmiş olduk. Jenkins docker ile tam entegre çalışabilmektedir. Bu sayede .net core projenizi docker üzerinden ayağa kaldırdıktan sonra Jenkings üzerinden pipeline'lar oluşturarak otomatik build ve publish edilmesini sağlayabilirsiniz. Canlı sunucuda Jenkins yüklü değilse FTP desteği sağladığından dolayı kendi localinize Jenkins'i kurarak FTP üzerinden canlı sunucuya publish dosyasını atarak sonrasında canlı sunucuda shell komutları çalıştararakta kullanım sağlanabilir. Bu makalede tüm kullanımına maalesef değinemiyorum. Buradaki Jenkins'in çalışma mantığını basit bir şekilde anlatmaya çalıştım umarım faydalı olmuştur.

Bu yazıyı Tekhnelogos Blog sayfası için yazmıştım diğer blog yazılarına bu link üzerinden erişebilirsiniz.