Jenkins ve .NET Continuous Deployment

Uzun zamandır Turuncu bünyesinde continuous altyapısı kurmak istiyorduk. Sonunda Jenkins ile deployment sunucusu kuracak zamanı bulabildik.

Mademki bu işler bu kadar karmaşık ve internet deki kaynak sayısı da çok az yazalım da herkes faydalansın istedik.

Artık git yada svn repolarımıza commitlediğimiz işler anında test sunucularımıza deploy olup testlerin kolayca yapılabilmesini sağladı.

Öncelikle genel yapıyı biraz şekillendirelim.

Genel Yapı

Kısaca anlatmak gerekirse Visual Studio ile geliştirdiğimiz uygulamamızı SVN repomuza commitliyoruz ve Jenkins repoyu kontrol edip MsBuild plugini ile projeyi derliyor ve yazdığımızı ufak bir batch komutuyla da IIS üzerinde ilgili test domainini oluşturarak sitemizi yayınlıyor.

Jenkins Nedir?

Jenkins açık kaynak kodlu bir sürekli entegrasyon aracıdır (CI). Java ile geliştirilmiş ve bünyesinde birçok güzel plugin’i barındırmaktadır. Kodlarınızı istediğiniz sürümleme sisteminden alıp akış şemasını sizin belirleyebileceğiniz şekilde derleme işlemini yapar, testleri çalıştırır, hataları raporlar ve sayısız başka işleme tabi tutabilir. (Biz kısaca süper bişeymiş bu ya!!! dedik)

MsBuild Nedir?

MsBuild (Microsoft Build Engine) , Microsoft (Maykrosoft)’un derleme platformudur. XML tabanlı bir script yürütme yapısına sahiptir. Aslında Visual Studio ile herhangi bir uygulamayı derlediğinizde yine bu alet çalışmaktadır. Kısacası kodlarınızı işe yarar hale getiren mekanizma diyebiliriz.

Hazırlanalım

Öncelikle bir Windows sunucumuz olduğunu ve tüm kurulumlarının yapıldığını, üzerinde IIS’in olduğunu varsayıyorum.

Yapmanız gereken Jenkins’in windows sürümünü indirip sunucunuza kurmak

jenkins’i şu adresten indirebilirsiniz.

daha sonra yapmanız gereken MsBuild’in son sürümünü indirip kurmak olacaktır. Onuda şu adresten indirebilirsiniz.

.NET 4.5 SDK’sı da sunucuda kurulu olmalıdır onuda şu adresten indirebilirsiniz.

son olarak uygulamanızda eğer Nuget paketleri kullanıyorsanız bunlarında deployment aşamasında projenize dahil edilebilmesi için nuget cli uygulamasını indirmelisiniz o da bu adreste

indirmelerimiz bittiğinde işlem sıramız aşağıdaki gibi olacaktır.

1- MsBuild’i kurun: İndirdiğiniz windows installer dosyasını ileri ileri diyerek kurun.

2- .NET 4.5 SDK’i kurun: İndirdiğiniz windows installer dosyasını yine ileri ileri diyerek kurabilirsiniz.

3- Jenkins’i kurun: Kurulumu basit bir windows installer üzerinden gerçekleşiyor. Kurulumun ardından http://localhost:8080 adresinden sizin önünüze jenkins installer ekranı geliyor ve sizden hangi pluginleri kurmanızı istediğinizi soruyor. Kurulumda bir administrator password oluşturuyor ve bu password dosyasını nerede bulacağınızı size söylüyor o pathden dosyayı açıp içindeki şifreyi bu arayüze girmeniz yeterli. Installer ile işiniz bittiğinde jenkins sorunsuz çalışacaktır.

4- Nuget CLI: Jenkins’in yüklendiği dizinin içerisine (Program Files\Jenkins gibi) nuget adında bir klasör oluşturun ve indirdiğiniz “nuget.exe” dosyasını bu klasörün içerisine taşıyın.

