Jenkins ile ilgili daha güncel bir yazıya buradan ulaşabilirsiniz.
Jenkins açık kaynak kodlu olarak geliştirilmiş, sürekli entegrasyon (continuous integration, kısaltması CI) amacıyla kullanılan bir otomasyon aracıdır. Jenkins, Java ile yazılmış ve farklı işletim sistemlerinde çalışabilmekte olup, yüzlerce eklentisi ile birlikte, çalıştığımız projenin derlenmesi, testlerinin çalışması, uygulamanın dağıtılmasını otomatize edebilmektedir.
Sürekli entegrasyon dediğimiz kavramdan da bahsedelim. Martin Fowler’ın tanımlamasına göre, sürekli entegrasyon bir yazılım geliştirme pratiği olup, ekip üyeleri, yaptıları işleri, yazdıkları kodları projeye sıklıkla entegre ederler. Böylece gün içerisinde birkaç defa entegre etmiş olurlar. Bu entegrasyon sırasında proje derlenir, otomatik olarak testler çalıştırılır ve böylece projenin tutarlı, çalışabilir bir durumda kalması sağlanmış olur. Herhangi bir hata oluşması durumunda ekip üyeleri durumdan hemen haberdar olur ve gereken düzeltmeyi yaparlar.
Sürekli entegrasyon sürecini işletmek için, projede bir sürüm kontrol aracının (git, svn, mercurial vs) kullanılması gerekiyor ki günümüz şartlarında artık sürüm kontrol aracı kullanılmayan proje yok gibi bir şey. Farklı sürekli entegrasyon araçları arasından Jenkins, açık kaynaklı olması, uzun yıllardır piyasada kullanılmış olması ve sağlam bir geliştirici topluluğunun desteğini arkasına alması sayesinde tercih edilebilecek bir araç konumundadır.
Jenkins’i msbuild eklentisi sayesinde dotnet projeleri içinde kolayca kullanabiliriz.
Örnek Jenkins Projesi
Kurulum için sitesindeki talimatlara uyarak işlem yapabilirsiniz. Windows ortamındaki kurulum çok basit bir şekilde yapılıyor. Kurulum tamamlandıktan sonra http://localhost:8080/ sitesine bağlanarak, jenkins kontrol merkezine erişebiliriz.
Kontrol Merkezi
Jenkins’i Yönet sayfasına bağlanalım ve msbuild eklentisini yükleyelim.
Yeni Item linkine tıklayarak sürecimizi tanımlamaya başlayalım.
Bu noktadan sonra konfigürasyon düzenleme ekranına dönmüş oluruz.
İlk olarak yapmamız gereken, git ayarlarını veya hangi sürüm yönetim aracı kullanılıyorsa onun ayarlarını yapmak. Git ayarlarını yaptıktan sonra Yapılandırma Bölümüne geçelim ve yapılandırma adımı ekleyelim.
dotnet projesi olduğu için ve nuget paketleri kullandığımız için öncelikle nuget paketlerini restore edelim. Bu işlem için Jenkins’in çalıştığı bilgisayarda nuget.exe programının olması ve path ortam değişkeni içerisinden ulaşılabilir olması gerekiyor.
Yapılandırma adımı olarak shell çalıştır adımı ekleyelim. Örneğimizde myproject.sln dotnet projesinin solution dosyası. ${WORKSPACE} değişkeni, jenkins’in bize sağlamış olduğu, derleme yapılan dizini gösteren bir ortam değişkeni.
Bu değişkeni aşağıdaki örnekte olduğu gibi yazacağımız komutlarda kullanabiliriz.
Nuget Restore
Msbuild Adımı
Nuget restore adımından sonra jenkins artık msbuild ile projemizi derlesin.
Bunun için yeni bir yapılandırma adımı ekleyelim:
Bu adımda msbuild komutunun hangi parametrelerle çalışacağını belirtiyoruz.
Bu noktadan sonra en basit haliyle bir proje CI adımını tamamlamış oluruz.
Şimdi Yapılandır diyerek entegrasyon işlemini başlatabiliriz. Jenkins bizim için kodların son halini git üzerinden çekecek, derleyecek ve varsa testleri çalıştıracaktır. Bununla birlikte sürece istediğimiz kadar adım ekleyebiliriz. Eklediğimiz adımlarda batch işlem, ant taskı veya herhangi bir script çalıştırabiliriz. Bu konuyla ilgili olarak jenkins bize çok fazla esneklik sunmaktadır.
Ek Bilgi: Yapılandırma versiyonunu uygulama versiyonu olarak set etmek.
Aşağıdaki örnekte dotnet proje dosyasını (asp.net mvc) derliyor ve yayınlıyoruz (publish). Bu örneği Jenkins üzerinde Shell Çalıştır adımı ile çalıştırabiliriz. ${BUILD_NUMBER} daha önce sözünü ettiğimiz workspace ortam değişkeni gibi bize jenkinsin sağlamış olduğu yapılandırma (build) değeridir.
Bu değeri kullanarak, uygulamanın versiyonu set edilebilir. Doğruluğu yayınlanan ortamdaki dll’nin dosya özelliklerine bakarak anlaşılabilir.
msbuild ${WORKSPACE}/myproject.csproj /property:version=1.0.${BUILD_NUMBER} /property:Configuration=Release /target:publish /property:publishDir="F:/websites/myprojectwebsite"
teşekkürler