Xamarin ile Jenkins Kullanma

Bu kılavuz, Jenkins'i sürekli tümleştirme sunucusu olarak ayarlamayı ve Xamarin ile oluşturulan mobil uygulamaları derlemeyi otomatikleştirmeyi gösterir. Jenkins'in OS X'e nasıl yükleneceği, yapılandırıldığı ve değişiklikler kaynak kod yönetim sisteminde işlendiğinde Xamarin.iOS ve Xamarin.Android uygulamalarını derlemek için işlerin nasıl ayarlanacağı açıklanır.

Xamarin ile Sürekli Tümleştirmeye giriş, bozuk veya uyumsuz kodla ilgili erken uyarı sağlayan kullanışlı bir yazılım geliştirme uygulaması olarak sürekli tümleştirmeyi tanıtır. CI, geliştiricilerin ortaya çıkan sorunları ve sorunları çözmesine olanak tanır ve yazılımı dağıtım için uygun bir durumda tutar. Bu izlenecek yol, her iki belgedeki içeriğin birlikte nasıl kullanılacağını kapsar.

Bu kılavuz, Jenkins'in OS X çalıştıran ayrılmış bir bilgisayara nasıl yükleneceğini ve bilgisayar başlatıldığında otomatik olarak çalışacak şekilde nasıl yapılandırılacaklarını gösterir. Jenkins yüklendikten sonra MS Build'i desteklemek için ek eklentiler yükleyeceğiz. Jenkins, Git'i kullanıma sunar. Kaynak kodu denetimi için TFS kullanılıyorsa ek bir eklenti ve komut satırı yardımcı programları da yüklenmelidir.

Jenkins yapılandırıldıktan ve gerekli eklentiler yüklendikten sonra Xamarin.Android ve Xamarin.iOS projelerini derlemek için bir veya daha fazla iş oluşturacağız. İş, bazı işleri gerçekleştirmek için gereken adımlardan ve meta verilerden oluşan bir koleksiyondur. bir iş genellikle aşağıdakilerden oluşur:

  • Kaynak Kod Yönetimi (SCM) – Bu, Jenkins yapılandırma dosyalarında kaynak kod denetimine bağlanma ve alınacak dosyalar hakkında bilgi içeren bir meta veri girişidir.
  • Tetikleyiciler – Tetikleyiciler, bir geliştiricinin kaynak kod deposunda değişiklik gerçekleştirmesi gibi belirli eylemlere dayalı olarak bir iş başlatmak için kullanılır.
  • Derleme Yönergeleri – Bu, kaynak kodu derleyecek ve mobil cihazlara yüklenebilen bir ikili dosya üretecek bir eklenti veya betiktir.
  • İsteğe Bağlı Derleme Eylemleri : Bu, birim testleri çalıştırmayı, kod üzerinde statik analiz gerçekleştirmeyi, kod imzalamayı veya derlemeyle ilgili diğer işleri gerçekleştirmek için başka bir iş başlatmayı içerebilir.
  • Bildirimler : bir iş, derlemenin durumu hakkında bir tür bildirim gönderebilir.
  • Güvenlik – İsteğe bağlı olsa da Jenkins güvenlik özelliklerinin de etkinleştirilmesi kesinlikle önerilir.

Bu kılavuzda, bu noktaların her birini kapsayan bir Jenkins sunucusunun nasıl ayarlanacağı açıklanmaktadır. Sonunda, Jenkins'i Xamarin mobil projelerimiz için IPA ve APK'lar oluşturacak şekilde ayarlama ve yapılandırma hakkında iyi bir anlayışa sahip olmamız gerekir.

Gereksinimler

İdeal derleme sunucusu, uygulamayı derleme ve muhtemelen test etme amacıyla ayrılmış tek başına bir bilgisayardır. Ayrılmış bir bilgisayar, diğer roller için gerekli olabilecek yapıtların (örneğin, bir web sunucusunun) derlemeyi kirletmemesini sağlar. Örneğin, derleme sunucusu aynı zamanda bir web sunucusu gibi davranıyorsa, web sunucusu bazı ortak kitaplıkların çakışan bir sürümünü gerektirebilir. Bu çakışma nedeniyle web sunucusu düzgün çalışmayabilir veya Jenkins kullanıcılara dağıtıldığında çalışmayan derlemeler oluşturabilir.

Xamarin mobil uygulamaları için derleme sunucusu, bir geliştiricinin iş istasyonuna çok benzer şekilde ayarlanır. Jenkins, Mac için Visual Studio ve Xamarin.iOS ile Xamarin.Android'in yükleneceği bir kullanıcı hesabı vardır. Tüm kod imzalama sertifikaları, sağlama profilleri ve anahtar depoları da yüklenmelidir. Derleme sunucusunun kullanıcı hesabı genellikle geliştirici hesaplarınızdan ayrıdır. Derleme sunucusu kullanıcı hesabıyla oturum açarken tüm yazılımları, anahtarları ve sertifikaları yüklediğinizden ve yapılandırıldığından emin olun.

