Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Continuous
Delivery com
o build
quebrado sem
remorso
Lucas Medina @medinalucas
Maio 2015
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
• Consid...
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
1
0
O Projeto
APIs públicas do Rackspace
1
1
• O Projeto
• > Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Cons...
1
2
Os Times
5 times distribuídos em 2
localidades
1
3
Os Backlogs
Kanban por time
1
4
Os Times
Todos os times
trabalham na mesma
base de código e em
qualquer
funcionalidade
1
5
Os Times
Qualquer “trabalho” entra no
backlog
1
6
Os Times
Dev completo == Produção
1
7
• O Projeto
• Os Times
• > O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Cons...
1
8
O Desenvolvimento
1
9
O Desenvolvimento
2
0
O Desenvolvimento
2
1
O Desenvolvimento
2
2
O Desenvolvimento
2
3
O Desenvolvimento
2
4
O Desenvolvimento
2
5
• O Projeto
• Os Times
• O Desenvolvimento
• > A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Cons...
2
6
A Automação
Testes de aceitação são parte
das estórias
2
7
A Automação
3 Quality
Engineers
2
8
A Automação
Backlog exclusivo
para QE
2
9
A Automação
Contém estórias para:
- Melhorar estabilidade
- Cobrir “gaps”
- Manutenção de suites
- Implementação de “s...
3
0
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• > Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• Cons...
3
1
Os Ambientes
3
2
Os Ambientes
3
3
Os Ambientes
3
4
Os Ambientes
3
5
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• > O Pipeline
• O Deploy
• Os Desafios
• Cons...
3
6
O Pipeline
3
7
O Pipeline
3
8
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• > O Deploy
• Os Desafios
• Cons...
3
9
O Deploy
4
0
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
1
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
2
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
3
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
4
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
5
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
6
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
7
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
8
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
4
9
O Deploy
[13:02] <reach-jenkins>: Project Reach_Production_Deploy_OK build
#843: SUCCESS in 52 sec: https://reach-ci.k...
5
0
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• > Os Desafios
• Cons...
5
1
Os Desafios
Suites muito lentas
5
2
Suites muitos lentas
Saucelabs?
Infra-estrutura para testes em
paralelo?
5
3
Falhas por comunicação com as APIs
Baixo custo para replicar
ambientes e criar novas contas
5
4
Os Desafios
Testes que falham
aleatoriamente
5
5
Testes que falham aleatoriamente
Testes que não são confiáveis
são piores que testes que
sempre falham
5
6
Testes que falham aleatoriamente
A prioridade é o pipeline
5
7
Testes que falham aleatoriamente
“Non-blocking tests”
5
8
Testes que falham aleatoriamente
“Firefighter”
5
9
Os Desafios
Problemas do papel “Firefighter”
6
0
Trabalho do “Firefighter” excedia
o seu dia de apagar o incêndio
Problemas do papel “Firefighter”
6
1
Problemas do papel “Firefighter”
Passou a ser o monitorador do
pipeline
6
2
Problemas do papel “Firefighter”
Despedimos o “Firefighter”
6
3
Problemas do papel “Firefighter”
Pipeline é responsabilidade de
quem fez merge
6
4
Problemas do papel “Firefighter”
Criação de estórias para corrigir
testes instáveis
6
5
Os Desafios
Testes falham por problemas na
comunicação com a API
6
6
Falhas por comunicação com as APIs
“Mock all the things!”
6
7
Falhas por comunicação com as APIs
Alto custo para programar mocks
6
8
Falhas por comunicação com as APIs
“Full stack” é desejável
6
9
Falhas por comunicação com as APIs
+ contas
+ tentativas
7
0
Os Desafios
Quebrar
funcionalidade
em produção
7
1
Quebrar funcionalidade em produção
Pequenos múltiplos deploys
facilitam identificação dos
problemas
7
2
Erros sérios são detectados por
testes
Quebrar funcionalidade em produção
7
3
Re-deploy
Quebrar funcionalidade em produção
7
4
Deixamos até outro deploy se
problema for pequeno
Quebrar funcionalidade em produção
7
5
“Root Cause Analysis”
Quebrar funcionalidade em produção
7
6
• O Projeto
• Os Times
• O Desenvolvimento
• A Automação
• Os Ambientes
• O Pipeline
• O Deploy
• Os Desafios
• > Cons...
7
7
Considerações Finais
Design, testes manuais e
validação são atividades
externas
7
8
Considerações Finais
Story Branches
+
Feature Flags
7
9
Considerações Finais
Foco no testes
Sem tratá-los
religiosamente
8
0
Considerações Finais
DevOps!!!
8
1
Referencias
http://www.thoughtworks.com/pt/insights/blog/continuous-
delivery-broken-builds-and-clean-conscience
http:...
8
Q&A
8
8
Muito
Obrigado!
8
Lucas Medina @medinalucas
Upcoming SlideShare
Loading in …5
×