Kurulumlarla işimiz bittiğine göre ayarlara geçebiliriz.

Jenkins’in arayüzüne girelim http://localhost:8080. Jenkins’i Yönet menüsünden Sistem konfigürasyonunu değiştir bölümüne girelim.

Global Properties alanında 3 tane variable tanımlamamız gerekiyor bunlar şu şekilde.

MSBUILDPARAMS
/p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True
NUGET
C:\Program Files (x86)\Jenkins\nuget\nuget.exe
WEBROOT
c:\Webroot

Not: Dilerseniz E-posta bilgilendirmesi alanından gerekli ayarları da bu ekrandayken yapabilirsiniz. Böylece jenkins size e-posta gönderecek kabiliyete kavuşmuş olacaktır.

Şimdi tekrar Jenkins’i Yönet menüsünden bu sefer Global Tool Configuration bölümüne girelim. Burada MsBuild alanından “MsBuild Installation” butonuna basıp aşağıdaki şekilde bir konfigürasyon yapalım

Name
MsBuild-Default (İstediğinizi Yazabilirsiniz)

Path to MsBuild
C:\Program Files (x86)\MSBuild\14.0\Bin (MsBuild’in Kurulduğu dizindeki bin klasörü)

Jenkins konfigürasyon işlemlerimiz bu kadar şimdi projemizi oluşturalım.

Jenkins ana ekranından “Yeni Item” menüsüne girelim. Projenize bir isim verdikten sonra “Serbest-stil yazılım projesi yapılandır” ı seçip “OK” butonuna basalım.

Çalışma alanınız oluşturulduktan sonra sol menüde “Konfigürasyonu düzenle” menüsüne girelim.

Kaynak kodu bölümünden GIT yada SVN seçerek gerekli ayarları yapın ayarlar son derece basit olduğu için buraları hızlı geçiyorum.

Bu işlemide gerçekleştirdikten sonra “Yapılandırma” bölümüne gelelim burada “Yapılandırma adımı ekle” butonundan 3 adet işlem ekleyeceğiz.

1- Windows batch komutu çalıştır yaparak aşağıdaki kodu girin.

c:\Windows\system32\inetsrv\appcmd.exe add site /name:<site-adı> /physicalPath:<site-yolu> /bindings:http/*:80:<site-adı>
<site-adı>: Test sitenizin domainini yazın örn: test.turuncuweb.net
<site-yolu>: Sitenizin derlenip koyulacağı adres ki bunun ana dizinini jenkins’in environment variables kısmından eklemiştik sonuna proje adını yazabilirsiniz örn: c:\Webroot\test.turuncuweb.net

2- Windows batch komutu çalıştır butonuna tekrar basalım ve aşağıdaki kodu girelim.

“%JENKINS_HOME%\nuget\nuget.exe” restore “%WORKSPACE%\<proje-adı>\<proje-adı.sln>”
<proje-adı>: Projenizin adını yazın örn: TuruncuTest
<proje-adı.sln>: Proje klasörünüzün içindeki sln dosyanızın adını yazın genelde projeniz ile aynı isimde olur değiştirmediyseniz. örn: TuruncuTest.sln

3- Build a Visual Studio project or solution using MSBuild butonuna basalım ve aşağıdaki şekilde düzenleyelim.

MSBuild Version : MsBuild-Default
MSBuild Build File: ${WORKSPACE}\<proje-adı>\<proje-adı.sln>
 Command Line Arguments: ${MSBUILDPARAMS} /p:publishUrl=”${WEBROOT}\<site-yolu>”

tüm bu işlemleri yaptıktan sonra artık derin bir nefes alabilirsiniz. Tek yapmanız gereken Jenkins’den proje ekranınıza gelip “Şimdi Yapılandır” butonuna basmak.

Eğer herhangi bir problemle karşılaşırsanız ve projeniz deploy olmazsa “Yapılandırma Geçmişi” kısmından hatalı olan yapılandırmaya gidip “Console Output” kısmına bakıp hatanızı görebilirsiniz.