QConRio 2014 - Tutorial Iniciando Com Continuous Delivery

Preview:

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  

Palestrantes  

fabricio.leo�@gmail.com  

rodrigozrusso@gmail.com  

Palestrantes  

fabricio.leo�@gmail.com  

rodrigozrusso@gmail.com