Aşağıdaki diyagramda, tipik bir Jenkins derleme sunucusundaki bu öğelerin tümü gösterilmektedir:

This diagram illustrates all of these elements on a typical Jenkins build server

iOS uygulamaları yalnızca macOS çalıştıran bir bilgisayarda derlenebilir ve imzalanabilir. Mac Mini makul bir düşük maliyetli seçenektir, ancak OS X 10.10 (Yosemite) veya üzerini çalıştırabilen tüm bilgisayarlar yeterlidir.

Kaynak kodu denetimi için TFS kullanılıyorsa, Her Yerde Ekip Gezgini'ni yüklemek istersiniz. Team Explorer Everywhere, macOS'taki Terminal'de TFS'ye platformlar arası erişim sağlar.

Güvenlik Duvarı Yapılandırması

Testlerin Xamarin Test Bulutu'na gönderilebilmesi için testleri gönderen bilgisayarın Test Bulutu sunucularıyla iletişim kurabilmesi gerekir. Güvenlik duvarları, 80 ve 443 bağlantı noktalarındaki testcloud.xamarin.com bulunan sunuculardan gelen ve giden ağ trafiğine izin verecek şekilde yapılandırılmalıdır. Bu uç nokta DNS tarafından yönetilir ve IP adresi değiştirilebilir.

Bazı durumlarda, bir test (veya testi çalıştıran bir cihaz) bir güvenlik duvarı tarafından korunan web sunucularıyla iletişim kurmalıdır. Bu senaryoda güvenlik duvarı aşağıdaki IP adreslerinden gelen trafiğe izin verecek şekilde yapılandırılmalıdır:

  • 195.249.159.238
  • 195.249.159.239

Jenkins'i yükleme

Jenkins'i kullanmanın ilk görevi yüklemektir. Jenkins'i OS X üzerinde çalıştırmanın üç yolu vardır:

  • Arka planda çalışan bir daemon olarak.
  • Tomcat, Jetty veya JBoss gibi bir servlet kapsayıcısı içinde.
  • Kullanıcı hesabı altında çalışan normal bir işlem olarak.

Geleneksel sürekli tümleştirme uygulamalarının çoğu arka planda bir daemon (OS X veya *nix üzerinde) veya hizmet olarak (Windows üzerinde) çalışır. Bu, GUI etkileşiminin gerekli olmadığı ve derleme ortamının kurulumunun kolayca gerçekleştirilebildiği senaryolar için uygundur. Mobil uygulamalar, Jenkins bir daemon olarak çalışırken erişmesi sorunlu olabilecek anahtar depoları ve imzalama sertifikaları da gerektirir. Bu endişeler nedeniyle bu belge, jenkins'i derleme sunucusunda bir kullanıcı hesabı altında çalıştırma adlı üçüncü senaryoya odaklanır.

Jenkins.App, Jenkins'i yüklemenin kullanışlı bir yoludur. Bu, jenkins sunucusunun başlatılmasını ve durdurulmasını basitleştiren bir AppleScript sarmalayıcıdır. Jenkins, aşağıdaki ekran görüntüsünde gösterildiği gibi bash kabuğunda çalıştırmak yerine Dock'ta simgesi olan bir uygulama olarak çalışır:

Instead of running in a bash shell, Jenkins runs as an app with icon in the Dock, as shown in this screenshot

Jenkins'i başlatmak veya durdurmak, Jenkins.App başlatmak veya durdurmak kadar basittir.

Jenkins.App yüklemek için aşağıdaki ekran görüntüsünde yer alan projenin indirme sayfasından en son sürümü indirin:

App, download the latest version from the projects download page, pictured in this screenshot

Zip dosyasını derleme sunucunuzdaki /Applications klasöre ayıklayın ve diğer OS X uygulamaları gibi başlatın. Jenkins.App ilk kez başlattığınızda Jenkins'i indireceğini bildiren bir iletişim kutusu sunulur:

App, it will present a dialog informing you that it will download Jenkins

Jenkins.App indirme işlemini tamamladıktan sonra, aşağıdaki ekran görüntüsünde gösterildiği gibi Jenkins başlangıcını özelleştirmek isteyip istemediğinizi soran başka bir iletişim kutusu görüntülenir:

App has finished its download, it will display another dialog asking you if you would like to customize the Jenkins startup, as seen in this screenshot

Jenkins'in özelleştirilmesi isteğe bağlıdır ve uygulama her başlatıldığında gerçekleştirilmesi gerekmez. Jenkins için varsayılan ayarlar çoğu durumda çalışır.

