Teamcity ile Robotframework CI/CD pipeline Oluşturma ve Slack Entegrasyonu

Baris Ekici
hepsiburadatech
Published in
5 min readJul 24, 2020

Bir önceki yazımda docker container’larda robotframework ile test execution’lar gerçekleştirmeyi anlatmaya çalıştım. Bu yazımda ise oluşturduğumuz bu container image’i private registry ‘e push edip Teamcity ile CI pipeline oluşturmak ve her geliştirme sonrası code push ya da ilgili herhangi bir projeye build yapıldığında testlerin trigger edilmesi, test sonuçlarının Slack üzerinde istenen kanallara raporlarının iletilmesi ile ilgili olacak.

Kısaca CI/CD ve Test otomasyonu ile ilişkisinden bahsederek başlayalım.

Continuous Integration (CI) ve Continuous Delivery (CD), takımların uygulamaları daha hızlı ve güvenilir bir şekilde sunmalarına yardımcı olan iki ana DevOps Yazılım Geliştirme uygulamasıdır. Continuous Integration’da, geliştiriciler kod değişikliklerini düzenli olarak merkezi bir depoda birleştirir, daha sonra otomatik derlemeler ve testler çalıştırılır. Böylece hata hızlı bir şekilde sorunlar bulunabilir ve yazılım kalitesi arttırılabilir.

Müşterilere yazılım güncellemelerini daha hızlı ve yüksek kalitede sunabilmek için kuruluşların Continuous Delivery pipeline’ına test otomasyonunu eklemesi gerekir. DevOps işleminin geri kalanı gibi kalitenin sürekli, hızlı ve güvenilir olmasını sağlamanın tek yolu budur. Eğer yazılım test otomasyonu CD pipeline’ının bir parçası değilse geliştiricilerin yazdığı kod değişiklikleri düzenli olarak test edilemez.

CI/CD pipeline aşağıdaki adımlardan oluşur.

  • Commit
  • Build
  • Automated Tests
  • Deploy

CI/CD pipeline’da test otomasyonu neden önemlidir?

Test otomasyonları CI/CD pipeline’da kritik bir role sahiptir.

Hızlı çalışan, geniş kapsama sahip ve tutarlı sonuçlar elde eden bir test otomasyonu olmadan başarılı bir CI/CD pipeline olamaz.

Otomatik testler daha hızlı testler anlamına gelir.
Otomasyon, bir insanın el ile üretebileceğinden daha hızlı sonuç verir. Otomasyon sayesinde testi paralel olarak çalıştırabiliriz, bu da test sürecini daha da hızlandırır. Yazılımın sürekli olarak sunulması için hız ve gecikmelerin önlenmesi esastır.

Test otomasyonu, manuel testten daha tutarlıdır.
Bir yazılım tutarlı olmalıdır. Tutarlılık, yazılımın dağıtım zincirinin her aşamasında beklendiği gibi davrandığı anlamına gelir. Test otomasyonu, uygulamayı test ederken insan hatası olasılığından kaçınarak tutarlılığın ve güvenin elde edilmesine yardımcı olur.

Kaynak: http://tryqa.com

Teamcity ile CI / CD

Teamcity sürekli entegrasyon ve build otomasyonu sağlamak için kullanılan popüler, açık kaynaklı bir araçtır. Önceden tanımlanmış bir adımlar (steps) listesi yürütür ve başarı veya başarısızlık durumunda bildirim gönderir. Teamcity ihtiyacımıza göre ek eklentiler ile genişletilebilir.

CI/CD pipeline’da testin öneminden ve kullanacağımız araçtan (teamcity) bahsettikten sonra bir önceki yazıda (Docker Container’da RobotFramework İle Çalışma)kaldığımız yerden devam edebiliriz.

Elimizde dockerize ettiğimiz bir robot projemiz vardı. Bu docker image’i private repository’mize push etmemiz gerekiyor.

Öncelikle private repository’mize aşağıdaki komut ile login olacağız. Eğer docker’ın kendi hub’ına login durumda ise docker logout komutu ile log out olabiliriz. Daha sonra private hub’a aşağıdaki kod ile login olabiliriz.

