Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android: Integração Contínua & Entrega Contínua
Search
Rafael Toledo
April 20, 2018
Programming
3
160
Android: Integração Contínua & Entrega Contínua
Apresentado na Trilha Android do TDC Florianópolis 2018
Rafael Toledo
April 20, 2018
Tweet
Share
More Decks by Rafael Toledo
See All by Rafael Toledo
Gamedev com Kotlin Native
rafaeltoledo
0
79
Kotlin Multiplataforma: Compartilhando código entre Android e iOS
rafaeltoledo
0
290
Motion Layout
rafaeltoledo
1
130
Pipeline Android
rafaeltoledo
3
160
Android Architecture Components
rafaeltoledo
7
160
What's New in Kotlin 1.3
rafaeltoledo
0
150
An Overview of Multiplatform Kotlin
rafaeltoledo
2
120
Compartilhando Código com Kotlin Multiplataforma
rafaeltoledo
2
260
Android Assíncrono
rafaeltoledo
3
220
Other Decks in Programming
See All in Programming
1から理解するWeb Push
dora1998
7
1.9k
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
450
旅行プランAIエージェント開発の裏側
ippo012
2
910
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
2
140
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
180
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
230
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
460
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
520
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
Improving my own Ruby thereafter
sisshiki1969
1
160
Swift Updates - Learn Languages 2025
koher
2
480
Namespace and Its Future
tagomoris
6
700
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
A designer walks into a library…
pauljervisheath
207
24k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
How to Ace a Technical Interview
jacobian
279
23k
GitHub's CSS Performance
jonrohan
1032
460k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Music & Morning Musume
bryan
46
6.8k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Why Our Code Smells
bkeepers
PRO
339
57k
Transcript
ANDROID Integração Contínua & Entrega Contínua
Rafael Toledo Consultor na ThoughtWorks Especialista em Android Mobile desde
2012 rafaeltoledo.net twitter.com/_rafaeltoledo github.com/rafaeltoledo medium.com/@rafael_toledo
Por que eu preciso disso? • Integração de código •
Todo mundo na mesma página • Execução de testes e validação contínua • Cobertura de código e outras métricas • Releases frequentes 3
Git Flow • Forks ou Branches? • Short lived branches
/ Long lived branches • Pull Requests / Merge Requests • Code Review 4
5
O que você procura em um code review? 6
7 Code Review O que devo procurar em um code
review? https://bit.ly/2JabM5R
None
None
None
Self-Hosted x Cloud
Self-Hosted x Cloud
Self-Hosted x Cloud
Cloud - CircleCI • Cota gratuita para repositórios privados •
Github ou Bitbucket • Facilidade de configuração • Suporte a Docker 14
.circleci/config.yml version: 2 jobs: build: working_directory: ~/my-project docker: - image:
circleci/android:api-27-alpha environment: JVM_OPTS: -Xmx3072m CIRCLE_JDK_VERSION: oraclejdk8 ... 15
.circleci/config.yml ... steps: - checkout - run: name: Accept licenses
command: yes | sdkmanager --licenses || true - run: name: Build release APK Command: ./gradlew assembleRelease 16
None
None
None
Jenkins: setup mínimo 20
None
None
E como ficam os meus segredos nesse bolo todo? 23
# app/build.gradle android { ... signingConfigs { storeFile file("$rootDir/release.jks") storePassword
'12345678' keyAlias 'myawesomeapp' keyPassword '12345678' } }
# app/build.gradle android { ... signingConfigs { storeFile file("$rootDir/release.jks") storePassword
'12345678' keyAlias 'myawesomeapp' keyPassword '12345678' } }
# app/build.gradle android { ... signingConfigs { storeFile file(System.env.RELEASE_STORE_FILE) storePassword
System.env.RELEASE_STORE_PASSWORD keyAlias System.env.RELEASE_KEY_ALIAS keyPassword System.env.RELEASE_KEY_PASSWORD } }
None
criptografa openssl aes-256-cbc -e -in release.keystore -out release.keystore-cipher -md sha256
-k $CIPHER_DECRYPT_KEY 28
descriptografa openssl aes-256-cbc -d -in distribution/release.keystore-cipher -out distribution/release.keystore -md sha256
-k $CIPHER_DECRYPT_KEY 29
None
FIREBASE TEST LAB 31
5 execuções / dia em devices 10 execuções / dia
em emuladores
Robo Test & Espresso
None
Por que o emulador não funciona bem na cloud? 35
... - run: name: Run Tests on Firebase Test Lab
command: | echo "${FIREBASE_TOKEN}" >> "secret.json" curl -0 https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.zip unzip -qq google-cloud-sdk.zip ./google-cloud-sdk/bin/gcloud config set project my-project ./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file secret.json
... ./google-cloud-sdk/bin/gcloud firebase test android run --app app/build/outputs/apk/debug/app-debug.apk --test app/build/outputs/apk/androidTest/app-debug-androidTest.apk
--device-ids sailfish,NexusLowRes,hammerhead --os-version-ids 19,23,27 --locales en --orientations portrait
DEPLOY / DELIVERY 38
None
None
None
None
https://docs.fastlane.tools/getting-started/an droid/setup/ 43
lane :beta do gradle(task: 'assemble', build_type: 'Release') upload_to_play_store(track: 'beta') slack(message:
'Successfully distributed a new beta build') end
https://docs.fastlane.tools/getting-started/an droid/screenshots/ 45
... # https://github.com/Triple-T/gradle-play-publisher - run: name: Deploy to Google Play
command: ./gradlew publishApkRelease
# https://github.com/square/spoon Spoon.screenshot(activity, "initial_state");
The Social Project rafaeltoledo.net medium.com/the-social-app github.com/rafaeltoledo/social-app
Links CIRCLECI https://circleci.com JENKINS https://jenkins.io FIREBASE TEST LAB https://firebase.google.com/docs/test-lab/ SEGMENTIO
ANALYTICS (SETUP CIRCLECI + FIREBASE) https://flutter.io/flutter-for-android/ 49
OBRIGADO Slides disponíveis em: speakerdeck.com/rafaeltoledo 50