TeamCity: Uçtan Uca CI&CD Ustası

Başlığın ikinci kısmı abartılı gibi dursa da uygulamanın iç dünyasına girdikçe ne kadar yetenekli olduğunu görüp hayran olmayana henüz rastlamadım. Ben de bu ve bundan sonrasında planladığım TeamCity odaklı yazılarımda bu yeteneğe değinmeye çalışacağım.

Nedir Bu Usta?

TeamCity bir Jetbrains ürünü. 2006 yılında görücüye çıkan, Java tabanlı bir Build Yönetimi, Continuous Integration ve Continuous Deployment sunucusu.

Sunucu ifadesine özellikle dikkat etmekte fayda var. Yazının ilerleyen bölümlerinde de sıklıkla karşılacağımız Agent’ları merkeze alan, konfigürasyonlar ve eklentiler ile zenginleştirilmiş bir ortamdan bahsediyoruz.

Resmi web sitesinde çokça detay mevcut. Ben girizgah kısmında bunlardan önemli olduğunu düşündüklerimi kısaca özetleyeceğim.

Nasıl Edinilir?

3 farklı yöntemle bu uygulamayı kullanmaya başlayabilirsiniz. Bunlardan ilki web sitesi üzerinden kurulum dosyasını indirip yerel bilgisayarınıza kurmak. İkinci yöntem, Cloud üzerinde bir test sürüşü gerçekleştirmek (60 gün süreyle geçerli olmak üzere). Üçüncü yöntem ise -bence- test sürüşü için en ideal yöntem olan Docker.

Hemen belirtmekte fayda var ki, TeamCity’i hem Windows hem de Linux dağıtımları üzerinde kullanabilirsiniz.

Lisanslaması Nasıldır?

Jetbrains, TeamCity için iki temel lisanslama yöntemini tercih etmiş. Bunlardan ilki;

Professional Server License adını verdikleri yöntem; 20 build konfigürasyonu ve 3 agent’a kadar ücretsiz sunuluyor. Uygulamanın herhangi bir özelliğine kısıt getirmemeleri takdir edilmesi gereken bir davranış (FIFA demolarında 8 takımla sadece 45 dakika oynamak zorunda olduğumuz zamanları kim unutur). Herhangi bir desteğe ihtiyaç duyduğunuzda özel bir mail hesabına sahip olmadığınız için forumlardan ve issue tracker’lardan yardım almak dışında bir alternatifiniz bulunmuyor. Kişisel yorumum; bir startup ya da serbest bir geliştirici için biçilmiş kaftan. Hatta monolitik bir kaç uygulama ile uzun süredir hayatını sürdüren orta ve büyük ölçekli firmalar dahi sorunsuz bir şekilde kullanabilir.

Enterprise Server License ise adından da anlaşılacağı üzere oldukça gelişmiş bir lisanslama yöntemi. Sınırsız build konfigürasyonu sağlayan bu lisans ile, kendinize özel bir destek hesabına sahip olabilirsiniz. Buradaki fiyatlandırma tamamen agent sayısına göre oranlanmış durumda. Baz fiyat, yazının yazıldığı an itibariyle 1.999,00$. 3 agent kullanıma sunuluyor. 3–100 arasındaki agent fiyatlarına resmi siteden ulaşabilirsiniz. 100'den daha fazla agent’a ihtiyacınız varsa — merhaba Netflix :) — üretici firmadan özel ücret talep edebiliyorsunuz. Ayrıca 1 yıl boyunca da ücretsiz yükseltme hakkı sağlıyorlar.

Hürriyet Dünyası’nda 3 agent ile Enterprise Server License sahibiyiz. Onlarca portal ve yan uygulamayı hesaba kattığımızda — evet biraz bekleme süremiz oluyor elbette — bu lisanslama bize şu aşamada yetiyor diyebiliriz.

“Peki Professional Server License sahibi olsam ama 4 agent kullanmak istesem?” dediğinizi duyar gibiyim. Bu durum için de Build Agent License denilen yan lisanslama kullanıma sunulmuş durumda. Yine an itibariyle 299$ olarak fiyatlandırılmış bu lisans ile 1 adet daha agent ve 10 tane daha build configuration hakkına sahip olabilirsiniz.

Hadi biraz da özelliklerinden bahsedelim

Kullanımı oldukça kolay, geliştirici dostu bir arayüze sahip. Bu sebeple net olarak söyleyebilirim ki aşağıdaki temsili görseli TeamCity için hiçbir zaman yaşamayacaksınız :)

Ayar yapmaya başladığınızda sizi o kadar doğru yönlendiriyor ki, ayarın bitip build’in başladığını anlamanız gerçekten çok güç.

Github, Bitbucket, TFS, SVN gibi bir çok VCS ile direkt entegrasyon özelliğine sahip. Böylece araç ile kod repolarımızı nasıl bağlayacağımız konusunda vakit kaybetmek gibi bir derdimiz yok.

Kod kalitesi, test araçları, build araçları, paket yöneticileri, upload yöntemleri, shell komutlarının yönetimi gibi işleri yürüten onlarca plugin kullanıma hazır.

Herhangi bir teknoloji bağımlılığı yok. Dolayısıyla Linux sistemlerinize paket çıkan agent’larınız ile Windows sunucularınıza transfer yapan agent’larınız kardeşçe yaşayabiliyorlar.

