82
Continuous Delivery com o build quebrado sem remorso Lucas Medina @medinalucas Luiz Ribeiro @luizfar Jun 2013

Continuous delivery com o build quebrado sem remorso

Embed Size (px)

Citation preview

Page 1: Continuous delivery com o build quebrado sem remorso

Continuous Delivery com o build quebradosem remorso

Lucas Medina @medinalucas

Luiz Ribeiro @luizfar

Jun 2013

Page 2: Continuous delivery com o build quebrado sem remorso

2

Nós fazemos uma média de 5 deploys

para produção por dia

Page 3: Continuous delivery com o build quebrado sem remorso

3

Às vezes, mesmo que o build esteja

quebrado...

Page 4: Continuous delivery com o build quebrado sem remorso

4

Como assim?

Page 5: Continuous delivery com o build quebrado sem remorso

5

• > O Projeto

• Os Times

• O Desenvolvimento

• A Automação

• Os Ambientes

• O Pipeline

• O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 6: Continuous delivery com o build quebrado sem remorso

6

O Projeto

Painel de controle para Rackspace

Cloud Servers

Page 7: Continuous delivery com o build quebrado sem remorso

7

O Projeto

8-10K visitas únicas

diárias

Page 8: Continuous delivery com o build quebrado sem remorso

8

O Projeto

Thick client com Google Closure e

Knockout.js

Page 9: Continuous delivery com o build quebrado sem remorso

9

O Projeto

Thin backend com Django e Twist

Page 10: Continuous delivery com o build quebrado sem remorso

10

O Projeto

APIs públicas do Rackspace

Page 11: Continuous delivery com o build quebrado sem remorso

11

• O Projeto

• > Os Times

• O Desenvolvimento

• A Automação

• Os Ambientes

• O Pipeline

• O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 12: Continuous delivery com o build quebrado sem remorso

12

Os Times

5 times distribuídos em 2

localidades

Page 13: Continuous delivery com o build quebrado sem remorso

13

Os Backlogs

Kanban por time

Page 14: Continuous delivery com o build quebrado sem remorso

14

Os Times

Todos os times

trabalham na mesma

base de código e em

qualquer

funcionalidade

Page 15: Continuous delivery com o build quebrado sem remorso

15

Os Times

Qualquer “trabalho” entra no

backlog

Page 16: Continuous delivery com o build quebrado sem remorso

16

Os Times

Dev completo == Produção

Page 17: Continuous delivery com o build quebrado sem remorso

17

• O Projeto

• Os Times

• > O Desenvolvimento

• A Automação

• Os Ambientes

• O Pipeline

• O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 18: Continuous delivery com o build quebrado sem remorso

18

O Desenvolvimento

Page 19: Continuous delivery com o build quebrado sem remorso

19

O Desenvolvimento

Page 20: Continuous delivery com o build quebrado sem remorso

20

O Desenvolvimento

Page 21: Continuous delivery com o build quebrado sem remorso

21

O Desenvolvimento

Page 22: Continuous delivery com o build quebrado sem remorso

22

O Desenvolvimento

Page 23: Continuous delivery com o build quebrado sem remorso

23

O Desenvolvimento

Page 24: Continuous delivery com o build quebrado sem remorso

24

O Desenvolvimento

Page 25: Continuous delivery com o build quebrado sem remorso

25

• O Projeto

• Os Times

• O Desenvolvimento

• > A Automação

• Os Ambientes

• O Pipeline

• O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 26: Continuous delivery com o build quebrado sem remorso

26

A Automação

Testes de aceitação são parte

das estórias

Page 27: Continuous delivery com o build quebrado sem remorso

27

A Automação

3 Quality

Engineers

Page 28: Continuous delivery com o build quebrado sem remorso

28

A Automação

Backlog exclusivo

para QE

Page 29: Continuous delivery com o build quebrado sem remorso

29

A Automação

Contém estórias para:

- Melhorar estabilidade

- Cobrir “gaps”

- Manutenção de suites

- Implementação de “sad paths”

Page 30: Continuous delivery com o build quebrado sem remorso

30

• O Projeto

• Os Times

• O Desenvolvimento

• A Automação

• > Os Ambientes

• O Pipeline

• O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 31: Continuous delivery com o build quebrado sem remorso

31

Os Ambientes

Page 32: Continuous delivery com o build quebrado sem remorso

32

Os Ambientes

Page 33: Continuous delivery com o build quebrado sem remorso

33

Os Ambientes

Page 34: Continuous delivery com o build quebrado sem remorso

34

Os Ambientes

Page 35: Continuous delivery com o build quebrado sem remorso

35

• O Projeto

• Os Times

• O Desenvolvimento

• A Automação

• Os Ambientes

• > O Pipeline

• O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 36: Continuous delivery com o build quebrado sem remorso

36

O Pipeline

Page 37: Continuous delivery com o build quebrado sem remorso

37

O Pipeline

Page 38: Continuous delivery com o build quebrado sem remorso

38

• O Projeto

• Os Times

• O Desenvolvimento

• A Automação

• Os Ambientes

• O Pipeline

• > O Deploy

• Os Desafios

• Considerações Finais

Agenda

Page 39: Continuous delivery com o build quebrado sem remorso

39

O Deploy

Page 40: Continuous delivery com o build quebrado sem remorso

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/

Page 41: Continuous delivery com o build quebrado sem remorso

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.

