3- Firebase App Distribution Using Azure Pipeline📢

Osman ÇALIŞKAN
IBTech
Published in
7 min readJul 31, 2024

Herkese selam, ben Osman 👋

Biliyorsunuz, android dünyasında çok fazla cihaz çeşitliliği var. QNBAndroidMobile olarak da min sdk 23 desteğimiz ile birlikte sahada yaklaşık 19 bin cihaz çeşitliliğine destek veriyoruz. Buna bağlı olarak da prod ortamında cihaz çeşitliliğinden dolayı beklenmedik crash’ler ile karşılaşabiliyoruz. Size bu tarz problemlere karşı nasıl hızlı aksiyon alabildiğimizi, hazırladığımız Firebase Pipeline sayesinde tek tuşla prod ortamına istediğimiz kullanıcıya ve istediğimiz branch ile fix ya da log paketi gönderebildiğimizden bahsedeceğim. Şimdiden keyifli okumalar diliyorum.

Öncelikle Firebase App Distribution Hakkında Konuşalım 🔥

App Distribution, uygulama geliştiricilerin sürümlerini test kullanıcılarına hızlı ve kolay bir şekilde dağıtmasını sağlar. Google tarafından sağlanan Firebase’in içerisinde bulunan App Distribution’un temel özellikleri şunlardır:

  • 🚀 Beta Test Dağıtımı: Beta test kullanıcılarına hızlı bir şekilde dağıtarak hataları belirlemek ve geri bildirimleri toplamak için kullanışlıdır.
  • 📱 Platform Desteği: Hem Android hem iOS için destek sunar.
  • 🔧 Kolay Entegrasyon: Firebase Console aracılığıyla CI/CD süreçlerinize entegre ederek uygulama yükleyebilir ve dağıtabilirsiniz.
  • 📝 Geri Bildirim Toplama: Uygulama içerisinden doğrudan kayıtlar oluşturabilir ve bunları inceleyebilirsiniz.
  • 📊 Detaylı Analiz: Dağıtım ve kullanım analitiği sunar, böylece test kullanıcı ve test sürümleri arasındaki ilişkiyi görebilirsiniz.
  • 🔄 Kolay Güncelleme: Bildirim yolu ile test kullanıcılarına yeni sürümleri kolayca dağıtabilirsiniz.

Biz Firebase App Distribution’u Nasıl Kullanıyoruz 👀

Bankacılık uygulamamızı geliştirirken test aşamasına çok önem veriyoruz. Şirket içerisinde ekiplerimiz test süreçlerini gerçekleştirirken biz geliştiriciler de bu yaptığımız değişikliği görmek istiyoruz. Ne demişler, bakarsan bağ olur bakmazsan bug olur🪳 Geliştirmeleri içeren versiyonu kendi geliştirici ekibimizden oluşan App Tester grubuna dağıtıyoruz. Böylece kendi yaptığımız değişiklikleri yayına almadan kısa süre öncesinde Firebase App Distribution ile kullanmaya başlıyoruz.

App Distribution’ı kullanmamızdaki bir diğer gereksinim de third-party firmalar ile ortak yürüttüğümüz projelerdir. Geliştirme sürecinde dış ekiplerin de kendi test süreçleri içerisinde kullanmaları ve geliştirmeleriyle etkileşimi görebilmeleri için test paketi oluşturuyoruz.

Ek olarak büyük projelerde internal pilot ihtiyacı olması durumunda da oldukca fazla kullanıyoruz. Pilot aşamasında bulgu cozum sonrasındaki dağıtım surecimiz cok hızlı oluyor.

O Zaman Neden Azure Pipeline ile Bağlamak Gerekti 👉🏼👈🏼

Firebase App Distribution ile versiyon dağıtımı yapmak geçmişte ekibimiz için biraz maliyetli bir operasyondu. Önce dağıtımın yapılacağı branch ile hangi build variant olarak çıktı alınmak istiyorsa ona uygun pipeline çalıştırılır. Sonrasında agent olan bilgisayara giriş yapılır ve çıkan APK çok sayıda pipeline arasından bulunur. Firebase App Distribution kısmına tarayıcıdan upload işlemi elle gerçekleştirilir. Bu kısımda da sıklıkla güvenlik duvarı engeli ile karşılaşırdık. Hem agent makine bilgilerini tutmak hem de pipeline çıktısını bulmak hepimizin yaptığı bir iş olmadığı için gerektiği durumda vakit alan bir süreç oluyordu. Vakit nakittir 🤑

Pipeline’ı App Distribution’a Bağlarken Öğrendiklerim 🙇🏻‍♂️