Tarihsel olarak geçmiş paketlerinizi tutabilir, versiyonlamalarınızı dilediğimiz şekilde yönetebilirsiniz. Böylece “bir önceki pakete sağlıklı bir şekilde dönme” fobisi tarihe karışıyor.

Hazır eklentiler dışında geliştiriciler tarafından üretilmiş ve Jetbrains tarafından desteklenen eklentileri kullanabilir, kolayca kendi eklentilerinizi de yazabilir ve süreçlerinize dahil edebilirsiniz.

Bir çok CD aracıyla da uyumlu çalışabilen TeamCity, burada hazırlanan paketleri kolaylıkla entegre paketlere yollayabilir.

Yine kendi dünyamızdan bir örnek vermek gerekirse bizler, CD için Octopus’u kullanıyoruz ve TeamCity’nin Octopus plugin’i ile bu süreci oldukça sancısız bir şekilde geçiriyoruz.

Yine yazının devamında — ya da devam yazılarında — da örnekleyeceğimiz üzere bir kaç basit adım ile otomasyonlarınızı koşturabilir ve paketlerinizi hazırlayabilirsiniz. Basitliği ve sadeliği ise şöyle örnekleyebilirim:

hurriyet.com.tr projesinin yayına çıkacak paketinin hazırlanması için koşan adımlar;

  • Kod kalitesinin ölçümlenmesine başla
  • Ana projeyi build et
  • Kod kalitesinin ölçümlenmesini bitir ve raporla (Bu adımda ön tanımlı kuralları aşan bir durum olursa build kırılıyor)
  • Test projesini build et
  • Unit testleri (NUnit) koş ve code coverage hesapla(Bu adımda testlerden herhangi biri hata verirse build kırılıyor)
  • Oluşan paketi Octopus’a ilet

Test Sürüşü

Bu kadar teorik bilgiden sonra biraz konsol ekranının ve sonrasında karşılacağımız TeamCity ekranının iyi geleceğini düşünüyorum ve test sürüşü için motoru çalıştırıyorum.

Yazının başında da belirttiğim üzere test sürüşü için en iyi yöntemin Docker olduğunu düşünüyorum. Bu adresten, Jetbrains tarafından geliştirilen kullanıma açık ve resmi repo’ya ulaşabilirsiniz. Örneğimde Linux dağıtım temelli TeamCity’i kullanacağım. Repo boyutu 1GB. Windows olan ise 6GB.

Öncesinde lokal bilgisayarımızda, container(lar) ile iletişim kuracağımız, “file sharing” için klasörlerimizi oluşturalım. Ben şu yollardaki klasörleri kullanacağım:

C:\teamcity-docker\data
C:\teamcity-docker\logs

Data klasörü içerisinde proje ayarları ve build sonucları muhafaza edilecek. Eğer bu klasör ile container’daki ilgili klasörü map etmezsek, container bir sonraki açılışında tüm ayarlar sıfırlanmış olarak karşımıza çıkacak ki bu hiç talep etmediğimiz bir durum.

Logs klasörü ile de süreçlerin loglarını tutacağız. Bu ayar yapılmayabilir ancak yanlış giden bir şeyin tespitinde zorluk yaşanacaktır.

O halde repo’yu indirmeye başlayalım:

docker pull jetbrains/teamcity-server:latest

İndirme işlemi başarıyla tamamlandıktan sonra ise aşağıdaki komut ile container’ı başlatalım:

data ve logs volume mapping’ler için verdiğiniz klasör yolları, lokal bilgisayarınızdaki ile birebir eşleşmelidir.

Container sorunsuz bir şekilde başlatıldıysa http://localhost:811 adresine girip arkanıza yaslanarak kurulumu izleyebilirsiniz :)

Lütfen bekleyin, ayarlar yapılıyor… gibi bekleme ekranlarından sonra veritabanı ayarı ekranı (1. görsel) karşınıza gelecek. Buradan internal’ı seçili bırakabilirsiniz ancak production ortamında TeamCity’i kullanacaksanız harici bir veritabanı seçmenizi tavsiye ederim. Internal veritabanı data klasörü içerisinde tutulmaktadır.

Bir sonraki adımda ise yönetici hesabı oluşturmanız gerekecek — ekran görüntüsü almayı unutmuşum sanırım :) — . Herhangi güvenli bir hesap oluşturmanız yeterli olacaktır.

Tüm adımlar tamamlandıktan sonra ise 2. görseldeki ekran sizi karşılayacak. Bunun anlamı şu ki; TeamCity kullanıma hazır! Bir proje oluştur ve yoluna devam et.

Sonuç

Buraya kadar sabırla takip edip adımları uyguladıysanız artık sizler de Bir TeamCity Server sahibisiniz. Bir sonraki yazıda agent nedir, agent nasıl oluşturulur, proje nasıl oluşturulur, VCS ile proje nasıl bağlanır, build stepler nasıl oluşturulur gibi sorulara yanıt bulmaya çalışacağız.

O zamana dek (çok kısa bir süre içerisinde) kurulumlarınız hep sorunsuz, süreçleriniz hep gelişmekte olsun :)