SlideShare uma empresa Scribd logo
1 de 82
Continuous
Delivery com o
build quebrado
sem remorso
Lucas Medina @medinalucas
Luiz Ribeiro @luizfar
Jun 2013
2
Nós fazemos uma média de 5 deploys
para produção por dia
3
Às vezes, mesmo que o build esteja
quebrado...
4
Como assim?
5
• > O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Considerações Finais
Agenda
6
O Projeto
Painel de controle para Rackspace
Cloud Servers
7
O Projeto
8-10K visitas únicas
diárias
8
O Projeto
Thick client com Google Closure e
Knockout.js
9
O Projeto
Thin backend com Django e Twist
10
O Projeto
APIs públicas do Rackspace
11
• O Projeto
• > Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Considerações Finais
Agenda
12
Os Times
5 times distribuídos em 2
localidades
13
Os Backlogs
Kanban por time
14
Os Times
Todos os times
trabalham na mesma
base de código e em
qualquer
funcionalidade
15
Os Times
Qualquer “trabalho” entra no
backlog
16
Os Times
Dev completo == Produção
17
• O Projeto
• Os Times
• > O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Considerações Finais
Agenda
18
O Desenvolvimento
19
O Desenvolvimento
20
O Desenvolvimento
21
O Desenvolvimento
22
O Desenvolvimento
23
O Desenvolvimento
24
O Desenvolvimento
25
• O Projeto
• Os Times
• O Desenvolvimento
• > A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Considerações Finais
Agenda
26
A Automação
Testes de aceitação são parte
das estórias
27
A Automação
3 Quality
Engineers
28
A Automação
Backlog exclusivo
para QE
29
A Automação
Contém estórias para:
- Melhorar estabilidade
- Cobrir “gaps”
- Manutenção de suites
- Implementação de “sad paths”
30
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• > Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Considerações Finais
Agenda
31
Os Ambientes
32
Os Ambientes
33
Os Ambientes
34
Os Ambientes
35
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• > O Pipeline
• O Deploy
• Os Desafios
• Considerações Finais
Agenda
36
O Pipeline
37
O Pipeline
38
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• > O Deploy
• Os Desafios
• Considerações Finais
Agenda
39
O Deploy
40
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
41
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
42
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
43
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
44
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
[13:03] <jnott>: !good
45
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
[13:03] <jnott>: !good
[13:03] <bluffynarwhalbot>: Hey [lucasmedina] please check your
changes. [mozair, jnott] already confimed their changes are ok.
46
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
[13:03] <jnott>: !good
[13:03] <bluffynarwhalbot>: Hey [lucasmedina] please check your
changes. [mozair, jnott] already confimed their changes are ok.
[13:04] <lucasmedina>: !good
47
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
[13:03] <jnott>: !good
[13:03] <bluffynarwhalbot>: Hey [lucasmedina] please check your
changes. [mozair, jnott] already confimed their changes are ok.
[13:04] <lucasmedina>: !good
[13:04] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair], I'm
deploying revision [82459d1db17e177150d139d063f26c90d4ba3889].
48
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
[13:03] <jnott>: !good
[13:03] <bluffynarwhalbot>: Hey [lucasmedina] please check your
changes. [mozair, jnott] already confimed their changes are ok.
[13:04] <lucasmedina>: !good
[13:04] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair], I'm
deploying revision [82459d1db17e177150d139d063f26c90d4ba3889].
[13:04] <reach-dn-prod>: jenkins is deploying reach to
ord1_prod:ord1 - https://reach-
dreadnot.k1k.me/stacks/reach/regions/ord1/deployments/1950
49
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-
ci.k1k.me/job/Reach_Production_Deploy_OK/843/
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair] please
check your changes.
[13:02] <mozair>: !good
[13:02] <bluffynarwhalbot>: Hey [jnott, lucasmedina] please check
your changes. [mozair] already confimed their changes are ok.
[13:03] <jnott>: !good
[13:03] <bluffynarwhalbot>: Hey [lucasmedina] please check your
changes. [mozair, jnott] already confimed their changes are ok.
[13:04] <lucasmedina>: !good
[13:04] <bluffynarwhalbot>: Hey [jnott, lucasmedina, mozair], I'm
deploying revision [82459d1db17e177150d139d063f26c90d4ba3889].
[13:04] <reach-dn-prod>: jenkins is deploying reach to
ord1_prod:ord1 - https://reach-
dreadnot.k1k.me/stacks/reach/regions/ord1/deployments/1950
[13:10] <reach-dn-prod>: deployment #1950 of reach to
ord1_prod:ord1 succeeded
50
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• > Os Desafios
• Considerações Finais
Agenda
51
Os Desafios
Suites muito lentas
52
Suites muitos lentas
Saucelabs?
Infra-estrutura para testes em
paralelo?
53
Falhas por comunicação com as APIs
Baixo custo para replicar
ambientes e criar novas contas
54
Os Desafios
Testes que falham aleatoriamente
55
Testes que falham aleatoriamente
Testes que não são confiáveis
são piores que testes que
sempre falham
56
Testes que falham aleatoriamente
A prioridade é o pipeline
57
Testes que falham aleatoriamente
“Non-blocking tests”
58
Testes que falham aleatoriamente
“Firefighter”
59
Os Desafios
Problemas do papel “Firefighter”
60
Trabalho do “Firefighter” excedia o
seu dia de apagar o incêndio
Problemas do papel “Firefighter”
61
Problemas do papel “Firefighter”
Passou a ser o monitorador do
pipeline
62
Problemas do papel “Firefighter”
Despedimos o “Firefighter”
63
Problemas do papel “Firefighter”
Pipeline é responsabilidade de
quem fez merge
64
Problemas do papel “Firefighter”
Criação de estórias para corrigir
testes instáveis
65
Os Desafios
Testes falham por problemas na
comunicação com a API
66
Falhas por comunicação com as APIs
“Mock all the things!”
67
Falhas por comunicação com as APIs
Alto custo para programar mocks
68
Falhas por comunicação com as APIs
“Full stack” é desejável
69
Falhas por comunicação com as APIs
+ contas
+ tentativas
70
Os Desafios
Quebrar
funcionalidade
em produção
71
Quebrar funcionalidade em produção
Pequenos múltiplos deploys
facilitam identificação dos
problemas
72
Erros sérios são detectados por
testes
Quebrar funcionalidade em produção
73
Re-deploy
Quebrar funcionalidade em produção
74
Deixamos até outro deploy se
problema for pequeno
Quebrar funcionalidade em produção
75
“Root Cause Analysis”
Quebrar funcionalidade em produção
76
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• > Considerações Finais
Agenda
77
Considerações Finais
Design, testes manuais e
validação são atividades
externas
78
Considerações Finais
Story Branches
+
Feature Flags
79
Considerações Finais
Foco no testes
Sem tratá-los
religiosamente
80
Considerações Finais
DevOps!!!
81
Q&A
81
82
Muito
Obrigado!
82
Lucas Medina @medinalucas
Luiz Fernando Ribeiro @luizfar