Jenkins'i özelleştirmek gerekiyorsa Varsayılanları değiştir düğmesine tıklayın. Bu size ardışık iki iletişim kutusu sunar: biri Java komut satırı parametrelerini, diğeri de Jenkins komut satırı parametrelerini ister. Aşağıdaki iki ekran görüntüsü şu iki iletişim kutusunu gösterir:

This screenshot shows the dialog that asks for Java command line parameters.

This screenshot shows the dialog that asks for Jenkins command line parameters.

Jenkins çalıştırıldıktan sonra, kullanıcı bilgisayarda her oturum açışında başlatılması için bunu bir oturum açma öğesi olarak ayarlamak isteyebilirsiniz. Dock'ta Jenkins simgesine sağ tıklayıp Seçenekler... seçeneğini belirleyerek bunu yapabilirsiniz. > Aşağıdaki ekran görüntüsünde gösterildiği gibi Oturum Aç'ta açın:

You can do this by right-clicking on the Jenkins icon in the Dock and choosing OptionsOpen at Login, as shown in this screenshot

Bu, kullanıcı her oturum açtığında Jenkins.App otomatik olarak başlatılmasına neden olur, ancak bilgisayar ön başlatıldığında başlatılmaz. OS X'in önyükleme zamanında otomatik olarak oturum açmak için kullanacağı bir kullanıcı hesabı belirtmek mümkündür. Sistem Tercihleri'ni açın ve bu ekran görüntüsünde gösterildiği gibi Kullanıcılar ve Gruplar simgesini seçin:

Open the System Preferences, and select the User Groups icon as shown in this screenshot

Oturum Açma Seçenekleri düğmesine tıklayın ve ardından OS X'in önyükleme sırasında oturum açmak için kullanacağı hesabı seçin.

Bu noktada Jenkins yüklendi. Ancak, Xamarin mobil uygulamaları oluşturmak istiyorsak bazı eklentiler yüklememiz gerekir.

Eklentileri Yükleme

Jenkins.App yükleyicisi tamamlandığında Jenkins'i başlatır ve aşağıdaki ekran görüntüsünde gösterildiği gibi URL http://localhost:8080ile web tarayıcısını başlatır:

8080, as shown in this screenshot

Bu sayfada, aşağıdaki ekran görüntüsünde gösterildiği gibi sol üst köşedeki menüden Jenkins > Jenkins > Yönet Eklentilerini Yönet'i seçin:

From this page, select Jenkins Manage Jenkins Manage Plugins from the menu in the upper left hand corner

Bu, Jenkins Eklenti Yöneticisi sayfasını görüntüler. Kullanılabilir sekmesine tıklarsanız indirilip yüklenebilen 600'den fazla eklentinin listesini görürsünüz. Bu, aşağıdaki ekran görüntüsünde yer almaktadır:

If you click on the Available tab, you will see a list of over 600 plugins that can be downloaded and installed

Birkaç eklentiyi bulmak için 600 eklentinin tümünü kaydırmak yorucu ve hataya eğilimli olabilir. Jenkins, arabirimin sağ üst köşesinde bir Filtre arama alanı sağlar. Arama yapmak için bu Filtre alanını kullanmak, aşağıdaki eklentilerden birini veya tümünü bulma ve yükleme işlemlerini basitleştirir:

  • Jenkins MSBuild Eklentisi – Bu eklenti Visual Studio ve Mac için Visual Studio çözümleri (.sln) ve projeleri (.csproj) derlemeyi mümkün kılar.
  • Ortam Enjektör Eklentisi – Bu, iş ve derleme düzeyinde ortam değişkenlerini ayarlamayı mümkün kılan isteğe bağlı ancak kullanışlı bir eklentidir. Ayrıca, uygulamayı kodla imzalamak için kullanılan parolalar gibi değişkenler için ek koruma sunar. Bazen EnvInject Eklentisi olarak kısaltılır.
  • Team Foundation Server Eklentisi – Bu, yalnızca kaynak kodu denetimi için Team Foundation Server veya Team Foundation Services kullanıyorsanız gerekli olan isteğe bağlı bir eklentidir.

Jenkins, ek eklenti olmadan Git'i destekler.

Tüm eklentileri yükledikten sonra Jenkins'i yeniden başlatmak ve her eklenti için genel ayarları yapılandırmak isteyeceksiniz. Eklentinin genel ayarları, aşağıdaki ekran görüntüsünde gösterildiği gibi sol üst köşedeki Jenkins Manage Jenkins Configure System (Jenkins > Yapılandırma Sistemini Yönet) > seçeneği belirlenerek bulunabilir:

The global settings for a plugin can be found by selecting Jenkins / Manage Jenkins / Configure System from the upper left hand corner

