Continuous delivery com o build quebrado sem remorso
-
Upload
luiz-ribeiro -
Category
Documents
-
view
93 -
download
1
Transcript of Continuous delivery com o build quebrado sem remorso
Continuous Delivery com o build quebradosem 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!!!
82
MuitoObrigado!
82
Lucas Medina @medinalucas
Luiz Fernando Ribeiro @luizfar