Automation Publish to Google Play Store with CI / CD Technology

How to implement automation publish to Google Play Store with CI / CD Technology

Yudi Setiawan
Sep 7, 2018 · 9 min read

Introduction

Semakin canggihnya teknologi maka, sekarang semua kegiatan manusia semakin dipermudah dengan sistem otomatisasi. Kecanggihan sistem otomatisasi ini berdampak pada kita (software developer) dimana, ada beberapa aktivitas kita yang sekarang sudah bisa di-otomatisasikan oleh sistem. Salah satu contohnya yaitu dalam melakukan deploy ke server (web) atau publish APK ke Google Play Store (android).

CI/CD pada artikel ini mengarah kedua pemahaman yaitu Continuous Integration dan Continuous Delivery. “Lalu dimanakah letak otomatisasi-nya seperti yang sudah saya sebutkan sebelumnya?” Mari saya perjelas satu per satu arti dari Continuous Integration dan Continuous Delivery.

Continuous Integration

Berdasarkan dari situs Wikipedia disebutkan bahwa

Continuous Integration is the practice of merging all developer working copies to a shared mainline several times day.

Lalu menurut Martin Fowler disebutkan bahwa

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily — leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.

Jadi, berdasarkan kedua sumber diatas saya dapat mengambil sebuah kesimpulan bahwa Continuous Integration adalah sebuah best practice dalam software development dimana, semua developer yang berada dalam satu tim harus melakukan pekerjaannya (development, testing, maintained) masing-masing dan setiap pekerjaan antar anggota harus bisa terintegrasi satu sama lainnya dan terverifikasi oleh sistem dengan cara automated testing untuk mengetahui apakah kode-kode yang mau digabungkan terdapat error.

Sebagai contoh, Anda membuat aplikasi Android dengan bahasa pemrograman Java dan langkah-langkah yang harus Anda lakukan sampai aplikasi tersebut ready to publish adalah sebagai berikut:

Nah, bayangkan jika kegiatan-kegiatan yang saya sebutkan pada poin-poin diatas Anda kerjakan setiap hari atau Anda lakukan secara berkala maka, tentu akan memakan waktu yang lama dan Belum lagi jikalau kegiatan-kegiatan tersebut Anda lakukan dalam keadaan penuh tekanan maka, sudah dipastikan ada salah satu kegiatan yang terlewat.

Continuous Delivery

Berdasarkan dari situs Wikipedia disebutkan bahwa

Continuous Delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. It aims at building, testing, and releasing software with greater speed and frequency. The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery.

Dari sumber tersebut bisa saya ambil kesimpulan singkat bahwa CD merupakan sebuah proses delivery aplikasi agar bisa lebih cepat dan siap kapan pun untuk ready to publish dimana, proses ini sebenarnya berkaitan dengan CI.


Gradle Play Publisher

Seperti yang Anda ketahui bahwa untuk melakukan update ke Play Store ada beberapa langkah yang harus Anda lakukan dan umumnya langkah-langkahnya adalah sebagai berikut:

Dari langkah-langkah diatas Gradle Play Publisher bisa membantu Anda untuk mempersingkat proses diatas dan melakukan Update APK ke Play Store secara otomatis. Hebat kan…

OMG…

Service Account Google Play Developer API

Untuk menggunakan Gradle Play Publisher ada beberapa langkah persiapan yang harus Anda lakukan yaitu mengaktifkan Google Play Developer API. Caranya adalah sebagai berikut.

  • Buka dashboard console developer Anda dan pilih menu Setelan.
Pilih menu Setelan
  • Kemudian pilih menu Akses API dan pilih Buat Proyek Baru.
Akses API → Buat Proyek Baru
  • Tunggu beberapa saat lalu akan tampil menu seperti berikut dan pilih Buat Akun Layanan.
Buat Akun Layanan
  • Berikutnya akan tampil dialog seperti berikut dan pilih Buka Konsol API Google.
Buka Konsol API Google
  • Kemudian, Anda akan dialihkan ke web Google API dan kurang lebih tampilannya seperti berikut. Lalu, silakan pilih Buat Akun Layanan.
Buat Akun Layanan
  • Selanjutnya, silakan Anda isi form yang muncul seperti berikut dan harap disesuaikan ya jika sudah masuk projek sesungguhnya. Untuk belajar kali ini mungkin Anda bisa ikuti saja data form-nya dan pilih Simpan. (Yang saya sensor pada gambar merupakan nilai ID yang terbuat secara otomatis oleh sistem jadi, tidak perlu Anda isi manual).