Bu menü seçeneğini belirlediğinizde, Sistemi Yapılandır [Jenkins] sayfasına yönlendirilirsiniz. Bu sayfa, Jenkins'in kendisini yapılandırmaya ve bazı genel eklenti değerlerini ayarlamaya yönelik bölümler içerir. Aşağıdaki ekran görüntüsünde bu sayfanın bir örneği gösterilmektedir:

This screenshot illustrates an example of this page

MSBuild Eklentisini Yapılandırma

MSBuild eklentisi, Mac için Visual Studio çözümü ve proje dosyalarını derlemek için /Library/Frameworks/Mono.framework/Commands/xbuild kullanacak şekilde yapılandırılmalıdır. Aşağıdaki ekran görüntüsünde gösterildiği gibi MSBuild Ekle düğmesi görünene kadar Sistemi Yapılandır [Jenkins] sayfasını aşağı kaydırın:

Scroll down the Configure System Jenkins page until the Add MSBuild button appears

Bu düğmeye tıklayın ve görüntülenen formdaki Ad ve MSBuild Yolu alanlarını doldurun. MSBuild yüklemenizin adı anlamlı bir ad, MSBuild Yolu ise genellikle /Library/Frameworks/Mono.framework/Commands/xbuild olan yolu xbuildolmalıdır. Sayfanın en altındaki Kaydet veya Uygula düğmesine tıklayarak değişiklikleri kaydettikten sonra Jenkins, çözümlerinizi derlemek için kullanabilir xbuild .

TFS Eklentisini Yapılandırma

Kaynak kodu denetiminiz için TFS kullanmayı planlıyorsanız bu bölüm zorunludur.

MacOS iş istasyonunun bir TFS sunucusuyla etkileşim kurabilmesi için ekip gezgini her yerde iş istasyonuna yüklenmelidir. Team Explorer Everywhere, TFS'ye erişmek için platformlar arası bir komut satırı istemcisi içeren microsoft tarafından sunulan bir araç kümesidir. Her Yerde Ekip Gezgini Microsoft'tan indirilebilir ve üç adımda yüklenebilir:

  1. Arşiv dosyasının sıkıştırmasını kullanıcı hesabı tarafından erişilebilen bir dizine açın. Örneğin, dosyanın sıkıştırmasını ~/tee olarak açabilirsiniz.

  2. Kabuğu veya sistem yolunu, yukarıdaki birinci adımda sıkıştırması açılmış dosyaları barındıran klasörü içerecek şekilde yapılandırın. Örneğin,

    echo export PATH~/tee/:$PATH' >> ~/.bash_profile
    
  3. Her Yerde Takım Gezgini'nin yüklü olduğunu onaylamak için bir terminal oturumu açın ve komutunu yürütebilirsiniz tf . tf düzgün yapılandırıldıysa terminal oturumunuzda aşağıdaki çıkışı görürsünüz:

    $ tf
    Team Explorer Everywhere Command Line Client (version 11.0.0.201306181526)
    
    Available commands and their options:
    

TFS için komut satırı istemcisi yüklendikten sonra Jenkins, komut satırı istemcisinin tam yolu tf ile yapılandırılmalıdır. Aşağıdaki ekran görüntüsünde gösterildiği gibi Team Foundation Server bölümünü bulana kadar Sistemi Yapılandır [Jenkins] sayfasını aşağı kaydırın:

Scroll down the Configure System Jenkins page until you find the Team Foundation Server section

Komutun tam yolunu tf girin ve Kaydet düğmesine tıklayın.

Jenkins Güvenliğini Yapılandırma

jenkins ilk yüklendiğinde güvenliği devre dışı bırakmıştır, bu nedenle herhangi bir kullanıcının herhangi bir işi anonim olarak ayarlaması ve çalıştırması mümkündür. Bu bölüm, kimlik doğrulaması ve yetkilendirmeyi yapılandırmak için Jenkins kullanıcı veritabanını kullanarak güvenliği yapılandırmayı kapsar.

Güvenlik ayarları, bu ekran görüntüsünde gösterildiği gibi Jenkins'i > Yönet Jenkins > Genel Güvenliği Yapılandır'ı seçerek bulunabilir:

Security settings can be found by selecting Jenkins / Manage Jenkins / Configure Global Security

Genel Güvenliği Yapılandır sayfasında, Güvenliği Etkinleştir onay kutusunu işaretleyin; Erişim Denetimi formu bir sonraki ekran görüntüsüne benzer şekilde görünmelidir:

On the Configure Global Security page, check the Enable Security checkbox and the Access Control form should appear, similar to this screenshot

Güvenlik Bölgesi Bölümünde Jenkins'in kendi kullanıcı veritabanı için radyo düğmesini açın ve aşağıdaki ekran görüntüsünde gösterildiği gibi Kullanıcıların kaydolmasına izin ver seçeneğinin de işaretli olduğundan emin olun:

