Android — Firebase ve Gitlab ile CI/CD Kurulumu

Yasin Ege
Naylalabs
3 min readApr 8, 2022

--

Selamlar, bugün Android projemizde Gitlab CI/CD ve Firebase App Distribution kullanarak, çıktı olarak aldığımız Release APK dosyamızı test kullanıcılarının email adreslerine nasıl gönderebileceğimizden bahsedeceğim. Bu yazımı okumadan önce Gitlab CI/CD kurulumunu daha detaylı anlattığım bir önceki yazımı inceleyebilirsiniz.

GİRİŞ

GitLab, uygulamalarımızı oluşturma, test etme ve dağıtma sürecini otomatikleştirebilen basit bir CI/CD yapısına sahiptir. Bu makalede, bir Gitlab deposunda Android CI/CD’yi nasıl yapılandıracağımı paylaşacağım. Derlemeden sonraki amaç APK’yı 3. parti farklı bir uygulama kullanmadan Firebase App Distribution ile test kullanıcılarımıza dağıtabilmektir.

Firebase App Distribution: Uygulamamızın belirttiğimiz test kullanıcılarına sorunsuz bir şekilde dağıtılmasını sağlar. Uygulamamızı test kullanıcılarımıza sunduğumuzda hızlı bir geri bildirim alabilir ve yayınlanma sürecini hızlandırabiliriz.

BAŞLAYALIM

Öncelikle uygulamanızın Firebase bağlantısının yapıldığından emin olmalısınız. Daha sonra uygulamamızı imzalamamız gerekiyor. Build -> Generate Signed APK sekmesine tıklayalım ardından karşımıza çıkan adımları tamamlayarak keystore.jks dosyasını oluşturmalıyız.

Ayrıca keystore.jks dosyamızı başkalarının eline geçmesini istemiyorsak .gitignore dosyamızda gerekli eklemeleri yapmalısınız.

Proje kök dizinine key.properties dosyasını ekleyelim.

storePassword=<your_store_password>  
keyPassword=<your_key_password>
keyAlias=<your_key_alias>
storeFile=<your_keystore.jks_location_file>

Deploy sürecini Gitlab adresinde takip ederken keystore.jks dosyasının konumu ile alakalı build sürecinde sorun yaşandığını farkettim. Siz de aynı sorunla karşılaşırsanız storeFile = keystore.jks atamasını yapabilirsiniz.

app/build.gradle içerisinde key.properties dosyamızı kullanarak release sürümü imzalamamız için gerekli olan yapılandırma dosyasını(key.properties) eklemeliyiz.

def keystoreProperties = new Properties()  
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android{} içerisine gerekli yapılandırma bilgilerini eklemeliyiz.

signingConfigs {
release {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
buildTypes {
release {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}

Android uygulamanızı imzalama ile ilgili daha detaylı bilgi almak için dökümanları inceleyebilirsiniz.

Gerekli Değişkenleri Gitlab’e Ekleme

Gitlab ‘de projemizi açalım. Sol menüden Settings → CI / CD bölümüne girelim. Variables bölümünde aşağıdaki Key — Value çiftlerini eklemeliyiz.

FIREBASE_APP_ID: Firebase konsola girelim. Project Settings → General sayfasında App ID’mizi bulabiliriz.

FIREBASE_CI_TOKEN: Dökümanı inceleyerek gerekli tokeni elde edebilirsiniz.

GOOGLE_SERVICE_JSON: Projemizde ekli bulunan google_services.json dosyasını base 64 formatına çevirerek eklemeliyiz.

KEY_STORE_PROP: key.properties dosyasını base 64 çevirerek ekliyoruz.

KEYSTORE_FILE: keystore.jks dosyasını base64 çevirerek ekliyoruz.

Base64 ‘e çevirme işlemleri için kullandığım siteye bu linkden ulaşabilirsiniz.

Daha sonra proje kök dizinimize release-notes.txt dosyasını eklemeli ve burada sürüm ile alakalı bilgileri girmeliyiz.

.gitlab-ci.yml dosyamızı düzenleyelim

Release APK‘mızı çıktı olarak almak için aşağıdaki kod bloğunu ekleyelim. CI/CD sürecimiz başladığında assembleRelease çalışacak ve belirtilen dosya yolunda APK dosyamızı imzalayarak kaydedecektir.

assembleRelease:
stage: build
only:
- app-distribute
script:
- echo ${GOOGLE_SERVICE_JSON} | base64 -d > app/google-services.json
- echo ${KEY_STORE_PROP} | base64 -d > key.properties
- echo ${KEYSTORE_FILE} | base64 -d > app/keystore.jks
- ./gradlew assembleRelease
artifacts:
expire_in: 7 days
paths:
- app/build/outputs/apk/**/*.apk

Firebase App Distribution ile bağlantımızı yapalım

Öncelikle Firebase konsolumuza gidip test kullanıcılarımızı eklemeli ve eklenen kullanıcılarımızı yeni oluşturduğumuz/varolan bir gruba eklemeliyiz.

# Deploy release
deployFirebase:
stage: deploy
image: node:latest
only:
- master
before_script:
- export GRADLE_USER_HOME=$(pwd)/.gradle
- export JAVA_HOME="/usr/bin/java"
- apt-get update -y && apt-get install wget -y
dependencies:
- assembleRelease
script:
- npm install -g firebase-tools
- if [ -f "app/build/outputs/apk/release/app-release.apk" ]; then firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk --app $FIREBASE_APP_ID --release-notes-file release-notes.txt --groups "tester-group" --token "$FIREBASE_CI_TOKEN"; fi

Kod’da belirtilen “groups” değerine biraz önce test kullanıcılarını eklediğiniz grubun adını vermelisiniz.

.gitlab-ci.yml dosyamızın son hali:

Evet şimdi branch’imize yaptığımız değişiklikleri push atarak CI/CD / Editor / Pipeline kısmından anlık olarak stage’lerimizin durumunu takip edebilirsiniz. İşlemler başarıyla sonuçlandığında belirtilen test kullanıcılarına mail gittiğini görebilirsiniz.

Firebase — App Distribution console

VE SON

Bugün sizlere Android projelerimizde Gitlab CI/CD ve Firebase App Distribution kullanılarak test kullanıcılarımıza nasıl Release APK dosyası gönderebileceğimizden bahsettim. Umarım açıklayıcı bir anlatım olmuştur, teşekkürler.

Referanslar

--

--

Yasin Ege
Naylalabs

Android Developer at Bilyoner — Flutter & Android