Firebase App Distribution için Azure’da Pipeline bağlantısını yapmadan önce Azure’un ve Pipeline’ların nasıl çalıştığını öğrenmem gerekti. Geçmişte DevOps tecrübem bulunmadığı için öncelikle bir deneme Azure hesabı oluşturdum. Sonrasında kendi bilgisayarımı Agent (işi yapacak build alacak bilgisayar) olarak ayarladım. İlk başarılı build’i almam gerekiyordu. Pipeline için Agent kurulumunda Google üzerinde çok fazla doküman ve sorunlara çözüm bulunduğu için bu aşamadaki zorlukları aşabildim. Burada amacım Pipeline konfigürasyonlarında değişiklik yaparak konuyu ve esnekliği öğrenebilmekti. Böylece kurulumun ilk checkpoint’ini geçmiş oldum.

Pipeline oluşturduktan sonra çalışacak olan upload script’ini önce manuel olarak denedim. Kurulum adımlarında gösterdiğim gibi önce kurulum ve yetkilendirme adımlarından sonra upload script’ini oluşturdum. Terminalden bu script’i örnek bir APK ile denedim ve başarılı olarak dağıtım oldu. Kullandığım script’i oluşturduğum Pipeline’a eklediğimde ve commit ile otomatik trigger ettiğimde aslında amacım olan otomasyonun bir demo halini görmüş oldum. Artık karşımda kimse duramazdı 🤓

Peki Kurulum Esnasında Hangi Zorluklar ile Karşılaştım ❓

Kurulum aşamalarını gerçekleştirmesi için DevOps ekibine ihtiyacım vardı. İlk toplantıda agent (build alan) bilgisayardan upload yapacak yetkili kullanıcıya giriş yapma evresinde sorun yaşadığımız için süreç biraz uzadı. Terminalden Google hesabımızı Firebase için yetkilendirmeye çalışırken güvenlik duvarında engelle karşılaştık. Şirket ağı bizi bu konuda engellemişti. Çözüm için güvenlik ekibinden bir uzman ile denemeler yaparak engellenen adresi bulduk. Bu adreslerin engelinin kaldırılması için talep açmak, inceleme olması, izinlerin çıkması ve güvenlik duvarından kaldırılması süresince beklemek beklemek beklemek 🙄

Entegrasyon Sonrasında Neler Değişti 💯

Firebase App Distribution, Azure Pipeline ile kullanılabilir olduktan sonra bizim için tek tıkla test versiyonu oluşturabildiğimiz bir uygulama oldu! Artık prod bulguları düşünsün, işimiz çok daha kolay 😎

Azure içerisinden Pipeline çalıştırırken istediğimiz branch’i seçerek, aslında default olarak tanımlı geliştirici ekibimizle bir versiyon paylaşmış oluyoruz. Pipeline seçili branch için build alıyor ve oluşturduğu APK dosyasını Firebase’e upload ediyor. Ardından mobil ekibe bununla ilgili mail atıyor.

Pipeline çalıştırma ekranında hangi branch ile build almak istediğimizi seçiyoruz. Altında Variables olan seçenekler içerisinde ise dağıtım yapmak istediğimiz (Firebase App Distribution içerisindeki) App Tester grubu ve versiyon ile ilgili Release Description verebiliyoruz. Maksimum 3 input ile istediğimiz kişilerle versiyon paylaşmış oluyoruz. Bu kolaylık, her release öncesi kendi yaptığımız geliştirmeleri erken görme fırsatı yarattı. Bu fırsat, test ortamı ve test verileri ile denk gelmeyen senaryoları görmemizi sağladı. Günlük kullanımdaki farklılıklar, geliştirici olarak bizim de incelememizdeki bakış açımızı geliştirdi.

Öyleyse Entegrasyonu Nasıl Yaptığıma Bakalım 👇🏼

Firebase App Distribution tarayıcı olmadan bilgisayar üzerinden kullanmak için iki farklı yöntem var, birincisi executable kurulum dosyası indirmek, ikincisi NPM kullanmak. Biz bunlardan kolay olduğunu düşündüğümüz NPM’i seçtik. Kullanmadan önce Node Package Manager’in kurulu olduğundan emin olmalıyız. Ardından terminalde aşağıdaki komutu çalıştırmalıyız.

npm install -g firebase-tools

Ardından versiyon görüntüleme ile yükleme işlemini kontrol edebiliriz.

firebase --version

Versiyon bilgisi ekrana geldi ise sorunsuz devam edebiliriz. Hata ile karşılaşmamız durumunda firebase dokümanını inceleyebiliriz.

NPM Firebase paketini Firebase hesabınıza bağlamanız için Local login, Service Account ve ApplicationDefault Credientals gibi farklı yöntemler de mevcut. Biz burada yetkilendirme veya etkileşim gerektirmeyen yöntem olarak User Token kullanarak giriş yapma yöntemini kullandık. Token elde etmek için aşağıdaki komutu çalıştırmalıyız.

firebase login:ci