Toggle the radio button for Jenkins own user database in the Security Realm Section, and ensure that Allow users to sign up is also checked

Son olarak Jenkins'i yeniden başlatın ve yeni bir hesap oluşturun. Oluşturulan ilk hesap kök hesaptır ve bu hesap otomatik olarak yöneticiye yükseltilir. Genel Güvenliği Yapılandır sayfasına dönün ve Matris tabanlı güvenlik radyo düğmesini kapatın. Aşağıdaki ekran görüntüsünde gösterildiği gibi kök hesaba tam erişim verilmelidir ve anonim hesaba salt okunur erişim verilmelidir:

The root account should be granted full access, and the anonymous account should be given read-only access

Bu ayarlar kaydedildikten ve Jenkins yeniden başlatıldıktan sonra güvenlik açılır.

Güvenliği Devre Dışı Bırakma

Unutulan bir parola veya Jenkins genelinde kilitlenme durumunda, şu adımları izleyerek güvenliği devre dışı bırakmak mümkündür:

  1. Jenkins'i durdurun. Jenkins.app kullanıyorsanız, Dock'taki Jenkins.App simgesine sağ tıklayıp açılan menüden Çık'ı seçerek bunu yapabilirsiniz:

    App icon in the Dock, and selecting Quit from the menu that pops up

  2. ~/.jenkins/config.xml dosyasını bir metin düzenleyicisinde açın.

  3. öğesinin <usesecurity></usesecurity>truefalsedeğerini olarak değiştirin.

  4. <authorizationstrategy></authorizationstrategy> ve <securityrealm></securityrealm> öğelerini dosyadan silin.

  5. Jenkins'i yeniden başlatın.

İş Ayarlama

Jenkins en üst düzeyde, bir işe yazılım oluşturmak için gereken çeşitli görevlerin tümünü düzenler. Bir işin ayrıca, kaynak kodu alma, derlemenin ne sıklıkta çalışması gerektiği, derlemenin oluşturulması için gerekli olan özel değişkenler ve derleme başarısız olursa geliştiricilere nasıl bildirecekleri gibi derleme hakkında bilgi sağlayan meta verileri de vardır.

İşler, aşağıdaki ekran görüntüsünde gösterildiği gibi sağ üst köşedeki menüden Jenkins > Yeni İş seçilerek oluşturulur:

Jobs are created by selecting Jenkins New Job from the menu in the upper right hand corner

Bu, Yeni İş [Jenkins] sayfasını görüntüler. İş için bir ad girin ve Serbest stil yazılım projesi oluştur radyo düğmesini seçin. Aşağıdaki ekran görüntüsünde bunun bir örneği gösterilmektedir:

Enter a name for the job, and select the Build a free-style software project radio button

Tamam düğmesine tıklanması işin yapılandırma sayfasını gösterir. Bu, aşağıdaki ekran görüntüsüne benzemelidir:

This should resemble this screenshot

Jenkins, şu yolda bulunan sabit diskteki bir dizindeki işleri düzenler: ~/.jenkins/jobs/[JOB NAME]

Bu klasör günlükler, yapılandırma dosyaları ve derlenmesi gereken kaynak kodu gibi işe özgü tüm dosyaları ve yapıtları içerir.

İlk iş oluşturulduktan sonra, aşağıdakilerden biriyle veya daha fazlasıyla yapılandırılması gerekir:

  • Kaynak kodu yönetim sistemi belirtilmelidir.
  • Projeye bir veya daha fazla derleme eylemi eklenmelidir. Bunlar, uygulamayı derlemek için gereken adımlar veya görevlerdir.
  • İşe bir derleme tetikleyicisi atanmalıdır. Jenkins'e kodu alma ve son projeyi oluşturma sıklıklarını bildiren yönergeler kümesi.

Kaynak Kodu Denetimini Yapılandırma

Jenkins'in ilk görevi kaynak kodu yönetim sisteminden almaktır. Jenkins, bugün kullanılabilen popüler kaynak kodu yönetim sistemlerinin çoğunu destekler. Bu bölüm Git ve Team Foundation Server adlı iki popüler sistemi kapsar. Bu kaynak kodu yönetim sistemlerinin her biri aşağıdaki bölümlerde daha ayrıntılı olarak açıklanmıştır.

Kaynak Kodu Denetimi için Git Kullanma

Kaynak kodu denetimi için TFS kullanıyorsanız, bu bölümü atlayın ve TFS kullanarak sonraki bölüme geçin.

Jenkins, Git'i kullanıma sunar; ek eklenti gerekmez. Git'i kullanmak için Git radyo düğmesine tıklayın ve aşağıdaki ekran görüntüsünde gösterildiği gibi Git deposunun URL'sini girin:

To use Git, click on the Git radio button and enter the URL for the Git repository

Değişiklikler kaydedildikten sonra Git yapılandırması tamamlanır.