Isi data form akun layanan
  • Jika proses pembuatannya berhasil maka, akan muncul dialog seperti berikut dan akan terjadi proses unduh file dengan ekstensi P12.
Akun layanan berhasil dibuat
  • Selanjutnya pada konsol Google Play Developer silakan Anda refresh webpage-nya maka, akan muncul akun layanan yang barusan Anda buat tadi.
Akun layanan berhasil muncul di konsol Google Play Developer API
  • Selanjutnya, silakan pilih Izinkan Akses dan pastikan bahwa aksesnya bisa melakukan rilis ke produksi, alpha dan beta dan kemudian, pilih Tambahkan Pengguna.
Atur perizinan akses API Layanan
  • Lalu, akan muncul tampilan seperti berikut dimana, API layanan yang barusan Anda set perizinannya tadi akan muncul.
Akses API layanan

Enable Gradle Play Publisher in Android Studio

Selanjutnya, silakan Anda buka projek di Android Studio dan update nilai version code dan version name yang ingin Anda update ke Play Store.

Catatan: di sini saya melakukan update ke Play Store yang berarti, sebelumnya untuk publish pertama saya lakukan manual ya → sebenarnya untuk publish pertama kali juga bisa pakai Gradle Play Publisher hanya saja tidak saya bahas pada artikel ini dan silakan Anda baca-baca dokumentasinya

Lalu, buka file build.gradle(Project) dan tambahkan dependency-nya seperti berikut.

buildscript {
ext.kotlin_version = '1.2.30'
repositories {
// ...
jcenter()
}
dependencies {
// ...
classpath "com.github.triplet.gradle:play-publisher:1.2.2"
}
}
// ...

Selanjutnya, silakan Anda apply -kan plugin Gradle Play Publisher di file build.gradle(App) seperti berikut.

// ...
apply plugin: 'com.github.triplet.play'

android {
// ...
}

Lalu, di dokumentasinya disebutkan bahwa ada beberapa perintah yang disediakan oleh Gradle Play Publisher yaitu sebagai berikut.

Daftar perintah yang disediakan oleh Gradle Play Publisher

Kemudian, silakan Anda salin file P12 yang sudah Anda unduh tadi diawal artikel dan file keystore untuk membuat generated signed APK kedalam projek seperti pada gambar berikut.

Salin file P12 dan keystore

Lalu pada file build.gradle(App) tambahkan deklarasi Gradle Play Publisher dan signing config-nya seperti berikut.

android {
// ...
signingConfigs {
release {
storeFile file("keystore_file.jks")
storePassword "password_keystore"
keyAlias "nama_key_alias"
keyPassword "password_key_alias"
}
}
// ...
flavorDimensions "production"
productFlavors {
// ...
}
}

play {
serviceAccountEmail = 'testing@api-xxxxxxxxxxxxxxxxxxx-xxxxxx.iam.gserviceaccount.com'
pk12File = file('api-xxxxxxxxxxxxxxxxxxx-xxxxxx-xxxxxxxxxxxx.p12')
track = 'beta' // Or any of 'alpha' or 'production'
}

Jadi, pada file build.gradle(App) diatas ada Anda deklarasikan signingConfig yang mana ini berfungsi untuk membuat generated signed APK dan play sesuai dengan akun layanan google developer API yang sudah Anda buat tadi di konsol Google Play Developer. Lalu, untuk track ini berfungsi untuk mendeklarasikan kemanakah APK Anda akan di-update di Google Play Store.

Lalu, untuk masalah data-data lainnya yang dibutuhkan di Google Play Store seperti, nama app, what’s new, gambar dan lain sebagainya bisa Anda buat juga. Berikut keterangan dari dokumentasinya.

Di artikel ini akan saya contohkan bagaimana cara menggunakan meta data tadi dengan cara menambahkan data what’s new lewat Gradle Play Publisher. Caranya silakan Anda buat direktori baru bernama play dan letak-nya didalam direktori src/main lalu didalam direktori play buat lagi direktori baru bernama en-US dan didalam direktori en-US buat satu file baru bernama whatsnew-beta dan silakan Anda isi sesuai dengan kalimat yang Anda inginkan.

Penambahan what’s new

Selanjutnya, silakan Anda buka terminal dari Android Studio dan pastikan Anda sudah memiliki koneksi internet untuk melakukan ini. Ketik perintah berikut ./gradlew publishApkRelease jika Anda tidak memiliki flavorDimensions pada file build.gradle(App) namun, jika Anda memiliki flavorsDimensions seperti gambar berikut maka, tambahkan nama flavors Anda sebelum kata Release jadi, perintah sebelumnya akan menjadi ./gradlew publishApkProductionRelease

