Visual Studio Post-build script hazırlanması ve Jenkins Deployu
Bu makalede Visual Studio üzerinde tanımladığımız Build-Event komutlarının Jenkins üzerinden başarılı bir şekilde build edilmesine örnekleme yapacağız.
Makalede Jenkins konfigürasyon, Jenkins deploy ve Job hazırlanması gibi konulara girmeden Jenkins continuous integration sürecinde projede kullandığınız Build-Event shell komutlarının desteklenmesi örneklemeye çalışacağım.
Problemin Jenkins üzerinden çözümüne gelmeden önce problemi oluşturan senaryonun oluşma aşaması ve detaylarından bahsetmek istiyorum.
Visual studio build işlemini MS-Build (Microsoft Build Engine) platformu üzerinden yapmaktadır. Projelerde build sonrası otomatik olarak yapılmasını istediğimiz bazı işlemleri project Properties altında Builds Events > Post-Build Events üzerinden kolayca çözümleyebiliriz.
Projemizdeki bir ihtiyaç ile başarıyla tamamlanan bir build sonrasında spesifik birkaç dll’in belirli bir yol içerisine kopyalanması için bazı Shell komutları yazmıştık.
Yukarıda Post-build event command line içerisine yazılan shell komutları özetle projenin başarılı Build sonrasında $(SolutionDir) ve $(TargetDir) parametreleri üzerinden bir dll alışverişi yapmasını sağlıyor
Komutların yazılmasında kullanılar $(SolutionDir) , $(TargetDir) gibi parametreler Macros’lar dan temin ediliyor. (Edit Post-build > Macros )
Common macros for MSBuild commands and properties. bağlantısından MSBuild Macroslarını detaylı inceleyebilirsiniz.
Şimdi problem kısmına yoğunlaşabiliriz. Localde projenin build / Run aşamalarında herhangi bir problem olmamasına rağmen Jenkins deployunu tamamlayamadı. Jenkins loglarını incelediğimde problemin Post-Build scriptlerinde kullanılan değişkenlerle alakalı olduğunu farkettim.
Hem Jenkins hem de Visual Studio .Net projelerinde build işlemi için MSBuild kullanıyor.Aynı Build tool ile Visual Studio’nun başarılı bir deploy tamamlayıp Jenkins ‘in hata vermesinin nedeni ise ; Build event script içerisinde kullanılan değişkenlerin Visual Studio tarafından MSBuild’e otomatik olarak gönderilmesi Jenkins tarafında ise manuel tanımlamaya gerek duymasıdır.
İlgili depoyu tamamlayan Jenkins Job üzerinde ek parametre tanımıyla başarılı deploy almaya devam edebilirsiniz. Benim ihtiyacımda SolutionDir key ‘in değerini Workspace ile alabiliyordum. Siz probleme göre farklı parametreler ekleyebilirsiniz.
Makalede Visual Studio Build-Event shell komutları, Macros üzerinden değişken kullanımı , Jenkins .net projelerindeki Build mantığı gibi konuları spesifik bir problem üzerinden açıklamaya çalıştım.
Umarım faydalı olmuştur.