Configurando CI/CD com Github Actions e Firebase App Distribution para projetos Android

Denis Vieira
Aug 19 · 9 min read
Image for post
Image for post

Índice

  1. Introdução
  2. Primeiros Passos e Workflows
  3. Configurando nosso primeiro Workflow “Pull Requests CI”
  4. Configurando workflow “Master Release CI” com o Firebase App Distribution
  5. Considerações Finais
  6. Próximo Passos
  7. Observações
  8. Referências

Introdução

A integração contínua (CI) e a implantação contínua (CD) são os primeiros passos para começarmos a automatizar e agilizar o nosso processo de desenvolvimento. Dessa forma, temos certeza de que nosso código é sempre verificado, testado e atende aos nossos padrões de qualidade antes de ser implantado.

Primeiros Passos e Workflows

Primeiramente, vá na aba “Actions” no repositório do projeto android que desejamos automatizar, após iremos no link “setup a workflow yourself” para criar a nossa própria configuração através do próprio editor do Github, lembrando que após finalizar o arquivo de todos os workflows é preciso realizar o commit dele, mas se desejar você também pode fazer manualmente no seu editor de código pessoal, para isso precisamos apenas criar uma pasta na raiz do seu projeto com o nome “.github” e dentro dela criar outra pasta com nome “workflows” e nela adicionaremos todos os nossos arquivos de workflow.

Image for post
Image for post
Image for post
Image for post

Configurando nosso primeiro Workflow “Pull Requests CI”

Vamos iniciar então criando o Pull Requests CI, primeiramente iremos configurar em que caso iremos rodar esse workflow, nesse caso em todos os pull requests criados para as branchs “master” ou “release..”.

name: Pull Requests CIon:
pull_request:
branches:
— ‘master’
— ‘release*’

```
# Um workflow é composto de um ou mais Jobs que podem ser executados sequencialmente ou em paralelo
jobs:
# Este Workflow contém dois Jobs chamados “test” e “build-and-deploy”
test:
name: Run Unit Tests
# O tipo de runner em que o job será executado
runs-on: ubuntu-latest
# Steps representam a sequencia de tarefas usando shell runners que serão executadas como parte do Job
steps:
— uses: actions/checkout@v1
— name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
— name: Unit tests
run: bash ./gradlew test — stacktrace
```

```
build-and-generate-apk:
# O tipo de runner em que o job será executado
runs-on: ubuntu-latest
# Steps representam a sequencia de tarefas usando o shell runners que serão executadas no como parte do Job
steps:
— uses: actions/checkout@v1
# Step para Configurar o JDK
— name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
# Step para instalar o NDK
— name: Install NDK
run: echo “y” | sudo ${ANDROID_HOME}/tools/bin/sdkmanager — install “ndk;20.0.5594570”
# Step para Buildar o Projeto e gerar a APK
— name: Build Debug
run: ./gradlew assembleDebug
# Step para salvar a APK como Artifacts
— name: Upload APK on Build Artifacts
uses: actions/upload-artifact@v1
with:
name: app
path: app/build/outputs/apk/debug/app-debug.apk
```
Pipeline sendo iniciada
Pipeline sendo iniciada
Apk Gerada no Github Artifacts
Apk Gerada no Github Artifacts

Configurando workflow “Master Release CI” com o Firebase App Distribution

Tendo pronto nosso primeiro workflow que tratará nosso primeiro processo de desenvolvimento, o Pull Request. Agora iremos configurar o “Master Release CI” que irá iniciar sempre que ocorrer uma atualização em nossa branch principal, no caso a “master” ou alguma outra branch com iniciais “release”.


```
name: Master Release CI
on:
push:
branches:
— ‘master’
— ‘release*’
```
Firebase Distribution
Firebase Distribution
App Settings Firebase
App Settings Firebase

```
firebase login:ci
```
Firebase Token
Firebase Token
Github Secrets
Github Secrets
```
# Um workflow é composto de um ou mais Jobs que podem ser executados sequencialmente ou em paralelo
jobs:
# Este Workflow contém um único Job chamado “build-and-deploy”
build-and-deploy:
# O tipo de runner em que o job será executado
runs-on: ubuntu-latest
# Steps representam a sequencia de tarefas usando o shell runners que serão executadas no como parte do Job
steps:
— uses: actions/checkout@v1
— name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
# Step para Instalar o NDK
— name: Install NDK
run: echo “y” | sudo ${ANDROID_HOME}/tools/bin/sdkmanager — install “ndk;20.0.5594570”
# Step para Buildar o Projeto e gerar a APK
— name: build debug apk
run: ./gradlew assembleDebug
# Step para Enviar a APK gerada para o Firebase App Distribution
— name: upload artifact to Firebase App Distribution
uses: wzieba/Firebase-Distribution-Github-Action@v1.2.1
with:
appId: ${{ secrets.FIREBASE_APP_ID }}
token: ${{ secrets.FIREBASE_TOKEN }}
groups: testers
file: app/build/outputs/apk/debug/app-debug.apk
```

Considerações Finais

E pronto ! Agora temos o que precisamos para realizar uma entrega integrada, continua e centralizada para todas as partes interessadas apenas seguindo um fluxo de desenvolvimento simples. Por favor comente suas dúvidas, sugestões e compartilhe sua experiência.

Próximo Passos

  • Configurar para gerar apk de release com a keystore
  • release notes baseando-se em arquivo de changelog

Observações

  • Mesmo enviando o apk automaticamente para o Firebase Distribuition através do Actions algumas vezes ainda é necessário que você vá até o console do Firebase na sessão de App Distribuition e realize a distribuição para o grupo que desejar.
  • Por padrão as release notes são preenchidas com a descrição do último commit, mas é possível modifica-lá antes de realizar a sua distribuição.

Referências

Android Dev BR

Artigos em português sobre Android, curados pela comunidade…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store