Android Gitlab CI/CD Kurulumu — Slack Entegrasyonu

Yasin Ege
Naylalabs
4 min readApr 6, 2022

--

Selamlar, bugün Android projemizde Gitlab CI/CD kurulumunun nasıl yapıldığından ve uygulamamız başarıyla build olduğunda slack kanalımıza nasıl bildirim atabileceğimizden bahsedeceğim, iyi okumalar.

GİRİŞ

Sürekli Entegrasyon(CI) ve Sürekli Dağıtım(CD) Android geliştirme sürecimizde önemli bir yere sahiptir. CI/CD olmadan önce bir çoğumuzun unit, lint vb. testleri manuel olarak yaptığını, debug/release apk dosyalarımızı manuel olarak build aldığımızı daha sonra bu çıktıları yine manuel olarak kullanıma sunduğumuzu varsayalım… Evet işte burada CI/CD kavramı ön plana çıkıyor. Artık CI /CD ile manuel olarak yaptığımız işlemleri otomatik hale getirebiliriz. Örneğin uygulamamıza yeni bir özellik eklendiğinde(bir değişiklik olduğunda) otomatik olarak build alınmasını, belirttiğimiz testlerden geçmesini ve sonuç başarılı ise istediğimiz kanalda sunumunun yapılmasını sağlayabiliriz.

BAŞLAYALIM

Öncelikle, Gitlab’e Android projemizi yüklemeliyiz. Ardından Android proje kökümüzün içine bir Gitlab CI yapılandırma dosyası olan “.gitlab-ci.yml” dosyasını eklemeliyiz. Bu işlemi Gitlab üzerinden kolayca yapabilirsiniz. “.gitlab-ci.yml” dosyası CI/CD için kullanacağımız tüm talimatları içerir ve projemiz dosya içerisine yazdığımız bilgilere göre derlenir. Bu konuyla ilgili daha fazla bilgi edinmek istiyorsanız belgeleri inceleyebilirsiniz.

Daha sonra, Android SDK’yı çalıştırmak için gereken her şeyi yükleyecek yapılandırma dosyamızı(.gitlab-ci.yml) düzenlememiz gerekiyor. Ben Gitlab’in Android için paylaştığı örnek bir config dosyasını kullandım. Üzerinde kendi projemin özelliklerine göre bazı düzenlemeler yaptım. Siz de bu dosyayı kendi ihtiyaçlarınıza göre özelleştirebilirsiniz.

Burada dikkat etmemiz gereken iki husus bulunmaktadır;

ANDROID_COMPILE_SDK & ANDROID_BUILD_TOOLS: Projenizin compile sdk ve build tools versiyonunu build.gradle dosyanızı inceleyerek projenize göre özelleştirmelisiniz, bu kısımda yapılacak bir hata build sürecinin başarısız olmasına sebep olacaktır.

Dilerseniz config dosyamızda kullandığımız bazı keywordlerden bahsedelim;

  1. image: Bu anahtar kelimeyi, yürütme için kullanılacak bir Docker görüntüsünü belirtmek için kullanabilirsiniz. Gitlab runners, pipeline(boru hattı) düzenini çalıştırmak için bu Docker görüntüsünü kullanır.
  2. cache: İşler arasında önbelleğe alınacak dosya ve dizinlerin bir listesini belirtmek için “cache” anahtar kelimesini kullanabilirsiniz. Biz Gradle klasörünü önbelleğe aldık bu sayede derleme gerçekleşirken derleme süresinin önemli ölçüde azaltılmasını sağladık.
  3. before_script: Derleme başlamadan önce gerekli dosyaların kurulmasını ve işlenmesini sağlar.
  4. stages: Bunlar, bir boru hattının(pipeline) çalıştırdığı genel olarak tanımlanmış düzeylerdir. İş gruplarını içeren aşamaları tanımlamak için stageler kullanılır.
  5. only: Burada, işin çalışacağı branch adlarını tanımlıyoruz. Ben master branchinde CI / CD adımlarının gerçekleşmesini istediğim için bu branchin adını yazdım. Siz farklı branchler ekleyebilir / değiştirebilirsiniz.

