Build e Release no
Nubank
Leandro Borges Ferreira - Software Engineer @ Nubank
Nosso app cresceu…
+/- 1k de UI
Milhares de testes unitários
+/- 15 devs de cada plataform
+/- 30 devs de RN
App no início de 2017
- 40~50 min clean build no CI
- ~1h UI tests
- 5~6 min de unit + (rebuild) ~15min (único flavor)
- +- 2h cada run do CI
- Um único projeto
App no início de 2017
Divisão por lógica de negócios
•Cada squad é empoderado a ter
sua própria parte do app
•Priorização decentralizada
•Código desacoplado
•Spikes de novas tecnologias
•Sem dor de projeto grande
Como?
•Funcionalidades comuns numa
biblioteca própria
•Começar um novo projeto por uma
template
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Schemata
Managers
CoreAnalyticsblocks ui
http
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
O que ganhamos?
•Build rápidos - Ao separar cada um em seu
repositório
•Test suits menores
•Felicidade 😁
•Documentação e arquitetura
concisa dentro de um projeto
Schemata
Managers
CoreAnalyticsblocks ui
http
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
Schemata
Managers
CoreAnalyticsblocks ui
http
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
Common Libraries
Nubank Android Core
Schemata
Managers
CoreAnalyticsblocks ui
http
Help BonafontNuConta Feed
. . .. . .
android-app
Downsides
•Mudanças em diversos projetos virou doloroso
•Comunicação cross-squad sobre as
mudanças
•Nem todo mundo trabalhando em
projeto novo (build do antigo lento)
Common Libraries
Nubank Android Core
Schemata
Managers
CoreAnalyticsblocks ui
http
Help BonafontNuConta Feed
. . .. . .
android-app
foundation
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
android-app
foundation
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .
foundation
blankets react-native-common-bridge
All JS
dependencies
Anticipation
react-native-central
. . .
android-app
O que fizemos??
Monorepo
Juntar todos os projetos de novo em
um único só
Arquitetura do projeto
Mas e o tempo de build, teste e tudo mais????
Monorepo
Buck
Buck
Pensado para mono repositórios
Projetos devem ser modulares
Cache bastante agressivo
Grande ganho de performance
Tipo isso aqui
Buck - Como foi
Vale a pena para apps modulares
Kotlin (e Swift) não é ABI estable =|
Builds mais reproduzíveis (e menos mágicos)
Kotlin support ainda é bebe
OkBuck ajuda bastante
Tá, mas na prática...
Mudamos para o Gradle (com cache)
Gradle é um pouco menos performático (mas é muito pouco)
Fazendo o tuning direito do Gradle ele fica muito bom
Plugin para usarmos JWT
O projeto escala melhor
Ninguém usou o Buck no processo de transição
Não dá para “só mudar” o
processo atual
Problemas a resolver (Que depois cresceram…)
Pipelines longas, flakness é um problema
Mais caro rodar nossos testes
É necessário um momento de transição
Device farm in house
Build Testes - Todos Testes - Falhas Deploy
S3
Mudança de apenas um pecado do Grafo
PRs devem ser congelados
Não tem volta 😱
É commit pra %ˆ$@%
O GoCD é pensado para Trunk Based Development
Roteamento não funcionou muito bem
Master
Staging Try
Branch
Obrigado gente!
Estamos contratando. Aplica lá no site!

Android fest