Kaynak Kodu Yönetimi için TFS Kullanma

Bu bölüm yalnızca TFS kullanıcıları için geçerlidir.

Team Foundation Server radyo düğmesine tıkladığınızda, aşağıdaki ekran görüntüsündekine benzer şekilde TFS yapılandırma bölümü görünmelidir:

Click on the Team Foundation Server radio button and the TFS configuration section should appear

TFS için gerekli bilgileri sağlayın. Aşağıdaki ekran görüntüsünde tamamlanmış formun bir örneği gösterilmektedir:

This screenshot shows an example of the completed form

Kaynak kodu denetimi yapılandırmasını test etme

Uygun kaynak kodu denetimi yapılandırıldıktan sonra, değişiklikleri kaydetmek için Kaydet'e tıklayın. Bu işlem sizi işin giriş sayfasına döndürür ve aşağıdaki ekran görüntüsüne benzer:

This will return you to the home page for the job, which will resemble this screenshot

Kaynak kod denetiminin düzgün yapılandırıldığını doğrulamanın en basit yolu, herhangi bir derleme eylemi belirtilmemiş olsa bile bir derlemeyi el ile tetiklemedir. Derlemeyi el ile başlatmak için, aşağıdaki ekran görüntüsünde gösterildiği gibi işin giriş sayfasında sol taraftaki menüde Şimdi Derle bağlantısı bulunur:

To start a build manually, the home page of the job has a Build Now link in the menu on the left hand side

Derleme başlatıldığında, Derleme Geçmişi iletişim kutusunda aşağıdaki ekran görüntüsüne benzer şekilde yanıp sönen mavi daire, ilerleme çubuğu, derleme numarası ve derlemenin başlatıldığı saat görüntülenir:

When a build has been started, the Build History dialog displays a flashing blue circle, a progress bar, the build number and the time that the build started

İş başarılı olursa mavi bir daire görüntülenir. İş başarısız olursa kırmızı bir daire görüntülenir.

Derlemenin bir parçası olarak ortaya çıkabilecek sorunları gidermeye yardımcı olmak için Jenkins, işin tüm konsol çıkışını yakalar. Konsol çıkışını görmek için Derleme Geçmişi'ndeki işe ve ardından sol taraftaki menüden Konsol Çıkışı bağlantısına tıklayın. Aşağıdaki ekran görüntüsünde Konsol Çıktısı bağlantısının yanı sıra başarılı bir işin çıktılarından bazıları gösterilmektedir:

This screenshot shows the Console Output link, as well as some of the output from a successful job

Derleme Yapıtlarının Konumu

Jenkins, kaynak kodun tamamını çalışma alanı adı verilen özel bir klasöre alır. Bu dizin aşağıdaki konumdaki klasörün içinde bulunabilir:

~/.jenkins/jobs/[JOB NAME]/workspace

Çalışma alanının yolu adlı $WORKSPACEbir ortam değişkeninde depolanır.

Bir işin giriş sayfasına gidip sol taraftaki menüden Çalışma Alanı bağlantısına tıklayarak Jenkins'teki çalışma alanı klasörüne göz atmak mümkündür. Aşağıdaki ekran görüntüsünde HelloWorld adlı bir iş için çalışma alanı örneği gösterilmektedir:

This screenshot shows an example of the workspace for a job named HelloWorld

Derleme Tetikleyicileri

Jenkins'te derleme başlatmaya yönelik birkaç farklı strateji vardır; bunlar derleme tetikleyicileri olarak bilinir. Derleme tetikleyicisi Jenkins'in bir işi ne zaman başlatıp projeyi oluşturacaklarına karar vermesine yardımcı olur. Daha yaygın derleme tetikleyicilerinden ikisi şunlardır:

  • Düzenli aralıklarla derleme – Bu tetikleyici Jenkins'in belirli aralıklarla( örneğin iki saatte bir veya hafta içi gece yarısı) bir iş başlatmasına neden olur. Derleme, kaynak kod deposunda herhangi bir değişiklik olup olmadığına bakılmaksızın başlar.
  • Yoklama SCM – Bu tetikleyici, kaynak kodu denetimini düzenli olarak yoklar. Kaynak kod deposunda yapılan değişiklikler varsa Jenkins yeni bir derleme başlatır.

Bir geliştirici derlemenin bozulmasına neden olan değişiklikleri işlediğinde hızlı geri bildirim sağladığından SCM yoklaması popüler bir tetikleyicidir. Bu, ekipleri kısa süre önce işlenen bazı kodların sorunlara neden olduğu konusunda uyarmak için kullanışlıdır ve geliştiricilere değişiklikler hala göz önünde bulundurularak sorunu çözmelerini sağlar.

