GitHub’daki bazı Repositorylerde bu rozetler  yer almaktadır. Araştırıldığında bu rozetlerin AppVeyor adındaki uygulamanın sağladığı, kaynak kodun güncel halinin yapılandırma sonucu hakkında durum bilgisi paylaşan bir indikatör olarak kullanıldığı ortaya çıkmaktadır. Kullanımı oldukça basit bir Continuous Integration / Continuous Deployment platformu olan AppVeyor’un en basit yeteneklerini kullanarak bir CI Pipeline örneği nasıl yaratılacağını ele alalım.

AppVeyor, açık kaynak kodlu projeler için ücretsiz sunulan bulut tabanlı bir CI / CD platformudur. Travis CI veya Circle CI gibi sunucu kurulumuna gerek olmadan, uygulamaya ait kaynak kodlarına, GitHub, Bitbucket, TFS vb. versiyon kontrol platformları ile entegre olarak erişir ve kurgulanan Pipeline adımlarını uygular.

Hesap ve Proje Oluşturma

Siteye eriştikten sonra giriş yapabilmek için hesap oluşturma aşamasında aşağıdaki görselde göreceğiniz gibi birden fazla versiyon kontrol platformunda sahip olunan hesaplara yetki verilerek veya mail adresi ile bağımsız bir hesap oluşturarak sisteme giriş yapılabilir.

AppVeyor ile Continuous Integration

Daha sonrasında, yeni proje eklemek için “New Project” butonuna basılarak, erişmek istenilen kaynak koda ait versiyon kontrol aracı veya platformu ile AppVeyor hesabının entegre edilmesi gerekiyor. AppVeyor, bulutta ve şirket içi platformlarda ya da Git, Mercurial ve Subversion gibi araçlar ile yönetilen repositorylere erişim imkanı sunar. Aşağıdaki görselde entegrasyon desteği sunulan araçlar ve platformlar belirtilmiştir. Görselde olduğu gibi listelenen repositorylerden birini seçmek için, üzerine gelerek “Add” butonuna basıldığında yeni proje oluşturulmuş olacaktır.

appveyor continuous integration

Kurulum ve YAML Dosyası

AppVeyor’u konfigüre etmek için iki farklı yaklaşım mevcuttur. Birincisi web arayüzü ile ayarlar sekmesinden bir uygulama kullanıyormuş gibi belirlemek, ikinicisi ise Configuration as Code (CaC) yaklaşımını kullanmak üzere bir YAML dosyası ile konfigürasyonları belirlemek. İkinci yaklaşım sizin için alışılmadık bir yöntem ise birinci çözüm ile de aynı işlemleri gerçekleştirebileceksiniz. Daha basit ve kısa bir yöntem olduğu için ikinici yaklaşım ile devam edeceğiz.

Hazırlanan YAML dosyasında AppVeyor içerisinde kullanılacak yapılandırma versiyon bilgisi, kullanılacak Branch, yapılandırmadan önce uygulanması istenilen komutlar ve yapılandırılacak projeyi veya Solution’ı belirtilecektir.

Kullandığımız örnek projedeki birim testler Solution içerisine dahil edildiği için yapılandırmadan hemen sonra testler otomatik olarak koşacak ve CI Pipeline’ı kendiliğinden tamamlanmış olacaktır. Eğer testler ile uygulama ayrı konumlarda ise “after_build” konfigürasyonu kullanılarak yapılandırmadan sonra çalışması istenilen testler belirlenebilir.

Repository’e yapılan her bir Push işlemi sonrası Webhook aracılığıyla AppVeyor yapılandırmaya otomatik olarak başlar.

Hazırlanan appveyor.yml dosyasının incelemesi:

app veyor continuous integration

İlk satırda yapılandırma versiyonu belirlemek için 1 ve 0’ın ardından AppVeyor ile kaç kere Build işlemi gerçekleştiğini belirten parametre olan “{build}” parametresi eklenmiştir.

Daha sonra kullanılan Repositoryde bulunan “master” Branchini kullanması gerektiği 2. ve 4. satırlar arasında belirtilmiştir.

5. ve 6. satırlarda uygulamaya ait bağımlılıkların yapılandırmadan önce toparlanması için “nuget restore” komutunu uygulamaya ait Solution konumu belirtilerek ve ayrıca en başta “ps” komutunu da kullanarak PowerShell ile bu komutu uygulaması gerektiği belirtilmiştir.

8. satırda ise yapılandırılacak Solution konumu belirtilerek Pipeline’ı sonlandırılmıştır.

YAML Dosyası ile daha başka neler yapabileceğini öğrenebilmek için referans örneğine göz atabilirsiniz.

Yapılandırma Sonuçları

Yapılandırmaya ait Log kayıtları web arayüzü ile canlı olarak paylaşılmaktadır. İlgili projeden “Current Build” sekmesi açıldığında anlık olarak işlem detayları takip edilebilir.

Log kayıtlarına ait başlangıç ve bitiş görselleri:

[![Build status](https://ci.appveyor.com/api/projects/status/n1lkjxm8gmw0a3c3?svg=true)](https://ci.appveyor.com/project/berktoprakci/appveyor)