$ docker login %docker_registry_hostaddress% -u %docker_registry_username% -p %docker_registry_password%

Build edip çalıştırdığımız image’i aşağıdaki komut ile hub’a push ediyoruz.

$ docker push %docker_registry_hostaddress%/%docker_tag_name%:%build.number%

Docker’ın kurulu olduğu uzak sunucumuzda terminalden bu image’i aşağıdaki komut ile pull ediyoruz.

$ docker pull %docker_registry_hostaddress%/%docker_tag_name%:%build.number%

Ve sunucumuza aldığımız image’i run edip kontrollerini yapıyoruz.

docker run %docker_registry_hostaddress%/%docker_tag_name%:%build.number%

(image.1)

Projemiz container’larımızın bulunduğu host’umuzda da çalıştı. Artık teamcity de ayarlarımızı yapabiliriz.

Öncelikle IntegrationTests isminde bir proje oluşturuyoruz. Tabi siz başka isimler verebilirsiniz.

(image.1)

Build konfigürasyonlarını tanımlıyoruz.

(image.3)

Integration test için yazdığımız uygulamamızın yer aldığı git repo’muzun Version Control Settings (GIT) alanında ayarlıyoruz. Projemizde her gün bir takım değişiklikler yapmak isteyebiliriz. Bazı servisler ekleyebilir, bazılarını kaldırabiliriz ya da bakımlarını yapabiliriz. Bu gibi durumlarda da yeni code’umuzu repo’muza push edeceğiz ve pipeline’ımız en güncel haliyle testleri build etmeye devam ediyor olacak.

(image.4)

Ve build Steps alanından build adımlarımızı tanımlıyoruz.

(image.5)

Triggers alanından Add Triger seçeneğini seçip ihtiyacımıza / isteğimize göre trigger seçeneklerini konfigüre ediyoruz. Burada hangi projeye (UI-API-Micro Services) build alındığında ya da code push yapıldığında testlerimizin çalışmasını istiyorsak ona göre konfigürasyonları tanımlayacağız.

(image.6)

Parameters sekmesinden build steps’de tanımladığımız komutlar için ilgili parametreleri giriyoruz.

(image.7)

Ve artık TeamCity projemiz hazır durumda.

(image.8)

Şimdi Teamcity projesinin Slack ile entegrasyonunu yapmak için aşağıdaki sekmeden Slack seçeneğine tıklıyoruz.

(image.9)

Slack üzerinde oluşturduğumuz kanalın ismini ve API Token bilgilerini burada giriyoruz ve ihtiyaçlarımıza göre konfigürasyonları tanımlıyoruz. Ben ayrıca slack entegrasyonu için Tim Lolkema ‘nın publish ettiği aşağıda github adresini paylaştığım robot kütüphanesini kullandım. Çok kullanışlı bir kütüphane siz de deneyebilirsiniz. Hata alan case’leri güzel bir görsel ile slack kanalından duyuruyor. Tim’e de buradan selam göndermiş olalım. :)
Ayrıca Tim ile yazdığı kütüphane hakkında da konuştuk ve geliştirmeye yönelik fikir alışverişinde bulunduk. Yeni update ile test case özelinde notifikasyon haricinde çalıştırılan suite’in final/total sonucunuda internal rf listener’dan alıp slack kanalına ayrıca bildiriyor olacak.

(image.9)

Artık Teamcity Robotframework CI/CD pipeline’ımız hazır. Geliştirdiğimiz proje kapsamında yapılan her geliştirme için code push ya da build durumundan sonra ilgili robotframework test projesi git repo’daki en güncel haliyle trigger edilecek, testler docker container’lar üzerinde koşulacak ve ilgili takımın slack kanalından tüm takım üyeleri UI ya da Entegrasyon Testleri için bilgilendirilmiş olacak.

Slack de örnek raporlar;
Fail olan servis/servisler için;

(image.10)

Pass durumunda;

(image.11)

Vakit ayırdığınız için teşekkürler,

--

--