Komutu çalıştırdığınızda size otomatik olarak tarayıcınızdan Google hesabınıza giriş yapabileceğiniz URL dönecek, eğer tarayıcınız kendiliğinden açılmazsa komutun ardından URL kopyalayıp tarayıcıya yapıştırarak giriş yapma ekranına gidiniz.

Firebase projenizin bağlı olduğu Google hesabınıza giriş yaptıktan ve izinleri verdikten sonra tarayıcı kapanacak ve komut satırı arayüzünde başarılı cevabı dönecek ardından size bir token verecek. Bu token’i not etmelisiniz. APK upload etmek için pipeline bu token’i kullanacak. Böylece makineden bağımsız bu token ile authentication gerekmeden işlem yapabileceksiniz.

Token’i başarılı bir şekilde elde ettikten sonra (terminalden paketin yüklenip yüklenmeyeceğini denemek için) upload işlemini manuel olarak deneyebiliriz. Aşağıdaki komutu oluşturduğunuz APK dizininde çalıştırabilirsiniz.

firebase appdistribution:distribute <APK Path> --token <TOKEN> --app <Firebase App ID>

İlk parametre olarak APK bulunduğu full path veya relative path vermeliyiz, daha sonra sıklıkla kullanılan diğer parametreleri aşağıdaki gibi kullanabiliriz: (Diğer bütün parametreleri incelemek için)

  • <APK PATH>: Upload edilecek versiyonun APK uzantılı dosyasının bulunduğu full path veya relative path.
  • token: ci kullanarak login olduktan sonra dönen ve authentication gerektirmeyen token. Nasıl elde edilir?
  • app: (Firebase App ID)Projenin Firebase App ID. Firebase console içerisinde Proje Tercihleri ekranında bulabilirsiniz.
  • release-note: Bu build ve dağıtım için direkt text ekleyebilirsiniz
  • release-note-file: Bu build ve dağıtım için metin içeren dosyanın full path veya relative path verebilirsiniz.
  • testers: Bu build için dağıtım yapılacak e-posta hesaplarını virgül ile ayırarak ekleyebilirsiniz.
  • testers-file: Bu build için dağıtım yapılacak e-posta hesaplarını içeren dosyanın full path veya relative path verebilirsiniz.
  • groups: Bu build için dağıtım yapılacak test gruplarını virgül ile ayırarak ekleyebilirsiniz. (Test gruplarını yönetmek için)
  • groups-file: Bu build için dağıtım yapılacak test gruplarını içeren dosyanın full path veya relative path verebilirsiniz.

appdistribution:distribute komutunu çalıştırdıktan sonra komut satırında aşağıdakine benzer başarılı sonucu görmeliyiz.

Ardından Firebase Console giderek ekranın solunda menüde Run > App Distribution içerisinde upload ettiğimiz build dağıtımını kontrol edebiliriz.

Son işlem olarak build almasını istediğiniz pipeline oluşturup APK üretildikten sonra step olarak script seçerek upload yaptığınız script’i yerleştirmemiz gerekiyor. Bunun için önce build almasını istediğimiz pipeline’ın bir kopyasını oluşturabilir ve sonrasında düzenleyebiliriz.

Burada her build için sabit kalacak APP ID ve TOKEN değerini variable olarak verebiliriz.

Böyle bu değerleri secret variable olarak set edip, script olarak görünmesini de engellemiş oluruz. Ayrıca test-group ve release-note parametrelerini de buraya değişken olarak ekleyip build-time run vermeden önce alabiliriz.

Böylece kolaylıkla pipeline ayarlarını yapmış oluyoruz.

Test gruplarını oluşturmak için öncelikle projenizin App Distribution ekranına gitmelisiniz. Ardından Testers and Groups sekmesine girerek grubu oluşturabilir ve içerisine test versiyonunu göndermek istediğiniz Google Play hesaplarını girebilirsiniz. Sıklıkla kullanan ekibiniz varsa uygulamayı tarayıcıdan güncellemek yerine App Tester uygulaması ile versiyonlarınızı inceleyebilir ve indirmeleri yönetebilirsiniz. (İncelemek için)

Script adımında vereceğimiz test grubu, grubun adının yanında yazan boşluksuz alias olacaktır.

Hoşca kalın 🙋🏻‍♂️

Bu süreçte öğrendiklerim ve kazandıklarım gerçekten çok değerliydi. Beni bu çalışmaya yönlendiren takım liderim ve süreçte destek olan ekip arkadaşlarıma teşekkür ederim. Okuduğunuz için teşekkürler, umarım deneyimlerin size de faydalı olmuştur 😊

Bir sonraki makalemiz Version Catalog Migration in QNBAndroid ile görüşmek üzere 🙏🏼

Kaynakça 📖

  1. https://blog.scesi.umss.edu.bo/distribute-apps-with-firebase-and-azure-devops/
  2. https://www.npmjs.com/package/firebase-tools
  3. https://firebase.google.com/docs/cli

--

--