Flavors Dimensions

Silakan Anda tunggu proses pembuatan APK-nya dan jika sudah selesai maka akan seperti ini hasilnya.

Proses Gradle Play Publisher
Proses Gradle Play Publisher berhasil

Automation with CI/CD

Nah, kalau sebelumnya Anda sudah tahu cara melakukan publish secara otomatis ke Google Play Store menggunakan Gradle Play Publisher maka, selanjutnya adalah menerapkannya kedalam CI/CD. Jadi, pada kali ini saya akan melakukan push ke repositori master lalu CI/CD pada repositori akan melakukan publish otomatis ke Google Play Store menggunakan perintah Gradle Play Publisher yang sudah Anda pelajari sebelumnya. Langkah awalnya ialah pastikan Anda sudah meletakkan projek Anda ke salah satu repositori yang ada seperti di Github atau Gitlab. Untuk kali ini saya menggunakan Gitlab jadi, silakan Anda pakai Gitlab saja ya biar gampang penyesuaiannya.

Silakan Anda buat file .gitlab-ci.yml dan isi dengan source code berikut.

image: openjdk:8-jdk

variables:
ANDROID_COMPILE_SDK:
"26"
ANDROID_BUILD_TOOLS: "26.0.2"
ANDROID_SDK_TOOLS: "25.2.5"

before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- export ANDROID_SDK_HOME=$PWD/__ci
- export ANDROID_HOME=$ANDROID_SDK_HOME/android-sdk-linux
- export GRADLE_USER_HOME=$ANDROID_SDK_HOME
- mkdir -p $ANDROID_HOME
- wget --quiet --output-document=$ANDROID_SDK_HOME/android-sdk-tools.zip https://dl.google.com/android/repository/tools_r${ANDROID_SDK_TOOLS}-linux.zip
- unzip $ANDROID_SDK_HOME/android-sdk-tools.zip -d $ANDROID_HOME
- echo y | $ANDROID_HOME/tools/android --silent update sdk --no-ui --all --filter android-${ANDROID_COMPILE_SDK}
- echo y | $ANDROID_HOME/tools/android --silent update sdk --no-ui --all --filter platform-tools
- echo y | $ANDROID_HOME/tools/android --silent update sdk --no-ui --all --filter build-tools-${ANDROID_BUILD_TOOLS}
- echo y | $ANDROID_HOME/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository
- echo y | $ANDROID_HOME/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services
- echo y | $ANDROID_HOME/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository
- export PATH=$PATH:$ANDROID_HOME/platform-tools/
- export LD_LIBRARY_PATH=${ANDROID_HOME}/tools/lib64
- chmod +x ./gradlew
# configure system gradle
- mkdir -p $GRADLE_USER_HOME/.gradle/
- echo "org.gradle.jvmargs=-Xmx2048M" > $GRADLE_USER_HOME/.gradle/gradle.properties
# auto accept licenses
- mkdir "$ANDROID_HOME/licenses" || true
- echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
- echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"


stages:
- build
- deploy

build:
stage:
build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/

deploy:
stage:
deploy
script:
- ./gradlew publishApkProductionRelease

Jadi, pada kode diatas Anda harus mendeklarasikan Android Compile SDK, Android Build Tools, dan Android SDK Tools dimana, yang perlu Anda perhatikan adalah nilai Android Compile SDK dan Android Build Tools harus sama dengan projek di Android Studio Anda sementara untuk nilai Android SDK Tools silakan Anda ikuti saja dan alasannya bisa Anda baca di sini ya https://gitlab.com/gitlab-org/gitlab-runner/issues/1956 → Jika Anda sudah menggunakan Android SDK Tools diatas 24 maka, ketika install package-nya ada meminta accept license dan ini harus diberi perintah “yes” agar proses CI/CD Anda bisa berjalan selanjutnya.

Sesuaikan nilai variables di .gitlab-ci.yml

Kemudian, silakan Anda update nilai version code dan version name lalu commit dan push ke repositori master. Dan berikut adalah video proses CI/CD-nya.

Proses CI/CD untuk publish APK ke Play Store

Nusanet Developers

Stories and insights from the developers in Nusanet

Yudi Setiawan

Written by

I’m a software developer and specialize in android development

Nusanet Developers

Stories and insights from the developers in Nusanet

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade