Upload
rodrigo-russo
View
299
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Tutorial Iniciando Com Continuous Delivery apresentado na QConRio 2014
Citation preview
Fabricio Leotti | Rodrigo Russo
Agenda
h)p://agilemanifesto.org/principles.html h)p://manifestoagil.com.br/principios.html
Our highest priority is to sa;sfy the customer through early and con;nuous delivery
of valuable so=ware.
Nossa maior prioridade é sa;sfazer o cliente, através da entrega adiantada e conCnua de so=ware de valor.
h)p://agilemanifesto.org/principles.html h)p://manifestoagil.com.br/principios.html
O que é Con;nuous Delivery ?
O que é Con;nuous Delivery ?
O que é Con;nuous Delivery ?
O que é Con;nuous Delivery ?
O que é Con;nuous Delivery ?
“Continuous Delivery é uma atitude!” By John Smart
h)p://farm9.sta;cflickr.com/8030/8057947567_c82a02824b.jpg
The whole point of con;nuous delivery is that every check-‐in creates a poten;al release candidate. “ ”
Create a Repeatable, Reliable Process for Releasing so=ware #1
h)p://www.ridelust.com/wp-‐content/uploads/2010/11/ManualTransmission.jpg
Automate Almost Everything #2
h)p://2.bp.blogspot.com/-‐46RNdJb6Vkk/UTDkS6Zn9GI/AAAAAAAAAEc/2cvNLy9CWyY/s1600/Charles+Chaplin+filme+Tempos+Modernos.jpg
Keep Everything in Version Control #3
If it Hurts, Do it more frequently, and Bring the pain forward #4
h)p://m.cdn.blog.hu/ko/koczyblogja/image/piled-‐up-‐dishes-‐in-‐kitchen-‐sink.jpg
If it Hurts, Do it more frequently, and Bring the pain forward #4
h)p://m.cdn.blog.hu/ko/koczyblogja/image/piled-‐up-‐dishes-‐in-‐kitchen-‐sink.jpg
Build Quality In #5
“Não se gerencia o que não se mede, não se mede o que não se define,
não se define o que não se entende, e não há sucesso no que não se gerencia”
(William Edwards Deming)
Done Means Released #6
Everybody is Responsible for the Delivery Process #7
Con;nuous Improvement #8
h)p://2.bp.blogspot.com/-‐Po8jm5Rjca8/UXha4EXEcXI/AAAAAAAAHUM/858rzSlOVTw/s1600/evolu;on4fun.jpg
Algumas Ferramentas
Code quality
Source control
Infra as a code
CI Server
Binary repository
Dependency/Build tools
Ecossistema
Logging & Metrics
Orchestra;on
Build Data Repo
SCM
Build Provision Deploy Test Release
Ar;fact Repo Test Environment
CONTINUOUS INTEGRATION Fabricio Leotti | Rodrigo Russo
Princípios básicos • Maintain a code repository • Automate the build • Make the build self-‐tes;ng • Everyone commits to the baseline every day • Every commit (to baseline) should be built • Keep the build fast • Test in a clone of the produc;on environment • Make it easy to get the latest deliverables • Everyone can see the results of the latest build • Automate deployment
Princípios básicos
• Controle de versão
Princípios básicos
• Controle de versão • Prepare para a automação
Princípios básicos
• Controle de versão • Prepare para a automação • Faça, meça, corrija
Branching strategy
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Master branch
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
Branching strategy
• Howix
CI/CD Pipeline
CI/CD Pipeline
ptg
A Basic Deployment Pipeline
Figure 5.4 shows a typical deployment pipeline and captures the essence of the approach. Of course, a real pipeline will reflect your project’s actual process for delivering software.
Artifact repository
Source code
Commit stage
Compile Commit tests
Assemble Code analysis
reports binaries metadata
Acceptance stage
Configure environmentDeploy binaries
Smoke test Acceptance tests
Capacity stage
Configure environmentDeploy binaries
Smoke test Run capacity tests
UAT
Configure environmentDeploy binaries
Smoke test
Env & app
config
reports metadatabinaries
Production
Configure environmentDeploy binaries
Smoke test
Env & app
config
binariesreports metadata
Operationsperform
push-button releases
TestersSelf-service deploymentsDevelopers
See code metrics and test failures
Version control
Figure 5.4 Basic deployment pipeline
The process starts with the developers committing changes into their version control system. At this point, the continuous integration management system responds to the commit by triggering a new instance of our pipeline. The first (commit) stage of the pipeline compiles the code, runs unit tests, performs code analysis, and creates installers. If the unit tests all pass and the code is up to scratch, we assemble the executable code into binaries and store them in an artifact repository. Modern CI servers provide a facility to store artifacts like these and make them easily accessible both to the users and to the later stages in your pipeline. Alternatively, there are plenty of tools like Nexus and Artifactory which help you manage artifacts. There are other tasks that you might also run as part of the commit stage of your pipeline, such as preparing a test database to use for your acceptance tests. Modern CI servers will let you execute these jobs in parallel on a build grid.
111What Is a Deployment Pipeline?
Jenkins Pipeline
Code pull Build & Unit Tes1ng Build & Promote Package
Sta1c Analysis
Commit Stage
<Environment> Deployment
<Environment> Smoke Test
<Environment> Integra1on Test
<Environment> Acceptance Test
Acceptance Stage
<Environment> Load Test
<Environment> Performance Test
Capacity Stage
Deploy Binaries
Configure Environment
Produc1on
Smoke Test
Jenkins Pipeline
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Jenkins Pipeline
• Jenkins jobs
Pollmachine Pipeline
Você é realmente ágil ?
Fabricio Leotti | Rodrigo Russo
“Quanto tempo demora para a sua organização colocar em produção uma modificação de apenas uma
linha de código?” Mary Poppendieck e Tom Poppendieck
Lead ;me/ Cycle ;me / value stream
Lead ;me
Cycle ;me
Lead ;me/ Cycle ;me / value stream
Lead ;me
Cycle ;me
Melhoria conCnua… Faça, meça, corrija
Histórias • I – Independent | Independente entre outras histórias • N – Nego;able | Negociável com o cliente • V – Valuable | Valiosa para o cliente • E – Es;matable | Es;mável pela equipe • S – Sized Appropriately | Dimensionada apropriadamente
para ser desenvolvida (escopo) • T – Testable | Testável para melhor entendimento
Critérios de aceitação
Testes Automa;zados
Fabricio Leotti | Rodrigo Russo
Quadrante de testes ágeis Suporta a Equipe
Foco em Tecno
logia
Foco em Negócio
Cri;ca o Produto
Quadrante de testes ágeis Suporta a Equipe
Foco em Tecno
logia
Foco em Negócio
Cri;ca o Produto
Testes Funcionais Story Tests Protó;pos Exemplos Simulações
Testes Exploratórios Testes de Usuabilidade
Testes de aceitação do usuário Testes A/B
Testes unitários Testes de componentes Testes de Integração Testes de Sistemas
Testes de Desempenho Testes de Carga
Testes de Segurança Testes de Infraestrutura
Quadrante de testes ágeis Suporta a Equipe
Foco em Tecno
logia
Foco em Negócio
Cri;ca o Produto
Testes Funcionais Story Tests Protó;pos Exemplos Simulações
Testes Exploratórios Testes de Usuabilidade
Testes de aceitação do usuário Testes A/B
Testes unitários Testes de componentes Testes de Integração Testes de Sistemas
Testes de Desempenho Testes de Carga
Testes de Segurança Testes de Infraestrutura
Quadrante de testes ágeis Suporta a Equipe
Foco em Tecno
logia
Foco em Negócio
Cri;ca o Produto
Testes Funcionais Story Tests Protó;pos Exemplos Simulações
Testes Exploratórios Testes de Usuabilidade
Testes de aceitação do usuário Testes A/B
Testes unitários Testes de componentes Testes de Integração Testes de Sistemas
Testes de Desempenho Testes de Carga
Testes de Segurança Testes de Infraestrutura
BDD
Quadrante de testes ágeis Suporta a Equipe
Foco em Tecno
logia
Foco em Tecno
logia
Cri;ca o Produto
Testes Funcionais Story Tests Protó;pos Exemplos Simulações
Testes Exploratórios Testes de Usuabilidade
Testes de aceitação do usuário Testes A/B
Testes unitários Testes de componentes Testes de Integração Testes de Sistemas
Testes de Desempenho Testes de Carga
Testes de Segurança Testes de Infraestrutura
h)p://wa;rmelon.files.wordpress.com/2012/01/automatedtes;ngpyramid.png?w=604
so=ware tes;ng ice-‐cream cone An;-‐Pa)ern
h)p://wa;rmelon.files.wordpress.com/2012/01/so=waretes;ngicecreamconean;pa)ern.png
Se cada build é uma versão em potencial para ir para produção…
Como garan;r a qualidade ? h)p://www.rigastagweekend.com/img/ac;vi;es/ac;vi;es-‐Bungee_Jumping_From_A_Cable_Car-‐31365088466.jpg
Busca pela excelência
h)p://automo;va.com.ar/wp-‐content/uploads/2013/06/Motor-‐Renault-‐F1-‐2014-‐2.jpg
h)p://cdn.caradvice.com.au/wp-‐content/uploads/2013/06/renault-‐2014-‐f1-‐engine-‐4.jpg
Testes Unitários
h)p://www.f1fana;c.co.uk/wp-‐content/uploads/2013/06/renault-‐energy-‐f1.jpg
Testes de Integração de Componentes (grupo componentes dentro da aplicação)
h)p://2.bp.blogspot.com/-‐ZcHCWEl1c1U/UcQ-‐WI-‐LAhI/AAAAAAAAIwA/oTp2OmqigNw/s1600/COJ19833060506.JPG
Testes de Aplicação (Rodam em um container, porém há mocking com outras
aplicações)
Testes de Integração de Sistemas
Dependência externa
h)p://lowdownblog.files.wordpress.com/2013/05/f1-‐2013-‐monaco-‐ricciardo-‐toro-‐rosso.jpg
Testes de Funcionais de Aceitação
Smoke Test
Testes de Desempenho / Stress
Testes de Carga
• Testes manuais demoram muito tempo
Por que automação de testes é importante ?
• Testes manuais demoram muito tempo • Processos manuais são susceCveis a erro
Por que automação de testes é importante ?
• Testes manuais demoram muito tempo • Processos manuais são susceCveis a erro • Automação libera as pessoas para fazerem o seu melhor
Por que automação de testes é importante ?
• Testes manuais demoram muito tempo • Processos manuais são susceCveis a erro • Automação libera as pessoas para fazerem o seu melhor
• Testes de regressão automa;zados fornecem uma rede de segurança
Por que automação de testes é importante ?
• Testes manuais demoram muito tempo • Processos manuais são susceCveis a erro • Automação libera as pessoas para fazerem o seu melhor
• Testes de regressão automa;zados fornecem uma rede de segurança
• Testes automa;zados dão feedback rápido
Por que automação de testes é importante ?
• Testes manuais demoram muito tempo • Processos manuais são susceCveis a erro • Automação libera as pessoas para fazerem o seu melhor
• Testes de regressão automa;zados fornecem uma rede de segurança
• Testes automa;zados dão feedback rápido • Testes são ó;mas documentações
Por que automação de testes é importante ?
A Equipe é responsável pelos testes
Deployment e promoção
Fabricio Leotti | Rodrigo Russo
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Promoção de pacotes
Estratégias de deploy
• Indisponibilidade zero • Controle de acesso • Tomada de decisão baseada em evidência
Estratégias de deploy
h)p://ptgmedia.pearsoncmg.com/images/art_humble2_lowriskware/elementLinks/humble2_fig03.jpg
• Canary Release
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Estratégias de deployment
Deploy não deveria ser um evento!
Pequenos saltos evolu;vos
Rollback não é a morte
Existe um caminho para longe do deploy manual
Data Migration
Fabricio Leotti | Rodrigo Russo
O problema
Database Scrip;ng
Mudanças nos dados
Mudanças nos dados
Branching by Abstrac;on
Quando usar?
Como usar?
Como usar?
Como usar?
Como usar?
Como usar?
Como usar?
Como usar?
Feature Toggle
h)p://mar;nfowler.com/bliki/FeatureToggle.html
Feature Toggle
Feature Toggle
Iniciando com Continuous Delivery
Fabricio Leotti | Rodrigo Russo
How To? Baby steps
How To? Baby steps
Conhecer o panorama
How To? Baby steps
Conhecer o panorama
Entender as necessidades
How To? Baby steps
Conhecer o panorama
Entender as necessidades
Grupos de estudo e discussão
How To? Coragem
How To? Coragem
Quando algo der errado, não desista
How To? Controle de versão
TDD (mas sobretudo,
TESTES)
How To? Um ambiente de
cada vez
CI Server
O que você ganha com isso?
Feedback rápido
Lead ;me
Mais Qualidade
Menor Risco
40+ equipes 400+ jobs do Jenkins
System Engineers Devtools