Xamarin ile Sürekli Tümleştirmeye Giriş
Sürekli Tümleştirme, projenin sürüm denetimi deposunda geliştiriciler tarafından kod eklendiğinde veya değiştirildiğinde otomatik derlemenin bir uygulamayı derlediği ve isteğe bağlı olarak test ettiği bir yazılım mühendisliği uygulamasıdır. Bu makalede, Sürekli Tümleştirme'nin genel kavramları ve Xamarin projeleriyle Sürekli Tümleştirme için sağlanan seçeneklerden bazıları ele alınacaktır.
Geliştiricilerin paralel olarak çalışması yazılım projelerinde yaygındır. Bir noktada, bu paralel iş akışlarının tümünü son ürünü oluşturan tek bir kod tabanıyla tümleştirmek gerekir. Yazılım geliştirmenin ilk günlerinde bu tümleştirme, zor ve riskli bir süreç olan bir projenin sonunda gerçekleştirildi.
Sürekli Tümleştirme (CI), her geliştiricinin değişikliklerini ortak kod tabanında sürekli olarak birleştirerek (genellikle herhangi bir geliştirici projenin paylaşılan kod deposundaki değişiklikleri denetlediği zaman) bu tür karmaşıklıklardan kaçınır. Her iade işlemi otomatik bir derlemeyi tetikler ve yeni tanıtılan kodun mevcut kodu bozmadığını doğrulamak için otomatikleştirilmiş testler çalıştırır. Bu şekilde CI, hataları ve sorunları hemen ortaya çıkararak tüm ekip üyelerinin birbirlerinin çalışmalarıyla ilgili güncel kalmalarını sağlar. Bu, uyumlu ve kararlı bir kod tabanına neden olur.
Sürekli tümleştirme sistemlerinin iki ana bölümü vardır:
- Sürüm Denetimi – Kaynak denetimi veya kaynak kodu yönetimi olarak da adlandırılan Sürüm Denetimi (VC), projenin tüm kodunu tek bir paylaşılan depoda birleştirir ve her dosyada yapılan her değişikliğin tam geçmişini tutar. Genellikle ana hat dalı olarak adlandırılan bu depo, sonuçta uygulamanın üretim veya yayın sürümünü oluşturmak için kullanılacak kaynak kodunu içerir. Bu görev için genellikle ekiplerin veya kişilerin kodun bir kopyasını ikincil dallara çatallamalarına olanak tanıyan birçok açık kaynak ve ticari ürün vardır. Bu sayede ana dalda büyük değişiklikler yapabilir veya denemeleri risk olmadan gerçekleştirebilirler. İkincil daldaki değişiklikler doğrulandıktan sonra, hepsi birlikte ana dalda birleştirilebilir.
- Sürekli Tümleştirme Sunucusu – Sürekli Tümleştirme Sunucusu projenin tüm yapıtlarını (kaynak kodu, görüntüler, videolar, veritabanları, otomatikleştirilmiş testler vb.) toplamak, uygulamayı derlemek ve otomatikleştirilmiş testleri çalıştırmakla sorumludur. Yine birçok açık kaynak ve ticari CI sunucu aracı vardır.
Geliştiriciler genellikle iş istasyonlarında bir veya daha fazla dalın çalışma kopyasına sahiptir ve burada başlangıçta iş yapılır. Uygun bir çalışma kümesi tamamlandıktan sonra, değişiklikler uygun dala "iade edilir" veya "işlenir", bu da bunları diğer geliştiricilerin çalışma kopyalarına yayılımlır. Bir ekip, hepsinin aynı kod üzerinde çalışmasını bu şekilde sağlar.
Yine sürekli tümleştirme ile değişiklikleri işleme eylemi CI sunucusunun projeyi oluşturmasına ve kaynak kodun doğruluğunu doğrulamak için otomatikleştirilmiş testler çalıştırmasına neden olur. Derleme hataları veya test hataları varsa, ci sunucusu sorunu düzeltebilmesi için sorumlu geliştiriciye (e-posta, anlık ileti, Twitter, Growl vb.) bildirir. ("Geçitli iade" olarak adlandırılan hatalar varsa CI sunucuları işlemeyi reddedebilir.)
Aşağıdaki diyagramda bu işlem gösterilmektedir:
Mobil uygulamalar sürekli tümleştirme için benzersiz zorluklara neden olabilir. Uygulamalar, GPS veya kamera gibi yalnızca fiziksel cihazlarda kullanılabilen algılayıcılar gerektirebilir. Buna ek olarak, simülatörler veya öykünücüler yalnızca bir donanım tahminidir ve sorunları gizleyebilir veya gizleyebilir. Sonunda, gerçekten müşteri için hazır olduğundan emin olmak için bir mobil uygulamayı gerçek donanımda test etmek gerekir.
App Center Testi, uygulamaları doğrudan yüzlerce fiziksel cihazda test ederek bu sorunu giderir. Geliştiriciler güçlü kullanıcı arabirimi testlerine olanak tanıyan otomatik kabul testleri yazar. Bu testler App Center'a yüklendikten sonra CI sunucusu, aşağıdaki diyagramda gösterildiği gibi ci işleminin bir parçası olarak bunları otomatik olarak çalıştırabilir:
CI'yi desteklemek için tasarlanmış kapsamlı bir ticari ve açık kaynak araç ekosistemi vardır. Bu bölümde en yaygın olanlardan birkaçı açıklanmaktadır.
Azure DevOps ve Team Foundation Server (TFS), Microsoft'un sürekli tümleştirme derleme hizmetleri, görev izleme, çevik planlama ve raporlama araçları ve sürüm denetimine yönelik işbirliği araçlarıdır. Sürüm denetimiyle Azure DevOps ve TFS kendi sistemiyle (Team Foundation Sürüm Denetimi veya TFVC) veya GitHub'da barındırılan projelerle çalışabilir.
- Azure DevOps, bulut üzerinden hizmetler sağlar. Bunun birincil avantajı, ayrılmış donanım veya altyapı gerektirmemesi ve web tarayıcıları ve Visual Studio gibi popüler geliştirme araçları aracılığıyla her yerden erişilebildiği ve coğrafi olarak dağıtılmış ekipler için cazip hale getirilmesidir. Beş veya daha az geliştiriciden oluşan ekipler için ücretsizdir ve daha sonra büyüyen bir ekibi barındırmak için ek lisanslar satın alınabilir.
- TFS, şirket içi Windows sunucuları için tasarlanmıştır ve bu ağa yerel ağ veya VPN bağlantısı üzerinden erişilir. Bunun birincil avantajı, derleme sunucularının yapılandırmasını tam olarak denetlemeniz ve gereken ek yazılım veya hizmetleri yükleyebilmenizdir. TFS,küçük takımlar için ücretsiz giriş düzeyi Express sürümüne sahiptir.
Hem TFS hem de Azure DevOps, Visual Studio ile sıkı bir şekilde tümleşiktir ve geliştiricilerin tek bir IDE'nin rahatlığında birçok sürüm denetimi ve CI görevi gerçekleştirmesine olanak sağlar. Eclipse için Team Explorer Everywhere eklentisi de (aşağıya bakın) kullanılabilir. Mac için Visual Studio TFVC önizlemesine sahiptir.
Azure DevOps Pipelines , hedeflemek istediğiniz her platform için (Android, iOS ve Windows) bir derleme tanımı oluşturduğunuz Xamarin projeleri için doğrudan desteğe sahiptir. Her derleme tanımı için uygun Xamarin lisansı gereklidir. Bu amaçla yerel, Xamarin özellikli bir TFS derleme sunucusunu Azure DevOps'a bağlamak da mümkündür. Bu kurulumla, Azure DevOps'a kuyruğa alınan derlemeler yerel sunucuya devredilir. Ayrıntılar için bkz . Derleme ve sürüm aracıları. Alternatif olarak Jenkins veya Team City gibi başka bir derleme aracı kullanabilirsiniz.
Visual Studio, Azure DevOps ve Team Foundation Server'ın tüm Uygulama Yaşam Döngüsü Yönetimi (ALM) özelliklerinin tam özeti için bkz . Xamarin Apps ile DevOps.
Team Explorer Everywhere , Visual Studio dışında geliştirilen ekiplere Team Foundation Server ve Azure DevOps'un gücünü getirir. Geliştiricilerin Şirket içi veya buluttaki ekip projelerine Eclipse'ten veya OS X ve Linux için platformlar arası komut satırı istemcisinden bağlanmasına olanak tanır. Her Yerde Ekip Gezgini sürüm denetimine (Git dahil), iş öğelerine ve Windows dışı platformlar için derleme özelliklerine tam erişim sağlar.
Git, başlangıçta Linux çekirdeğinin kaynak kodunu yönetmek için geliştirilmiş popüler bir açık kaynak sürüm denetimi çözümüdür. Her büyüklükteki yazılım projeleri ile popüler olan çok hızlı, esnek bir sistemdir. İnternet erişimi zayıf olan tek geliştiricilerden dünyaya yayılan büyük ekiplere kolayca ölçeklendirilir. Git ayrıca dallanmayı çok kolay hale getirir ve bu da minimum riskle paralel geliştirme akışlarını teşvik edebilir.
Git tamamen web tarayıcıları veya Linux, Mac OSX ve Windows üzerinde çalışan GUI istemcileri aracılığıyla çalışabilir. Genel depolar için ücretsizdir; özel depolar ücretli bir plan gerektirir.
Windows ve Mac için Visual Studio'nun geçerli sürümleri Git için yerel destek sağlar. Microsoft, Visual Studio'nun eski sürümleri için Git için indirilebilir bir uzantı sağlar. Yukarıda belirtildiği gibi Azure DevOps ve TFS, TFVC yerine sürüm denetimi için Git'i kullanabilir.
Subversion (SVN), 2000 yılından beri kullanılan popüler, açık kaynak bir sürüm denetim sistemidir. SVN, OS X, Windows, FreeBSD, Linux ve Unix'in tüm modern sürümlerinde çalışır. Mac için Visual Studio SVN için yerel desteğe sahiptir. Visual Studio'ya SVN desteği getiren üçüncü taraf uzantıları vardır.
Sürekli tümleştirme ortamı ayarlamak, bir sürüm denetim sistemini derleme hizmetiyle birleştirmek anlamına gelir. İkincisi için en yaygın iki seçenek şunlardır:
- Azure Pipelines , Azure DevOps ve TFS'nin derleme sistemidir. Visual Studio ile sıkı bir şekilde tümleştirilmiştir ve geliştiricilerin derlemeleri tetiklemesini, testleri otomatik olarak çalıştırmasını ve sonuçları görmesini kolaylaştırır.
- Jenkins, her türlü yazılım geliştirmeyi desteklemek için zengin eklenti ekosistemine sahip açık kaynaklı bir CI sunucusudur. Windows ve Mac OS X üzerinde çalışır. Jenkins belirli bir IDE ile tümleşik değildir. Bunun yerine, bir web arabirimi aracılığıyla yapılandırılır ve yönetilir. Jenkins CI'nin yüklenmesi ve yapılandırılması da kolaydır ve bu da küçük ekipler için cazip hale getirir.
TFS/Azure DevOps'u tek başına veya aşağıdaki bölümlerde açıklandığı gibi Jenkins'i TFS/Azure DevOps veya Git ile birlikte kullanabilirsiniz.
Açıklandığı gibi Azure DevOps ve Team Foundation Server hem sürüm denetimi hem de derleme hizmetleri sağlar. Derleme hizmetleri her zaman her hedef platform için bir Xamarin business veya Enterprise lisansı gerektirir.
Azure DevOps ile her hedef platform için ayrı bir derleme tanımı oluşturur ve uygun lisansı oraya girersiniz. Azure DevOps yapılandırıldıktan sonra bulutta derlemeler ve testler çalıştırır. Diğer ayrıntılar için bkz . Azure Pipelines .
Team Foundation Server ile bir derleme makinesini belirli hedef platformlar için aşağıdaki gibi yapılandırabilirsiniz:
- Android ve Windows: Visual Studio ve Xamarin araçlarını (hem Android hem de Windows için) yükleyin ve Xamarin lisanslarınızla yapılandırın. Ayrıca Android SDK'sını TFS derleme aracısının bulabileceği sunucuda paylaşılan bir konuma taşımak da gerekir. Ayrıntılar için bkz . TFVC'yi yapılandırma.
- iOS ve Xamarin: Windows sunucusuna Visual Studio ve Xamarin araçlarını uygun lisansla yükleyin. Ardından Mac için Visual Studio bir derleme konağı görevi görecek ve son uygulama paketini (iOS için IPA, OS X için APP) oluşturacak, ağdan erişilebilir bir Mac OS X makinesine yükleyin.
Aşağıdaki diyagramda bu topografya gösterilmektedir:
Azure DevOps derlemelerinin yerel sunucuya temsilci olarak atanması için yerel bir TFS sunucusunu bir Azure DevOps projesine bağlamak da mümkündür. Ayrıntılar için bkz . Derleme ve sürüm aracıları.
Uygulamalarınızı derlemek için Jenkins kullanıyorsanız kodunuzu Azure DevOps veya Team Foundation Server'da depolayabilir ve CI derlemeleriniz için Jenkins'i kullanmaya devam edebilirsiniz. Takım projenizin Git deposuna kod gönderdiğinizde veya kodu TFVC'ye iade ettiğinizde jenkins derlemesini tetikleyebilirsiniz. Ayrıntılar için bkz . Azure DevOps ile Jenkins.
Başka bir yaygın CI ortamı tamamen OS X tabanlı olabilir. Bu senaryo, kaynak kodu denetimi için Git'in ve derleme sunucusu için Jenkins'in kullanılmasını içerir. Her ikisi de Mac için Visual Studio yüklü tek bir Mac OS X bilgisayarda çalışıyor. Bu, önceki bölümde açıklanan Azure DevOps + Jenkins ortamına çok benzer:
Önemli
Jenkins, Microsoft tarafından desteklenmez.