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
“ 
The 
whole 
point 
of 
con;nuous 
delivery 
is 
that 
every 
check-­‐in 
creates 
a 
poten;al 
release 
candidate. 
” 
h)p://farm9.sta;cflickr.com/8030/8057947567_c82a02824b.jpg
Create 
a 
Repeatable, 
Reliable 
Process 
for 
Releasing 
so=ware 
#1 
h)p://www.ridelust.com/wp-­‐content/uploads/2010/11/ManualTransmission.jpg
Automate 
#2 
Almost 
Everything 
h)p://2.bp.blogspot.com/-­‐46RNdJb6Vkk/UTDkS6Zn9GI/AAAAAAAAAEc/2cvNLy9CWyY/s1600/Charles+Chaplin+filme+Tempos+Modernos.jpg
Keep 
Everything 
#3 
in 
Version 
Control
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
#5 Build 
Quality 
In 
“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)
#6 Done 
Means 
Released
Everybody 
is 
Responsible 
for 
the 
Delivery 
Process 
#7
#8 Con;nuous 
Improvement 
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 
Test 
Environment 
Orchestra;on 
Build 
Data 
Repo 
SCM 
Ar;fact 
Repo 
Build 
Provision 
Deploy 
Test 
Release
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
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. 
CI/CD 
Pipeline 
Testers 
Self-service 
Developers deployments 
Artifact repository 
Source 
code 
Commit stage 
Compile 
Commit tests 
Assemble 
Code analysis 
reports 
binaries 
metadata 
Acceptance stage 
Configure environment 
Deploy binaries 
Smoke test 
Acceptance tests 
UAT 
Configure environment 
Deploy binaries 
Smoke test 
Capacity stage 
Configure environment 
Deploy binaries 
Smoke test 
Run capacity tests 
Env & 
app 
config 
reports 
binaries metadata 
Production 
Configure environment 
Deploy binaries 
Smoke test 
Env & 
app 
config 
binaries 
reports 
metadata 
Operations 
perform 
push-button 
releases 
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
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 
Capacity 
Stage 
<Environment> 
Performance 
Test 
<Environment> 
Load 
Test 
Produc1on 
Configure 
Environment 
Deploy 
Binaries 
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 
Tecnologia 
Foco 
em 
Negócio 
Cri;ca 
o 
Produto
Quadrante 
de 
testes 
ágeis 
Suporta 
a 
Equipe 
Foco 
em 
Tecnologia 
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 
Tecnologia 
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 
Tecnologia 
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 
Tecnologia 
Foco 
em 
Tecnologia 
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
Testes 
de 
Integração 
de 
Componentes 
(grupo 
componentes 
dentro 
da 
aplicação) 
h)p://www.f1fana;c.co.uk/wp-­‐content/uploads/2013/06/renault-­‐energy-­‐f1.jpg
Testes 
de 
Aplicação 
(Rodam 
em 
um 
container, 
porém 
há 
mocking 
com 
outras 
aplicações) 
h)p://2.bp.blogspot.com/-­‐ZcHCWEl1c1U/UcQ-­‐WI-­‐LAhI/AAAAAAAAIwA/oTp2OmqigNw/s1600/COJ19833060506.JPG
Testes 
de 
Integração 
de 
Sistemas 
Dependência 
externa
Testes 
de 
Funcionais 
de 
Aceitação 
h)p://lowdownblog.files.wordpress.com/2013/05/f1-­‐2013-­‐monaco-­‐ricciardo-­‐toro-­‐rosso.jpg
Smoke 
Test
Testes 
de 
Desempenho 
/ 
Stress
Testes 
de 
Carga
Por 
que 
automação 
de 
testes 
é 
importante 
? 
• 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
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 
• Canary 
Release 
h)p://ptgmedia.pearsoncmg.com/images/art_humble2_lowriskware/elementLinks/humble2_fig03.jpg
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 
rodrigozrusso@gmail.com 
fabricio.leo@gmail.com
Palestrantes 
rodrigozrusso@gmail.com 
fabricio.leo@gmail.com
QConRio 2014 - Tutorial Iniciando Com Continuous Delivery
QConRio 2014 - Tutorial Iniciando Com Continuous Delivery

QConRio 2014 - Tutorial Iniciando Com Continuous Delivery