Do push para a produção: 
Os desafios de automação em Continuous Delivery 
Camilo Ribeiro 
Julio Maia
Camilo Ribeiro 
www.klarna.com
Klarna Checkout
Julio Maia 
www.soundcloud.com
Continuous Delivery 
Cada mudança aplicada a um sistema 
possa ser colocada em produção 
rapidamente... 
… e com tanta confiança quanto possível 
que irá funcionar
30-40% 
Investimento
50+% 
Retorno médio/longo prazo
Investimento em complexidade 
Linguagens de 
programação 
Ferramentas (IDE, build) 
Testes 
Refatoramentos 
Controle de versão 
Automação 
Integração contínua 
Maior maturidade, menos falhas 
Menor maturidade, mais falhas
Integração contínua
Build local 
Velocidade (acima de alguns 
minutos ele afeta a capacidade 
de desenvolvimento do time) 
Garantir que cada mudança é 
funcionalmente correta, mas 
não necessariamente confiável 
operacionalmente
Confiabilidade Funcional 
100% 
75% 
50% 
25% 
0% 
Local Estágio 1 Estágio 2 Estágio 3 
Build Pipeline
Build pipeline 
Geração de artefato binário 
(o qual será utilizado nos testes) 
Aumentar a confiabilidade da 
alteração progressivamente
Confiabilidade Operacional 
100% 
75% 
50% 
25% 
0% 
Local Estágio 1 Estágio 2 Estágio 3 
Build Pipeline
testes em ambiente 
code build controle 
versões 
build 
produção 
testes em ambiente 
integrado 
isolado 
testes em ambiente 
isolado 
Local 
Pipeline
Automação de testes 
Infra-estrutura de testes 
Automação de build 
Automação de deployment 
Monitoramento
Automação e infra-estrutura 
de testes
Testes de unidade 
Guiar o design do sistema 
Suportar refactorings
Testes de integração 
(funcionais, aceitação, etc.) 
Validar se o sistema se comunica 
corretamente com suas dependências 
externas e sob a expectativa dos 
usuários finais
http://www.soapui.org/Best-Practices/api-mocking.html
Testes de performance 
(performance, carga, stress) 
Validar se o sistema se comporta 
adequadamente quando é submetido a 
uma certa carga
Testes de deployment 
Validar que todos os componentes do 
sistema foram instalados e 
configurados corretamente 
Versões, portas, permissões, conectividade
TDD para infra-estrutura
Testes de versões 
Validam se a versão atual do sistema 
funciona contra a versão em produção e 
contra as versões em desenvolvimento 
das suas dependências
build 
produção 
testes em ambiente 
isolado 
testes em ambiente 
integrado 
testes em ambiente 
isolado 
testes em ambiente 
integrado 
Versões em 
desenvolvimento 
Versões em 
produção
Testes de segurança 
Auditam se os componentes do 
sistema não possuem vulnerabilidades 
conhecidas publicamente
https://www.owasp.org/images/f/f4/SkipFishReport.png
Monitoramento 
Healthchecks e telemetria
http://grafana.org
Conclusão 
Continuous delivery é uma otimização 
necessária para entregar valor da 
maneira mais rápida e barata possível 
Isso só é possível com investimento 
constante em testes e automação
www.klarna.com/jobs
www.soundcloud.com/jobs
Obrigado
Dúvidas

Do push para a produção: Os desafios de automação em Continuous Delivery