Düzenli derlemeler genellikle uygulamanın test edicilere dağıtılabilir bir sürümünü oluşturmak için kullanılır. Örneğin, Soru-Cevap ekibinin üyelerinin önceki haftanın çalışmalarını test edebilmesi için düzenli bir derleme Cuma akşamı için zamanlanabilir.

Xamarin.iOS Uygulamalarını Derleme

Xamarin.iOS projeleri veya msbuildkullanılarak xbuild komut satırında derlenebilir. Kabuk komutu, Jenkins çalıştıran kullanıcı hesabı bağlamında yürütülür. Uygulamanın dağıtım için düzgün bir şekilde paketlenmesi için kullanıcı hesabının sağlama profiline erişimi olması önemlidir. Bu kabuk komutunu iş yapılandırma sayfasına eklemek mümkündür.

Aşağı kaydırarak Derleme bölümüne gelin. Derleme adımı ekle düğmesine tıklayın ve aşağıdaki ekran görüntüsünde gösterildiği gibi Kabuğu yürüt'e tıklayın:

Click the Add build step button and select Execute shell

i Telefon için çözüm SOLUTION_FILE.sln release derlemesini belirtmek için aşağıdaki komut satırı. IPA'nın konumu, komut satırında özelliği belirtilerek IpaPackageDir ayarlanabilir:

  • Mac'te xbuild kullanarak:

    xbuild /p:Configuration="Release" \ 
           /p:Platform="iPhone" \ 
           /p:IpaPackageDir="$HOME/Builds" \
           /t:Build MyProject.sln
    

xbuild komutu genellikle /Library/Frameworks/Mono.framework/Commands dizininde bulunur.

  • Windows'da, msbuild kullanarak:

    msbuild /p:Configuration="Release" 
            /p:Platform="iPhone" 
            /p:IpaPackageDir="%USERPROFILE%\Builds" 
            /p:ServerAddress="192.168.1.3" /p:ServerUser="macuser"  
            /t:Build MyProject.sln
    

msbuild , komut satırı tarafından geçirilen ifadeleri otomatik olarak genişletmez $( ) . Bu nedenle, komut satırında ayarlarken IpaPackageDir tam yol kullanmanız önerilir.

Özellik hakkında IpaPackageDir daha fazla bilgi için iOS 9.8 sürüm notlarına bakın.

Xamarin.Android Projesi Oluşturma

Xamarin.Android projesi oluşturmak, kavram olarak Xamarin.iOS projesi oluşturmaya çok benzer. Xamarin.Android projesinden APK oluşturmak için Jenkins'in aşağıdaki iki adımı gerçekleştirecek şekilde yapılandırılması gerekir:

  • MSBuild eklentisini kullanarak projeyi derleme
  • APK'yı geçerli bir yayın keystore ile hizalayın ve zip ile hizalayın.

Bu iki adım sonraki iki bölümde daha ayrıntılı olarak ele alınacaktır.

APK oluşturma

Derleme adımı ekle düğmesine tıklayın ve aşağıdaki ekran görüntüsünde gösterildiği gibi MSBuild kullanarak Visual Studio projesi veya çözümü derle'yi seçin:

Creating the APK Click on the Add build step button, and select Build a Visual Studio project or solution using MSBuild

Derleme adımı projeye eklendikten sonra, görüntülenen form alanlarını doldurun. Aşağıdaki ekran görüntüsü, tamamlanmış formun bir örneğidir:

Once the build step is added to the project, fill in the form fields that appear

Bu derleme adımı $WORKSPACE klasöründe yürütülür xbuild. MSBuild Derleme Dosyası, Xamarin.Android.csproj dosyasına ayarlanır. Komut Satırı Bağımsız Değişkenleri, hedef PackageForAndroid'un bir yayın derlemesini belirtir. Bu adımın ürünü, aşağıdaki konumda bulunan bir APK olacaktır:

$WORKSPACE/[PROJECT NAME]/bin/Release

Aşağıdaki ekran görüntüsünde bu APK örneği gösterilmektedir:

This screenshot shows an example of this APK

Bu APK, özel bir anahtar deposu ile imzalanmadığından ve zip ile hizalanması gerektiğinden dağıtım için hazır değildir.

Apk'yi Yayın için İmzalama ve Sıkıştırma

APK'yi imzalama ve sıkıştırma, Android SDK'dan iki ayrı komut satırı aracı tarafından gerçekleştirilen teknik olarak iki ayrı görevdir. Ancak, bunları tek bir derleme eyleminde gerçekleştirmek uygundur. APK imzalama ve zipaligning hakkında daha fazla bilgi için Xamarin'in android uygulamasını yayın için hazırlama belgelerine bakın.