Page 42: Continuous delivery com o build quebrado sem remorso

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

Page 43: Continuous delivery com o build quebrado sem remorso

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.

Page 44: Continuous delivery com o build quebrado sem remorso

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

Page 45: Continuous delivery com o build quebrado sem remorso

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.

Page 46: Continuous delivery com o build quebrado sem remorso

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

Page 47: Continuous delivery com o build quebrado sem remorso

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].

Page 48: Continuous delivery com o build quebrado sem remorso

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

Page 49: Continuous delivery com o build quebrado sem remorso

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

Page 50: Continuous delivery com o build quebrado sem remorso

50

• O Projeto

• Os Times

• O Desenvolvimento

• A Automação

• Os Ambientes

• O Pipeline

• O Deploy

• > Os Desafios

• Considerações Finais

Agenda

Page 51: Continuous delivery com o build quebrado sem remorso

51

Os Desafios

Suites muito lentas

Page 52: Continuous delivery com o build quebrado sem remorso

52

Suites muitos lentas

Saucelabs?

Infra-estrutura para testes em

paralelo?

Page 53: Continuous delivery com o build quebrado sem remorso

53

Falhas por comunicação com as APIs

Baixo custo para replicar

ambientes e criar novas contas

Page 54: Continuous delivery com o build quebrado sem remorso

54

Os Desafios

Testes que falham aleatoriamente

Page 55: Continuous delivery com o build quebrado sem remorso

55

Testes que falham aleatoriamente

Testes que não são confiáveis

são piores que testes que

sempre falham

Page 56: Continuous delivery com o build quebrado sem remorso

56

Testes que falham aleatoriamente

A prioridade é o pipeline

Page 57: Continuous delivery com o build quebrado sem remorso

57

Testes que falham aleatoriamente

“Non-blocking tests”

Page 58: Continuous delivery com o build quebrado sem remorso

58

Testes que falham aleatoriamente

“Firefighter”

Page 59: Continuous delivery com o build quebrado sem remorso

59

Os Desafios

Problemas do papel “Firefighter”

Page 60: Continuous delivery com o build quebrado sem remorso

60

Trabalho do “Firefighter” excedia o

seu dia de apagar o incêndio

Problemas do papel “Firefighter”

Page 61: Continuous delivery com o build quebrado sem remorso

61

Problemas do papel “Firefighter”

Passou a ser o monitorador do

pipeline

Page 62: Continuous delivery com o build quebrado sem remorso

62

Problemas do papel “Firefighter”

Despedimos o “Firefighter”

Page 63: Continuous delivery com o build quebrado sem remorso

63

Problemas do papel “Firefighter”

Pipeline é responsabilidade de

quem fez merge

Page 64: Continuous delivery com o build quebrado sem remorso

64

Problemas do papel “Firefighter”

Criação de estórias para corrigir

testes instáveis

Page 65: Continuous delivery com o build quebrado sem remorso

65

Os Desafios

Testes falham por problemas na

comunicação com a API

Page 66: Continuous delivery com o build quebrado sem remorso

66

Falhas por comunicação com as APIs

“Mock all the things!”

Page 67: Continuous delivery com o build quebrado sem remorso

67

Falhas por comunicação com as APIs

Alto custo para programar mocks

Page 68: Continuous delivery com o build quebrado sem remorso

68

Falhas por comunicação com as APIs

“Full stack” é desejável

Page 69: Continuous delivery com o build quebrado sem remorso

69

Falhas por comunicação com as APIs

+ contas

+ tentativas

Page 70: Continuous delivery com o build quebrado sem remorso

70

Os Desafios

Quebrar

funcionalidade

em produção

Page 71: Continuous delivery com o build quebrado sem remorso

71

Quebrar funcionalidade em produção

Pequenos múltiplos deploys

facilitam identificação dos

problemas

Page 72: Continuous delivery com o build quebrado sem remorso

72

Erros sérios são detectados por

testes

Quebrar funcionalidade em produção

Page 73: Continuous delivery com o build quebrado sem remorso

73

Re-deploy

Quebrar funcionalidade em produção

Page 74: Continuous delivery com o build quebrado sem remorso

74

Deixamos até outro deploy se

problema for pequeno

Quebrar funcionalidade em produção

Page 75: Continuous delivery com o build quebrado sem remorso

75

“Root Cause Analysis”

Quebrar funcionalidade em produção

Page 76: Continuous delivery com o build quebrado sem remorso

76

• O Projeto

• Os Times

• O Desenvolvimento

• A Automação

• Os Ambientes

• O Pipeline

• O Deploy

• Os Desafios

• > Considerações Finais

Agenda

Page 77: Continuous delivery com o build quebrado sem remorso

77

Considerações Finais

Design, testes manuais e

validação são atividades

externas

Page 78: Continuous delivery com o build quebrado sem remorso

78

Considerações Finais

Story Branches

+

Feature Flags

Page 79: Continuous delivery com o build quebrado sem remorso

79

Considerações Finais

Foco no testes

Sem tratá-los

religiosamente

Page 80: Continuous delivery com o build quebrado sem remorso

80

Considerações Finais

DevOps!!!

Page 82: Continuous delivery com o build quebrado sem remorso

82

MuitoObrigado!

82

Lucas Medina @medinalucas

Luiz Fernando Ribeiro @luizfar