Mais conteúdo relacionado

Semelhante a Continuous delivery com o build quebrado sem remorso

Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
elliando dias
 
Java web fj21-- apostila da caelum
Java web fj21-- apostila da caelumJava web fj21-- apostila da caelum
Java web fj21-- apostila da caelum
Agenor Neto
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
tdc-globalcode
 

Semelhante a Continuous delivery com o build quebrado sem remorso (20)

Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
 
Times plataforma-tdc2020
Times plataforma-tdc2020Times plataforma-tdc2020
Times plataforma-tdc2020
 
TDC 2018
TDC 2018TDC 2018
TDC 2018
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open Source
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
 
Java web fj21-- apostila da caelum
Java web fj21-- apostila da caelumJava web fj21-- apostila da caelum
Java web fj21-- apostila da caelum
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Práticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDEPráticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDE
 
Minicurso Testes em .NET - Globalcode Vinicius Quaiato
Minicurso Testes em .NET - Globalcode Vinicius QuaiatoMinicurso Testes em .NET - Globalcode Vinicius Quaiato
Minicurso Testes em .NET - Globalcode Vinicius Quaiato
 
Menos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na práticaMenos reunião e mais post-it: Kanban na prática
Menos reunião e mais post-it: Kanban na prática
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
Deploy Contínuo de Software Legado: Loucura ou Genialidade?
Deploy Contínuo de Software Legado: Loucura ou Genialidade?Deploy Contínuo de Software Legado: Loucura ou Genialidade?
Deploy Contínuo de Software Legado: Loucura ou Genialidade?
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
Equipes de sucesso final
Equipes de sucesso finalEquipes de sucesso final
Equipes de sucesso final
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 

Continuous delivery com o build quebrado sem remorso