Bu komutların her ikisi de projeden projeye farklılık gösterebilen komut satırı parametreleri gerektirir. Buna ek olarak, bu komut satırı parametrelerinden bazıları, derleme çalışırken konsol çıkışında görünmemesi gereken parolalardır. Bu komut satırı parametrelerinden bazılarını ortam değişkenlerinde depolayacağız. İmzalama ve/veya zip hizalama için gereken ortam değişkenleri aşağıdaki tabloda açıklanmıştır:

Ortam değişkeni Açıklama
KEYSTORE_FILE Bu, APK'yi imzalamak için anahtar deposunun yoludur
KEYSTORE_ALIAS APK'yi imzalamak için kullanılacak anahtar deposundaki anahtar.
INPUT_APK tarafından xbuildoluşturulan APK.
SIGNED_APK tarafından jarsignerüretilen imzalı APK.
FINAL_APK Bu, tarafından zipalignüretilen zip ile hizalanmış APK'dır.
STORE_PASS Bu, dosyayı söylemek için anahtar deposunun içeriğine erişmek için kullanılan paroladır.

Gereksinimler bölümünde açıklandığı gibi, bu ortam değişkenleri derleme sırasında EnvInject eklentisi kullanılarak ayarlanabilir. İş, sonraki ekran görüntüsünde gösterildiği gibi Ekle ortam değişkenlerini temel alan yeni bir derleme adımı eklemelidir:

The job should have a new build step added based on the Inject environment variables

Görüntülenecek Özellikler İçerik formu alanına ortam değişkenleri aşağıdaki biçimde satır başına bir tane eklenir:

ENVIRONMENT_VARIABLE_NAME = value

Aşağıdaki ekran görüntüsünde APK'yi imzalamak için gereken ortam değişkenleri gösterilmektedir:

This screenshot shows the environment variables that are required for signing the APK

APK dosyaları için bazı ortam değişkenlerinin ortam değişkeni üzerine oluşturulduğuna WORKSPACE dikkat edin.

Son ortam değişkeni, anahtar deposunun içeriğine erişmek için paroladır: STORE_PASS. Parolalar, günlük dosyalarında gizlenmesi veya atlanması gereken hassas değerlerdir. EnvInject eklentisi, günlüklerde görünmemeleri için bu değerleri koruyacak şekilde yapılandırılabilir.

İş yapılandırmasının Derleme bölümünden hemen önce bir Derleme Ortamı bölümü bulunur. Parola ekle onay kutusu değiştirildiğinde, bazı form alanları görünür. Bu form alanları, ortam değişkeninin adını ve değerini yakalamak için kullanılır. Aşağıdaki ekran görüntüsü, ortam değişkenini ekleme örneğidir STORE_PASS :

This screenshot is an example of adding the STOREPASS environment variable

Ortam değişkenleri başlatıldıktan sonra, bir sonraki adım APK'yı imzalamak ve zip ile hizalamak için bir derleme adımı eklemektir. Ortam değişkenlerini eklemeye yönelik derleme adımından hemen sonra ve zipalignyürütülecek jarsigner başka bir Execute shell komut derlemesi olacaktır. Her komut, aşağıdaki kod parçacığında gösterildiği gibi bir satır alır:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore $KEYSTORE_FILE -storepass $STORE_PASS -signedjar $SIGNED_APK $INPUT_APK $KEYSTORE_ALIAS
zipalign -f -v 4 $SIGNED_APK $FINAL_APK

Aşağıdaki ekran görüntüsünde, adıma ve zipalign komutlarının jarsigner nasıl girilir örneği gösterilmektedir:

This screenshot shows an example of how to enter the jarsigner and zipalign commands into the step

Tüm derleme eylemleri uygulandıktan sonra, her şeyin çalıştığını doğrulamak için el ile derleme tetikleme iyi bir uygulamadır. Derleme başarısız olursa, derlemenin başarısız olmasına neyin neden olduğu hakkında bilgi için Konsol Çıktısı gözden geçirilmelidir.

Testleri Test Bulutu'na Gönderme

Otomatikleştirilmiş testler kabuk komutları kullanılarak Test Bulutu'na gönderilebilir. Xamarin Test Bulutu'nda Test Çalıştırması ayarlama hakkında daha fazla bilgi için bkz . Xamarin.Android Uygulamalarını Hazırlama ve Xamarin.iOS Uygulamalarını Hazırlama.

Özet

Bu kılavuzda Jenkins'i macOS üzerinde derleme sunucusu olarak tanıttık ve Xamarin mobil uygulamalarını derlemek ve sürüme hazırlamak için yapılandırdık. Derleme işlemini desteklemek için Jenkins'i macOS bilgisayara çeşitli eklentilerle birlikte yükledik. TFS veya Git'ten kod çekecek ve ardından bu kodu yayına hazır bir uygulamada derleyecek bir iş oluşturup yapılandırdık. Ayrıca işlerin çalıştırılacağı zamanları zamanlamanın iki farklı yolunu keşfettik.