Build süreci başarılı olduktan sonra veri transfer etmek için command line tool ( komut satırı aracında) curl komutunu kullanıyoruz. Ardından çıktı olarak aldığımız apk dosyasını Slack API yardımıyla mesajlaşma kanalımıza gönderebiliriz. Slack API kullanarak file(dosya) gönderme ile ilgili detaylı bilgi almak isterseniz bkz.

Build işlemi başarıyla sonlandırılırsa apk çıktısı Slack API’ ye gönderilir. Yukarıdaki config dosyasında da görüldüğü üzere app dosyamızın konumu verilmiştir.

GİTLAB

Gitlab üzerinden çalışan pipelineları görüntüleyebilirsiniz.

Ayrıca pipeline detayına girdiğinizde build sürecini anlık olarak takip edebilir, hataları saptayabilir ve sağ taraftaki menüden çıktı olarak alınan dosyaları “Browse” sekmesine tıklayarak görüntüleyebilirsiniz.

Slack Api Entegrasyonu

Oluşturulan APK’yı yüklemek için kullanılacak bir Slack uygulaması oluşturmalıyız. Burada dikkat etmenizi istediğim şey; Slack kanalı eklemiyoruz, API ve kanalımız ile iletişime geçecek bir uygulama ekliyoruz.

  1. api.slack.com/apps adresine gidin ve “Create New App” butonuna tıklayın.
  2. Uygulamanız için bir ad girin, daha sonra uygulamanız için çalışma alanı seçin ve “Create App”e tıklayın.
  3. “Features” bölümünde “OAuth and Permission” menü öğesini tıklayın.
  4. Sayfayı kaydırın ve Bot Token Scopes’a ilerleyin, “Add an OAuth Scope” butonuna basın.
  5. Açılan açılır aramada “files:write” iznini seçin.
  6. Sayfayı yukarı kaydırın ve “Install To Workspace” tıklayın açılan sayfada “Allow” butonuna tıklayarak erişime izin verin.
  7. Daha sonra sayfa kapanacak ve alttaki bölüm ekrana gelecektir buradan tokenimizi “Copy” butonuna tıklayarak kaydedelim.

Daha sonra web de slack kanalımızı açarak resimde belirtilen “ / “ karakterinden sonraki id’yi alacağız bu bizim CHANNEL_ID ‘ miz olacak.

Artık elimizde config dosyamızda belirttiğimiz SLACK_CHANNEL_ACCESS_TOKEN ve SLACK_CHANNEL_ID’ miz bulunmakta bunları Gitlab’e variable olarak ekleyeceğiz.

  1. Gitlab’de projemizi açalım
  2. Soldaki menüden Settings -> CI/CD bölümüne girelim
  3. Variables bölümünde “Add variable” butonuna tıklayarak bir az önce kaydettiğimiz bilgileri ekleyelim, son hali aşağıdaki gibi olacaktır.

VE SON AŞAMA

  1. Slack uygulamamızı açalım
  2. Kanalımıza sağ tıklayalım ve daha sonra “Open Channel Details” kısmına tıklayalım.
  3. Açılan dialog penceresinde “Integrations” sekmesine tıklayalım
  4. “Add Aps” diyerek birkaç adım önce api.slack.com/apps adresinden eklediğimiz uygulamayı arayalım ve seçerek kanalımıza ekleyelim

Evet Slack entegrasyonumuz başarıyla gerçekleşmiştir. Artık master branchte bir değişiklik yaptığımızda otomatik olarak CI/CD süreci işletilecektir. Slack kanalımıza apk dosyamız ve mesajımız iletilecektir.

VE SON

Bugün sizlere Android projemizde Gitlab CI/CD kullanımını ve Slack ile entegrasyonunu anlatmaya çalıştım. Umarım açıklayıcı bir anlatım olmuştur, zaman ayırdığınız için teşekkürler :)

References

A Quick Guide to Setup Gitlab CI/CD for Android

Gitlab Docs

--

--

Yasin Ege
Naylalabs

Android Developer at Bilyoner — Flutter & Android