SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
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!

Weitere ähnliche Inhalte

Was ist angesagt?

Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
Gilmar Pupo
 

Was ist angesagt? (20)

Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.
Mobile DevOps: O caminho do sucesso para desenvolvimento de aplicativos.
 
Testes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoTestes com xUnit + Coding Dojo
Testes com xUnit + Coding Dojo
 
Arquitetura Nativa na Nuvem
Arquitetura Nativa na NuvemArquitetura Nativa na Nuvem
Arquitetura Nativa na Nuvem
 
Jenkins integrando e estendendo.
Jenkins integrando e estendendo.Jenkins integrando e estendendo.
Jenkins integrando e estendendo.
 
7Masters - Devops - Do legado ao ci cd em 7 minutos
7Masters - Devops - Do legado ao ci cd em 7 minutos7Masters - Devops - Do legado ao ci cd em 7 minutos
7Masters - Devops - Do legado ao ci cd em 7 minutos
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Docker como super comando
Docker como super comandoDocker como super comando
Docker como super comando
 
Seminário: Delphi
Seminário: DelphiSeminário: Delphi
Seminário: Delphi
 
Meetup #17
Meetup #17Meetup #17
Meetup #17
 
Uma breve introdução de play framework
Uma breve introdução de play frameworkUma breve introdução de play framework
Uma breve introdução de play framework
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
 
Vagrant: Na sua máquina também funciona!
Vagrant: Na sua máquina também funciona!Vagrant: Na sua máquina também funciona!
Vagrant: Na sua máquina também funciona!
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Baixo Acoplamento e Alta Coesão
Baixo Acoplamento e Alta CoesãoBaixo Acoplamento e Alta Coesão
Baixo Acoplamento e Alta Coesão
 
Function as a Service no OpenFaaS com Docker e PHP
Function as a Service no OpenFaaS com Docker e PHPFunction as a Service no OpenFaaS com Docker e PHP
Function as a Service no OpenFaaS com Docker e PHP
 
Xamarin em 7 minutos
Xamarin em 7 minutosXamarin em 7 minutos
Xamarin em 7 minutos
 
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoDevops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
 
Jenkins, o CI ao seu dispor
Jenkins, o CI ao seu disporJenkins, o CI ao seu dispor
Jenkins, o CI ao seu dispor
 
.NET e ASP.NET Core 2.2, .NET Core 3, Visual Studio 2019: uma visão geral - ....
.NET e ASP.NET Core 2.2, .NET Core 3, Visual Studio 2019: uma visão geral - .....NET e ASP.NET Core 2.2, .NET Core 3, Visual Studio 2019: uma visão geral - ....
.NET e ASP.NET Core 2.2, .NET Core 3, Visual Studio 2019: uma visão geral - ....
 

Ähnlich wie Android fest

Ähnlich wie Android fest (20)

Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
Apresentando o OpsWorks - Bemobi
Apresentando o OpsWorks - BemobiApresentando o OpsWorks - Bemobi
Apresentando o OpsWorks - Bemobi
 
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOO novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
 
Developer Experience no Nubank
Developer Experience no NubankDeveloper Experience no Nubank
Developer Experience no Nubank
 
Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0
 
Visual Studio Summit 2014 - Portable Class Library
Visual Studio Summit 2014 - Portable Class LibraryVisual Studio Summit 2014 - Portable Class Library
Visual Studio Summit 2014 - Portable Class Library
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
 
Go git - Presentation @Navita
Go git - Presentation @NavitaGo git - Presentation @Navita
Go git - Presentation @Navita
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
CocoaPods in Action
CocoaPods in ActionCocoaPods in Action
CocoaPods in Action
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
 
Jenkins por dentro e por fora
Jenkins por dentro e por fora Jenkins por dentro e por fora
Jenkins por dentro e por fora
 

Kürzlich hochgeladen

Kürzlich hochgeladen (8)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

Android fest