Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Android: Integração Contínua & Entrega Contínua
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Rafael Toledo
April 20, 2018
Programming
190
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android: Integração Contínua & Entrega Contínua
Apresentado na Trilha Android do TDC Florianópolis 2018
Rafael Toledo
April 20, 2018
More Decks by Rafael Toledo
See All by Rafael Toledo
Gamedev com Kotlin Native
rafaeltoledo
0
120
Kotlin Multiplataforma: Compartilhando código entre Android e iOS
rafaeltoledo
0
330
Motion Layout
rafaeltoledo
1
190
Pipeline Android
rafaeltoledo
3
210
Android Architecture Components
rafaeltoledo
7
230
What's New in Kotlin 1.3
rafaeltoledo
0
180
An Overview of Multiplatform Kotlin
rafaeltoledo
2
180
Compartilhando Código com Kotlin Multiplataforma
rafaeltoledo
2
310
Android Assíncrono
rafaeltoledo
3
250
Other Decks in Programming
See All in Programming
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
1k
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
310
Kotlinの15年とServer-Side Kotlin
n_takehata
1
170
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
370
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
460
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
960
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
続・コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions-again
handlename
0
130
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
190
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
120
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
1.5k
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
590
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
450
Art, The Web, and Tiny UX
lynnandtonic
304
22k
BBQ
matthewcrist
90
10k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
The SEO Collaboration Effect
kristinabergwall1
1
600
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Bash Introduction
62gerente
615
220k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
340
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