TDC2015 continuous develivery com build quebrado sem remorso

387 views

Published on

Apresentação para o TDC 2015 Floripa sobre Continuous Delivery com build quebrado sem remorso

Published in: Technology
  • Be the first to comment

  • Be the first to like this

TDC2015 continuous develivery com build quebrado sem remorso

  1. 1. Continuous Delivery com o build quebrado sem remorso Lucas Medina @medinalucas Maio 2015
  2. 2. 2 Nós fazemos uma média de 5 deploys para produção por dia
  3. 3. 3 Às vezes, mesmo que o build esteja quebrado...
  4. 4. 4 Como assim?
  5. 5. 5 • > O Projeto • Os Times • O Desenvolvimento • A Automação • Os Ambientes • O Pipeline • O Deploy • Os Desafios • Considerações Finais Agenda
  6. 6. 6 O Projeto Painel de controle para Rackspace Cloud Servers
  7. 7. 7 O Projeto 8-10K visitas únicas diárias
  8. 8. 8 O Projeto Thick client com Google Closure e Knockout.js
  9. 9. 9 O Projeto Thin backend com Django e Twist
  10. 10. 1 0 O Projeto APIs públicas do Rackspace
  11. 11. 1 1 • O Projeto • > Os Times • O Desenvolvimento • A Automação • Os Ambientes • O Pipeline • O Deploy • Os Desafios • Considerações Finais Agenda
  12. 12. 1 2 Os Times 5 times distribuídos em 2 localidades
  13. 13. 1 3 Os Backlogs Kanban por time
  14. 14. 1 4 Os Times Todos os times trabalham na mesma base de código e em qualquer funcionalidade
  15. 15. 1 5 Os Times Qualquer “trabalho” entra no backlog
  16. 16. 1 6 Os Times Dev completo == Produção
  17. 17. 1 7 • O Projeto • Os Times • > O Desenvolvimento • A Automação • Os Ambientes • O Pipeline • O Deploy • Os Desafios • Considerações Finais Agenda
  18. 18. 1 8 O Desenvolvimento
  19. 19. 1 9 O Desenvolvimento
  20. 20. 2 0 O Desenvolvimento
  21. 21. 2 1 O Desenvolvimento
  22. 22. 2 2 O Desenvolvimento
  23. 23. 2 3 O Desenvolvimento
  24. 24. 2 4 O Desenvolvimento
  25. 25. 2 5 • O Projeto • Os Times • O Desenvolvimento • > A Automação • Os Ambientes • O Pipeline • O Deploy • Os Desafios • Considerações Finais Agenda
  26. 26. 2 6 A Automação Testes de aceitação são parte das estórias
  27. 27. 2 7 A Automação 3 Quality Engineers
  28. 28. 2 8 A Automação Backlog exclusivo para QE
  29. 29. 2 9 A Automação Contém estórias para: - Melhorar estabilidade - Cobrir “gaps” - Manutenção de suites - Implementação de “sad paths”
  30. 30. 3 0 • O Projeto • Os Times • O Desenvolvimento • A Automação • > Os Ambientes • O Pipeline • O Deploy • Os Desafios • Considerações Finais Agenda
  31. 31. 3 1 Os Ambientes
  32. 32. 3 2 Os Ambientes
  33. 33. 3 3 Os Ambientes
  34. 34. 3 4 Os Ambientes
  35. 35. 3 5 • O Projeto • Os Times • O Desenvolvimento • A Automação • Os Ambientes • > O Pipeline • O Deploy • Os Desafios • Considerações Finais Agenda
  36. 36. 3 6 O Pipeline
  37. 37. 3 7 O Pipeline
  38. 38. 3 8 • O Projeto • Os Times • O Desenvolvimento • A Automação • Os Ambientes • O Pipeline • > O Deploy • Os Desafios • Considerações Finais Agenda
  39. 39. 3 9 O Deploy
  40. 40. 4 0 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. 41. 4 1 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. 42. 4 2 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. 43. 4 3 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. 44. 4 4 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. 45. 4 5 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. 46. 4 6 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. 47. 4 7 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. 48. 4 8 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. 49. 4 9 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. 50. 5 0 • O Projeto • Os Times • O Desenvolvimento • A Automação • Os Ambientes • O Pipeline • O Deploy • > Os Desafios • Considerações Finais Agenda
  51. 51. 5 1 Os Desafios Suites muito lentas
  52. 52. 5 2 Suites muitos lentas Saucelabs? Infra-estrutura para testes em paralelo?
  53. 53. 5 3 Falhas por comunicação com as APIs Baixo custo para replicar ambientes e criar novas contas
  54. 54. 5 4 Os Desafios Testes que falham aleatoriamente
  55. 55. 5 5 Testes que falham aleatoriamente Testes que não são confiáveis são piores que testes que sempre falham
  56. 56. 5 6 Testes que falham aleatoriamente A prioridade é o pipeline
  57. 57. 5 7 Testes que falham aleatoriamente “Non-blocking tests”
  58. 58. 5 8 Testes que falham aleatoriamente “Firefighter”
  59. 59. 5 9 Os Desafios Problemas do papel “Firefighter”
  60. 60. 6 0 Trabalho do “Firefighter” excedia o seu dia de apagar o incêndio Problemas do papel “Firefighter”
  61. 61. 6 1 Problemas do papel “Firefighter” Passou a ser o monitorador do pipeline
  62. 62. 6 2 Problemas do papel “Firefighter” Despedimos o “Firefighter”
  63. 63. 6 3 Problemas do papel “Firefighter” Pipeline é responsabilidade de quem fez merge
  64. 64. 6 4 Problemas do papel “Firefighter” Criação de estórias para corrigir testes instáveis
  65. 65. 6 5 Os Desafios Testes falham por problemas na comunicação com a API
  66. 66. 6 6 Falhas por comunicação com as APIs “Mock all the things!”
  67. 67. 6 7 Falhas por comunicação com as APIs Alto custo para programar mocks
  68. 68. 6 8 Falhas por comunicação com as APIs “Full stack” é desejável
  69. 69. 6 9 Falhas por comunicação com as APIs + contas + tentativas
  70. 70. 7 0 Os Desafios Quebrar funcionalidade em produção
  71. 71. 7 1 Quebrar funcionalidade em produção Pequenos múltiplos deploys facilitam identificação dos problemas
  72. 72. 7 2 Erros sérios são detectados por testes Quebrar funcionalidade em produção
  73. 73. 7 3 Re-deploy Quebrar funcionalidade em produção
  74. 74. 7 4 Deixamos até outro deploy se problema for pequeno Quebrar funcionalidade em produção
  75. 75. 7 5 “Root Cause Analysis” Quebrar funcionalidade em produção
  76. 76. 7 6 • O Projeto • Os Times • O Desenvolvimento • A Automação • Os Ambientes • O Pipeline • O Deploy • Os Desafios • > Considerações Finais Agenda
  77. 77. 7 7 Considerações Finais Design, testes manuais e validação são atividades externas
  78. 78. 7 8 Considerações Finais Story Branches + Feature Flags
  79. 79. 7 9 Considerações Finais Foco no testes Sem tratá-los religiosamente
  80. 80. 8 0 Considerações Finais DevOps!!!
  81. 81. 8 1 Referencias http://www.thoughtworks.com/pt/insights/blog/continuous- delivery-broken-builds-and-clean-conscience http://www.thoughtworks.com/radar/
  82. 82. 8 Q&A 8
  83. 83. 8 Muito Obrigado! 8 Lucas Medina @medinalucas

×