9
/ 26 continuous deployment _ M - - - - - - - - - » - » » - - - - » - » » » » » Continuous Deployment - - - - - Começando com as práticas do Continuous Deployment

Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

/ 26

continuous deployment _

M !"#$% &!"'(#" (#$%)'% "'*+,&,-!#%)#% !+.,(/#01,2% $'-

3#/%'&#$%4-'!$%, %+1,2%.,*#/%#5'+#$%'/%5(,*'$$,$%)'%-'$"1,%, %'+-'+6#(!#%)'%$,."7#('2%)'!8#+),%#%'"#5#%)'%'+"('-#%9)'&!:'(;<%)'%$,."7#('$%5#(#%,$% $ 4(!,$%=-

+#!$% '/% $'- +),%5&#+,>%?+"('"#+",2% 5,(% )!:'($,$%/,-

"!:,$%'85,$",$%+'$"'%#("!-,2%'$$#%'"#5#%:'/%-#+6#+),%*#)#%:'@%/#!$%!/5,("A+*!#%'%#"'+01,>

B/#% )'&#$% :'/% ),% .#",% C '% #" #&/'+"'% #$% #5&!-*#0D'$% '$"1,%=*#+),% *#)#% :'@%/#!$% )!.E*'!$% )'% $'% !/-

5&#+"#(2%5,!$%'+:,&:'/%/ !"#$%*#/#)#$%'%#("'.#",$%)'%*,+=- (#01,>%F#)#%:'@%/#!$2%,% $,%)'%#5&!*#0D'$%*,/%#(C !"'" (#$% /#!$% $!/5&'$2% *,/,% *&!'+"'G$'(:!),(% , %$"#+)#&,+'2% :'/% )!/!+ !+),2% ,+)'% ,% ('$ &"#),% H% C '%/ !",% ),$% ('#!$% 5(,I&'/#$% $1,% !)'+"!=*#),$% $,/'+"'%C #+),%,%$,."7#('%'$"4%!/5&#+"#),%'/%#&- /%& -#(>

F,/% !$",2%5('*!$#/,$%)'% /%*,+3 +",%)'%5(4"!*#$%5#(#%*,&,*#(%#$%('&'#$'$%)'%$,."7#('%,%C #+",%#+"'$%+,%#/I!'+"'%)'%5(,) 01,%)'%/#+'!(#%*,+$!$"'+"'2%)!$5,-

+!I!&!@#+),%#$%('&'#$'$%*,/%/#!,(%.('C J+*!#%5#(#%C '%,$% $ 4(!,$%=+#!$%)J'/%,%.'')I#*K%,%/#!$%(45!),%5,$$E-:'&>%?2%5#(#%!$",2%H%!/5,("#+"'%# ",/#"!@#(%:4(!#$%"#('.#$%'+:,&:!)#$% +#% !/5&#+"#01,>% L,!$% $'% 5'($!$"!(/,$% *,/%/ !"#$%)'$$#$% "#('.#$%+#% .,(/#%/#+ #&2% "'('/,$% /#%5,"'+*!#&!@#01,%+#%,*,((J+*!#%)'%'((,$%6 /#+,$2%,+)'% /#%$!/5&'$%#&"'(#01,%+#%,()'/%)'%'8'* 01,%)#$%#"!-:!)#)'$%/#+ #!$%5,)'(4%-'(#(%('$ &"#),$%*#"#$"(M=*,$>

N$$!/2%H%3 $"#/'+"'%+'$$'%*,+"'8",%)'%+'*'$$!)#)'%C '%,%*,+"!+ , $%)'5&,;/'+"%:'/%+,$%# 8!&!#(>%O+)'2%)'% .,(/#% I'/% $!/5&'$% '% )!('"#2% *,+$!$"'% '/% 5(4"!*#$%C '%5,$$!I!&!"#/%C '%",),%*M)!-,%)'$'+:,&:!),2%'/% /%5(,3'",% )'% $,."7#('2% H% !/')!#"#/'+"'% &!I'(#),%5#(#% ,%#/I!'+"'%)'%5(,) 01,%)'%/#+'!(#%(45!)#%'%*,+$!$"'+"'>

P!#+"'% )!$",2% 5#(#% "'(/,$% /% 5(,*'$$,% )'% *,+"!-+ , $%)'5&,;/'+"%'=*!'+"'2%5('*!$#/,$%I $*#(%#"'+)'(%,$%$'- !+"'$%,I3'"!:,$Q%

» R,(+#(% *#)#% '"#5#% ),% 5(,*'$$,% 9I !&)2% "'$"!+-2%)'5&,;/'+"%'%('&'#$!+-<%:!$E:'&%#%",),$%,$%'+:,&-:!),$>

» L(,:'(%/'*#+!$/,$%)'% .'')I#*K% !/')!#",$%5#(#%5(,I&'/#$%,*,((!),$>%

» L'(/!"!(%C '%,%"!/'%$'3#%*#5#@%)'%!/5&#+"#(%C #&-C '(%:'($1,%),%$,."7#('%'/%C '$"1,2%'/%C #&C '(%#/I!'+"'%#"(#:H$%)'% /%5(,*'$$,%# ",/#"!@#),>

N%)!$*!5&!+#%)'%*,+"!+ , $%)'5&,;/'+"%H%/ !"#%'8-

"'+$#2%'+:,&:'+),%5(4"!*#$%C '%:1,%)'$"'%*,//!"%*6'-

*K2%!+"'-(#01,%*,+"E+ #2%#&'("#$%'/%"'/5,%('#&%'%*4&* &,%),%('",(+,%)'%!+:'$"!/'+",>%N$$!/2%'$"'%#("!-,%.#@% /#%I(':'%!+"(,) 01,%$,I('%*,/,%S5('5#(#(%,%"'(('+,T%5#(#%#% "!&!@#01,%)'%*,+"!+ , $%)'5&,;/'+"2%#"(#:H$%)'%#&- -

/#$%5(4"!*#$%*,/,Q% » '$"#I'&'*!/'+",%)#%* &" (#%)'%# ",/#01,%'%*,-

I'(" (#%)'%"'$"'$U% » # ",/#01,%),%I !&)%)#%#5&!*#01,U% » '8"'(+#&!@#01,%)#$%*,+=- (#0D'$%)'%#/I!'+"'$U% » # ",/#01,%),%5(,*'$$,%)'%/!-(#01,%)'%I#+*,%)'%

)#),$U% » !/5&#+"#01,%# ",/4"!*#%+,$%#/I!'+"'$V#&:,$U%% » #+4&!$'%)'%*# $#%'%'.'!",>

Continuous DeploymentN+"'$% )'% #5(,. +)#(/,$% +#$% 5(4"!*#$% )'% *,+"!-

+ , $% )'5&,;/'+"2% 5('*!$#/,$% '+"'+)'(% *&#(#/'+"'%,%C '%H% /%('&'#$'%)'%$,."7#('>%N%)!$*!5&!+#%)'%*,+"!-+ , $%)'5&,;/'+"%)!.'('%,%"'(/,%('&'#$'%5#(#%),!$%5W-

I&!*,$% )!$"!+",$2% "!/'% )'% )'$'+:,&:!/'+",% '% $ 4(!,$%=+#!$>% L#(#% ,% "!/'% )'% )'$'+:,&:!/'+",% )'% $,."7#('2%('&'#$'% $!-+!=*#% '8'* "#(% ,%5(,*'$$,%)'%,I"'+01,%),$%*M)!-,$V.,+"'$%/#!$%#" #&!@#),$2%I !&)2%"'$"'$%'%&!I'(#-

01,%),$%/'$/,$%+,%#/I!'+"'%)'%5(,) 01,>% X4%5#(#%,$% $ 4(!,$%=+#!$2%('&'#$'%$!-+!=*#%#C !&,%C '%'&'$%!(1,%:'(%+#%+,:#%:'($1,%),%$,."7#('>%

O%C '%,*,(('%H%C '%+,$%/H",),$% "(#)!*!,+#!$2% '$-"#$%) #$%)'=+!0D'$% $1,% . +)!)#$>%O %$'3#2%,$% $ 4(!,$%=+#!$%!(1,%:'(%#%+,:#%:'($1,%),%$,."7#('%#$$!/%C '%'&'%.,(%!/5&#+"#),%'/%5(,) 01,>%Y#$2%5#(#%!$",%#*,+"'*'(2%",)#$%#$%!/5&'/'+"#0D'$%34%)':'/%"'(%,*,((!),2%",),$%

Começando com as práticas do

Continuous DeploymentF,/,%#5&!*#(%5(4"!*#$%)'%*,+"!+ , $%)'5&,;/'+"%5#(#%/'&6,(#(%,%5(,*'$$,%4-!&%)'%)'$'+:,&:!/'+",2%'+"('-#+),%

$,."7#('$%(45!),$%'%*,+$!$"'+"'$>

Page 2: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

27 \

Breno Barros ([email protected]/Twitter @brenoobarros):

é bacharel em Ciência da Computação. Atualmente é arquiteto de soluções da Stefanini IT Solutions, onde atua como líder do Centro de Excelência SOA e do Escritório de Arquitetura e !"#$#%&'()*%+&,#%%-*.$#&/)0"*1/234)%&/#5#6&78,9:&78 :&;<,:&87=>:&89>&8#?-"*#.&@)%*(.)0&

(IBM e Oracle), dentre outras.

,$%"'$"'$%34%)':'(1,%"'(%$!),%'8'* "#),$%'/% /%#/I!'+-

"'%)'%6,/,&,-#01,2%5#(#%$,/'+"'%)'5,!$%)!$5,+!I!&!@#(%#%+,:#%:'($1,%),%$,."7#('%+,%#/I!'+"'%)'%5(,) 01,>%?/%$ /#2%,$% $ 4(!,$%=+#!$%#- #()#(1,%/ !",%"'/5,%5#(#% "!&!@#(%,%+,:,%$,."7#('>

?$$#%)'/,(#%+,%"'/5,%)'%)!$5,+!I!&!@#01,%)'% /#%('&'#$'%)'%$,."7#('%5#(#%,$% $ 4(!,$%=+#!$%H%:!$"#%*,/,%)'$5'()E*!,>%?/%5(,3'",%)'%)'$'+:,&:!/'+",%)'%$,."7#-

('2%'$$'$%)'$5'()E*!,$%$'%/#+!.'$"#/%)#%$'- !+"'%.,(/#Q » '$5'(#% ),% "H(/!+,% )'% ",),% ,% )'$'+:,&:!/'+",%

5#(#%"'$"#(%,%$,."7#('%'/%#/I!'+"'%)'%"'$"'$U » '$5'(#%)#$%*,(('0D'$%)'%I -$%,*,((!),$%+,$%#/-

I!'+"'$%)'%"'$"'$2%5#(#%('"'$"#(%+,:#/'+"'U » '$5'(#%5#(#%"'$"#(%,%$,."7#('%'/%#/I!'+"'%)'%6,-

/,&,-#01,U » '$5'(#% )'% *,(('0D'$% )'% I -$% ,*,((!),$% +,$% #/-

I!'+"'$%)'%6,/,&,-#01,2%5#(#%('"'$"#(%+,:#/'+-

"'U » '$5'(#%5#(#%/,+!",(#(%9"'$"#(<%,%$,."7#('%'/%#/-

I!'+"'%)'%5(,) 01,>%F,/,%5,)'%$'(%:!$",2%,$%"'$"'$%.'!",$%'/%#/I!'+"'%

)'%6,/,&,-#01,%+1,%"(#(1,%#%*'("'@#%),%$,."7#('%'$"#(%#5",%5#(#%(,)#(%5'(.'!"#/'+"'%+,%#/I!'+"'%)'%5(,) -

01,>% Z$$,%5,(C '2%+,(/#&/'+"'2%,%#/I!'+"'%)'%6,/,-

&,-#01,% +1,% H% /#% *M5!#% '8#"#% ),% #/I!'+"'% )'% 5(,-

) 01,>%?%-(#+)'%5#("'%),$%5(,I&'/#$%C '%,*,(('/%#,%!/5&#+"#(% /%$,."7#('%'/%#/I!'+"'%)'%5(,) 01,%+1,%H%*# $#)#%5,(%"('*6,$%)'%*M)!-,$%:!$E:'!$%#,$% $ 4(!,$%=+#!$% 9!/5&'/'+"#0D'$% )'% *,/5,+'+"'$% :!$ #!$2% 5,(%'8'/5&,<2%/#$%$!/%5,(%*M)!-,$%5('$'+"'$%+#$%*#/#)#$%)'%+'-M*!,$2%!+"'-(#01,%, %5'($!$"J+*!#$2%C '%*,+[!"#/%*,/% #$% *,+=- (#0D'$% ),% #/I!'+"'% 9#*'$$,% #% $'(:!0,$%)!$"(!I E),$2%#*'$$,%\%I#$'%)'%)#),$2%#*'$$,%#,%$!$"'/#%)'% #(C !:,$2% )'+"('% , "(,$<>% ?+"1,2% 5,(% C '%+1,% *,&,-

*#(%'$$'$%5'C '+,$%"('*6,$%)'%*M)!-,$%,%C #+",%#+"'$%'%,I"'(%,%.'')I#*K%,%/#!$%I(':'%5,$$E:'&2%/'$/,%$'/%,% $ 4(!,%=+#&%5'(*'I'(]

N$$!/2% ,% *,+"!+ , $% )'5&,;/'+"% 5('-#% C '% ",),%

*M)!-,%'$*(!",%H%# ",/#"!*#/'+"'%5,$",%'/%#/I!'+"'%)'% 5(,) 01,>% O % $'3#2% !$",% $!-+!=*#% C '% +M$% '$"#/,$%*,&,*#+),%'/%5(,) 01,%#5(,8!/#)#/'+"'%^_%)'%. +-

*!,+#&!)#)'$%+1,%:!$E:'!$%#,$% $ 4(!,$%=+#!$%'/%!+"'(-:#&,$%)'%"'/5,%* (",$>%Y!+!/!@#+),%#$$!/%#$%*6#+*'$%)'%-(#+)'$%*#"4$"(,.'$%5M$V!/5&#+"#01,>

N%/'&6,(%/#+'!(#%5#(#%*,/'0#(%#%#),"#(% /%5(,-

*'$$,%)'%*,+"!+ , $%)'5&,;/'+"%H%/#5'#(%,%#" #&%5(,-

*'$$,%)'%)'5&,;/'+"2%*,/%",)#$%#$%#"!:!)#)'$%/#+ #!$%'%# ",/#"!@#)#$% 9*#$,%6#3#<%5#(#%5,$"'(!,(/'+"'%5('-

5#(#(/,$%,%P'5&,;/'+"%L!5'&!+'%)'$'3#),>O% )'5&,;/'+"% 5!5'&!+'2% '/% &!+6#$% -'(#!$2% *,+$!$-

"'%'/% /#%('5('$'+"#01,%# ",/#"!@#)#%5#(#%'8'* "#(%",),%,%5(,*'$$,2%)'$)'%#%,I"'+01,%),$%*M)!-,$V.,+"'$%'/% /% ('5,$!"M(!,%)'% *M)!-,%#"H%#% ('#&%)!$5,+!I!&!@#-

01,%5#(#%,$% $ 4(!,$>%?/%$ /#2%,%)'5&,;/'+"%5!5'&!+'%H%#%'+*#(+#01,%)#$%)!$*!5&!+#$%)'%!+"'-(#01,%*,+"E+ #%'%-'('+*!#/'+",%)'%('&'#$'$%C '%+,$%5'(/!"'%:!$ #&!@#(%'%*,+"(,&#(%,%5(,-('$$,%)'%*#)#%/ )#+0#%*,/,%,%/,-

:!/'+",%)'%:'($D'$%)'%$,."7#('$%#"(#:H$%)'%:4(!,$%*,+-

3 +",$%)'%"'$"'$%'%!/5&#+"#0D'$%5#(#%,$% $ 4(!,$%=+#!$>%`#%=- (#% ^2% $'- '% /#% ('.'(J+*!#% )'% /%)'5&,;/'+"%5!5'&!+'>

`#%=- (#%^2%,%5(,*'$$,%!+!*!#%+,%/,/'+",%'/%C '%,$%)'$'+:,&:'),('$%('#&!@#/% /%*,//!"%),%$!$"'/#%)'%*,+"(,&'%)'%:'($D'$>%`'$"'%/,/'+",2%+,%'$"4-!,%^2% #$%W&"!/#$% :'($D'$% ),$% *M)!-,$V.,+"'$% $1,% ('* 5'(#)#$2%*,/5!&#),$%'%",),$%,$%"'$"'$%)'% +!)#)'%'8!$"'+"'$%$1,%'8'* "#),$>%`,%=+#&%)'$"'%'$"4-!,2%#$%/H"(!*#$%)'%C #&!-)#)'%),$%*M)!-,$%'%,$%('$ &"#),$%),$%"'$"'$%)'% +!)#)'$%$1,%)!$5,+!I!&!@#),$%5#(#%,% "!/'%)'%)'$'+:,&:!/'+",>%?2%*#$,%#$%/H"(!*#$%'%('$ &"#),$%),$%"'$"'$%"'+6#/%#"'+-

)!),%#%'85'*"#"!:#2%,$%I!+4(!,$%$1,%#(/#@'+#),$%'/% /%('5,$!"M(!,%)'%#("'.#",$%9"#&%*,/,%,%`'8 $<>%

X4%+,%'$"4-!,%a2%,$%I!+4(!,$%5(,) @!),$%+,%'$"4-!,%#+"'(!,(% $1,% # ",/#"!*#/'+"'% (' "!&!@#),$% 5#(#% !/-

5&#+"#01,%'/% /%#/I!'+"'%)'% "'$"'$2% *,/%#$%)':!)#$%5#(#/'"(!@#0D'$%.'!"#$%'2%5,(%=/2%$1,%'8'* "#),$%"'$"'$%

Continuous deployment consiste em um conjunto de práticas para criar e automatizar um processo de entrega de releases de forma 0)A)"BC)?&)&/#.1DC)?+&E%%#&A#$)&%)0&-"*?*F2$#&/#5#&G#052&$)&0)$-F*0&o esforço e desperdícios para esta atividade, bem como acelerar as entregas para os usuários. Este artigo visa apresentar como adotar algumas dessas práticas para iniciar a cultura de continuous de-ployment em seu ambiente de trabalho.

Page 3: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

/ 28

)'%. /#0#%9$/,K'%"'$"<%'%,$%"'$"'$%)'%#*'!"#01,>N%5#("!(%)'$"'%5,+",2% *#$,% ",),$%,$% "'$"'$% "'+6#/%

5#$$#),% *,/% J8!",2% ,$% I!+4(!,$% $1,% # ",/#"!*#/'+"'%!/5&#+"#),$% +,% #/I!'+"'% )'% 5(,) 01,% 5#(#% ,$% "'$"'$%'.'"!:,$>%?+"('"#+",2%*#$,%$'3#%/#!$%*,+:'+!'+"'2%#+"'$%)#%!/5&#+"#01,%'/%#/I!'+"'%)'%5(,) 01,2%5,)'%$'(%.'!-"#% /#%!/5&#+"#01,%'/%#/I!'+"'%)'%6,/,&,-#01,%'G, % /%#/I!'+"'%5#(#%"'$"'$%)'%*#5#*!)#)'2%"#!$%*,/,%*#(-#2%)!$5,+!I!&!)#)'%'%5'(.,(/#+*'>

F,+.,(/'% 5,)'% $'(% :!$",% +#% =- (#% ^2% ",),% ,% 5(,-

*'$$,% H% # ",/#"!@#),>% ?% $,/'+"'% #5M$% /% +,:,% *!*&,%)'%*,+"!+ , $%)'5&,;/'+"%H%C '%+,:,$%*M)!-,$V.,+"'$%$'(1,%!/5&#+"#),$>%N&H/%)!$$,2%)':'V$'%5(,* (#(%(' $#(%,$%I!+4(!,$%-'(#),$%+,%'$"4-!,%^2%#,%!+:H$%)'%('*,+$"( !(%9('VI !&)<%,$%*M)!-,$V.,+"'$%#%*#)#%'"#5#>%L,!$%!$$,%-#-

(#+"!(4%/#!$%*,+"(,&'%'%(#$"('#I!&!)#)'%)#$%/ )#+0#$%'%!+*('/'+",$%,*,((!),$>

b#&'%)'$"#*#(%C '%,%*,+"!+ , $%)'5&,;/'+"%+1,%+'-

*'$$#(!#/'+"'%:!$#%'&!/!+#(% ",)#$%#$% "#('.#$%6 /#+#$2%/#$% $!/2% -#(#+"!(% C '% 5,$$E:'!$% '((,$% $'3#/% )'"'*"#-

),$%'%#&'("#),$%)'%.,(/#%!/')!#"#%'%C '%#$%"#('.#$%/#!$%*,/5&'8#$%$'3#/%# ",/#"!@#)#$%)'%/#+'!(#%*,+=4:'!$%'%('5'"E:'&2%*,/%,%!+" !",%)'%,I"'(/,$%.'')I#*K%),%#/-

I!'+"'%)'%5(,) 01,2%/ +),%('#&2%,%/#!$%(45!),%5,$$E:'&>%c% ('*,/'+)4:'&%C '%,%5(,*'$$,%)'%*,+"!+ , $%)'-

5&,;/'+"% $'3#% .'!",% )'% .,(/#% ","#&/'+"'% # ",/#"!@#-

)#%#"H% /%5(,I&'/#%$'(%)'"'*"#),>%F#$,% /%5(,I&'/#%:'+6#% ,*,(('(2% ,$%/'/I(,$% ),% "!/'% 5('*!$#/% !/')!#-

"#/'+"'% $'(% '+:,&:!),$% 5#(#% )!#-+,$"!*#(% '% ('$,&:'(%,%5(,I&'/#>%F,/%!$",2%) (#+"'%'$"'% "'/5,2%,% "!/'%=*#%!/5,$$!I!&!"#),%)'%.#@'(%,%)'5&,;>%Z$$,%.#(4%C '%",),$%,$%/'/I(,$% ),% "!/'% "(#I#&6'/% '/% 'C !5'2% #&!+6#+),V$'%$,I('%,%,*,((!),2%*,/5#("!&6#+),%#$%$,& 0D'$%'%!+*'+"!-:#+),%C '%",),$%"(#I#&6'/%.,*#),$%+'$$#%/'"#%*,/ />

L,(H/2% #&*#+0#(% '$$'% +E:'&% )'% #-!&!)#)'% '%/#" (!-)#)'%+1,%H%.4*!&>%L#(#%#),"#(%*,+"!+ , $%)'5&,;/'+"%H%

+'*'$$4(!#%/ !"#%)!$*!5&!+#%'%*,+"(,&'%)'%C #&!)#)'%5#(#%#5&!*#(% /%(!-,(,$,%*,+3 +",%)'%+,(/#$%5#(#% ",)#$%#$%/ )#+0#$2% *,/% !+" !",% )'% ':!"#(% ('-('$$D'$2% !+"'(( 5-

0D'$%, %)#+,$%+#$%/H"(!*#$%)'%+'-M*!,$>P'$"#% .,(/#2% ('*,/'+)#/,$% C '% #+"'$% )'% *,&,*#(%

",),% ,% *M)!-,% '$*(!",% '/% #/I!'+"'% )'% 5(,) 01,2% $'3#%#5&!*#),%,%*,+*'!",%)'%&,"'$%)'%*,)!=*#01,>%O+)'%#%#"!-:!)#)'%)'%*,)!=*#01,%H%)!:!)!)#%'/%!+"'(:#&,$%)'%"'/5,%9^%, %a%6,(#$2%5,(%'8'/5&,<%'%#,%*6'-#(%+,%=+#&%)'$$'$%!+"'(:#&,$2% #$% W&"!/#$% :'($D'$% ),% *M)!-,% '8!$"'+"'$% +,%('5,$!"M(!,% )'% .,+"'$% $1,% *,&,*#),$% '/% 5(,) 01,>% O %$'3#2%*,+"!+ #/,$%&!I'(#+),%5, *#%C #+"!)#)'%)'%*M)!--,%5#(#%5(,) 01,2%/!+!/!@#+),%#$%*6#+*'$%)'%-(#+)'$%*#"4$"(,.'$%5M$V!/5&#+"#01,>

N&H/% )!$$,2% ('*,/'+)#/,$% +1,% "'+"#(% #&*#+0#(%^dd_%)'% # ",/#01,%)'$)'%,% !+E*!,>%b4% # ",/#"!@#+),%!+*('/'+"#&/'+"'%*#)#%'"#5#%),%$' %)'5&,;/'+"%5!5'-

&!+'2%5,!$%!$$,%#3 )#(4%#%'$"#I'&'*'(% /#%*,+=#+0#%+#$%5#("'$%# ",/#"!@#)#$%),%5(,*'$$,>

Continuous Integration, Continuous Deployment e Continuous Delivery

Y !",$% 5,)'/% *,+. +)!(% ,% "'(/,% *,+"!+ , $% )'-

5&,;/'+"% *,/% ,% *,+"!+ , $% !+"'-(#"!,+% '% *,+"!+ , $%)'&!:'(;2% *,/,% $'% .,$$'/% #% /'$/#% *,!$#>% ?+"('"#+",2%*#)#% /%),$%"'(/,$%$'%*,+$"!" !%'/%5(4"!*#$%)!$"!+"#$%'%*,/5&'/'+"#('$>%N$$!/2%,% *,+"!+ , $% !+"'-(#"!,+% "'/%*,/,% .,*,% # 8!&!#(% ,% "!/'% )'% )'$'+:,&:'),('$% +#% -#-

(#+"!#%)#%C #&!)#)'%'%*,+$!$"J+*!#%),$% !+*('/'+",$%)'%*M)!-,$% $ I/'"!),$% 5'&,$% )'$'+:,&:'),('$% 5#(#% ,% ('-

5,$!"M(!,%)'%*,+"(,&'%)'% .,+"'$2%#!+)#%'/%#/I!'+"'%)'%)'$'+:,&:!/'+",>

L,(%, "(,%&#),2%,%*,+"!+ , $%)'5&,;/'+"%#5(,:'!"#%,% ('$ &"#),% 9I!+4(!,$<%-'(#),%5'&,%*,+"!+ , $% !+"'-(#-

"!,+%'%:!$#%)!$5,+!I!&!@4V&,$%'/%#/I!'+"'%)'%5(,) 01,%5#(#%"'+"#(%#+"'*!5#(%5(,I&'/#$%C '%+,(/#&/'+"'%,*,(-

Figura 1. Referência de Deployment Pipeline.

Page 4: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

29 \

('/%$,/'+"'%+'$"'$%#/I!'+"'$>X4% ,% *,+"!+ , $% )'&!:'(;% )!.'('+*!#V$'% ),% *,+"!-

+ , $%)'5&,;/'+"% #5'+#$%5'&,% .#",%)'%+1,% *,&,*#(%,$%I!+4(!,$% )!('"#/'+"'% +,% #/I!'+"'% )'% 5(,) 01,>% Y#$%$!/2%)'!8#(%'$$'$%I!+4(!,$%$'/5('%)!$5,+E:'!$%5#(#%C '%#%4('#% $ 4(!#%, %)'%+'-M*!,%5,$$#/%)'%.,(/#%$!/5&'$%9'/%#5'+#$% /%*&!C '2%5,(%'8'/5&,<%)!$5,+!I!&!@#(%'$-$'$%I!+4(!,$%'/%5(,) 01,>%O %$'3#2%#,%!+:H$%)#%RZ%)'*!)!(%C #+),%,%+,:,%('&'#$'%'+"('%'/%5(,) 01,%9*,/,%,*,(-('%*,/%,%*,+"!+ , $%)'5&,;/'+"<2%H%#%4('#%)'%+'-M*!,%C '/%)'*!)'>

Primeiros Passos com Continuous Deployment

L#(#%!+!*!#(%#%#),01,%),%*,+"!+ , $%)'5&,;/'+"2%H%+'*'$$4(!,%#&- +$%5#$$,$%I4$!*,$Q

1. Estabeleça a cultura de automação e cobertu-ra de testes e garanta que ela seja mantida

N% *,I'(" (#% )'% "'$"'$% H% '$$'+*!#&% 5#(#% 6#I!&!"#(% ,%*,+"!+ , $%)'5&,;/'+"%5,(%) #$%(#@D'$%5(!+*!5#!$>%L(!-/'!(,2%'&#%5'(/!"'%/ )#(%,%*M)!-,%, %#)!*!,+#(%+,:#$%. +*!,+#&!)#)'$2% '+C #+",% -#(#+"!/,$% C '% ,$% *M)!-,$%#+"!-,$%+1,%.,(#/%C 'I(#),$%9"'$"'$%)'%('-('$$1,<2%)#+-

),% #% $'- (#+0#% "#+",% 5#(#% ,$% )'$'+:,&:'),('$% C #+",%5#(#%,$%$"#K'6,&)'($>%O%$'- +),%/,"!:,%H%C '%/!+!/!@#%#% +'*'$$!)#)'% )'% "'$"'$%/#+ #!$2% 5,!$% ,$%/'$/,$% )'-

5'+)'/%)#%)!$5,+!I!&!)#)'%)'%5(,=$$!,+#!$2%)'/#+)#/%/ !",%"'/5,%5#(#%('#&!@#01,%'%#!+)#%*,+"#/%*,/% /#%5(,I#I!&!)#)'%#&"#%)'%'((,$%, %)'$&!@'$%6 /#+,$2%-'(#+-

),%#$$!/%)'$5'()E*!,$%)'%"'/5,%'%(!$*,$%5#(#% /%5(,3'",%)'%$,."7#('>

F,/%!$",%,$%"'$"'$%# ",/#"!@#),$2%"#+",%)'% +!)#-

)'%C #+",%. +*!,+#!$2%)':'(1,%(,)#(%*,+"!+ #/'+"'%'/%I#*K-(, +)2%$'3#%#%*#)#%*,//!"%.'!",%, %'/%!+"'(:#&,$%5(')'=+!),$>%L,!$%*,/%!$",2%,%.'')I#*K%$'(4%!+$"#+"A+',%5#(#%,*,((J+*!#$%)'%'((,$%C '%)'5'+)#/%)'%#0D'$%('5'-

"!"E:'!$%5,(%5#("'%),$%"'$"#),('$2%5,(%'8'/5&,2%$,I(#+),%#$$!/%/#!$%"'/5,%5#(#%,$%/'$/,$%$'%)')!*#('/%#%"'$"'$%'85&,(#"M(!,$%, %/#!$%:,&"#),$%#,%+'-M*!,>

L#(#%!$",2%'8!$"'/%/ !"#$%.'((#/'+"#$%)'%!+"'-(#01,%*,+"E+ #2% *,/,% e )$,+2% X'+K!+$2% N5#*6'% F,+"!+ /2%F( !$'% F,+"(,&2% )'+"('% , "(#$2% C '% 5'(/!"'/% #% *,+=-

- (#01,% )'% -#"!&6,$% 9#% *#)#% *,//!"2% 5,(% '8'/5&,<% , %#-'+)#/'+",$%5#(#%'8'* 01,%),$%"'$"'$%# ",/#"!@#),$%*(!#),$>

2. Automatize a construção (build) da aplicação?$$#%#"!:!)#)'%H%$'/%)W:!)#%#%#"!:!)#)'%C '%#%/#!,-

(!#%34%('#&!@#>%?+"('"#+",2%'&#%'$"4%#C !%5#(#%&'/I(#(%)'%$ #%!/5,("A+*!#>%O%5(,*'$$,%)'%*,+$"( 01,%)#%#5&!*#01,2%5#(#%,% *,+"!+ , $%)'5&,;/'+"2%+1,%)':'% '+:,&:'(%+'-

+6 /#%#"!:!)#)'%/#+ #&>%L#(#% '$"#% # ",/#01,% ),% 5(,*'$$,% )'% *,+$"( 01,2%

'8!$"'/% :4(!#$% .'((#/'+"#$% "#/IH/2% "#!$% *,/,Q% N+"2%Y#:'+2%f(#)&'2%)'+"('%, "(#$>%L,(H/2%+'$"'%#("!-,2% !('-

/,$% .,*#(% +,% Y#:'+% a% 9:'3#% g'.'(J+*!#$<2% 5,!$% 5,$$ !% /#%$H(!'%)'%5& -V!+$%C '%.#*!&!"#/%#%#),01,%),%*,+"!-+ , $%)'5&,;/'+">

3. !"#$%&'()#*&+*,-%./0$&12#+*-*34!(3-*5-++6-vel

B/#%)#$%-(#+)'$%)!=* &)#)'$%'/%5('5#(#(% /%('-

&'#$'% )'% $,."7#('% 5#(#% )!$5,+!I!&!@#01,% '/% )!:'($,$%#/I!'+"'$2%$'/%#%+'*'$$!)#)'%)'%('*,/5!&#(%,$%*M)!-,$-V.,+"'$2%H%#%5#(#/'"(!01,%)'%!+.,(/#0D'$%*,/,Q%#*'$$,%#,%I#+*,%)'%)#),$2%ZL$%'$5'*E=*,$2%*,+=- (#0D'$%X`PZ2%)'+"('%, "(#$>

B/#%I,#%$,& 01,%5#(#%"(#"#(%'$$#%C '$"1,%H%,%F,+$-"('"",>%O%F,+$"('"",%H% /%.(#/'7,(K%5#(#%#*'$$,%#%)!-:'($,$% ('* ($,$% )'% *,+=- (#01,2% "#!$% *,/,% #(C !:,$%5(,5'("!'$2%#(C !:,$%)'% !+!*!#&!@#01,%'%#"H%/'$/,% X#:#%h'#+$>%N%-(#+)'%:#+"#-'/%),%F,+$"('"",%H%#%5,$$!I!&!)#-

)'%)'%/#(*#(%9"#-$<%5#(#%*#)#%'&'/'+",%)'%*,+=- (#01,2%*,+.,(/'%'8'/5&,%)#%i!$"#-'/%^>%

Listagem 1.%F,+=- (#01,%),%F,+$"('"",%+,%Y#:'+%a>%

[development] continuous.deployment.db =

jdbc:derby:target/db;create=true

[test] continuous.deployment.db =

jdbc:mysql://testserver/db

[production] continuous.deployment.db =

jdbc: mysql://production-server/db

F,+.,(/'%5,)'%$'(%:!$",%+#%i!$"#-'/%̂ 2%5,)'/,$%"'(% /%W+!*,%+,/'%5#(#%,%'&'/'+",%, %:#(!4:'&%)'% *,+=-

- (#01,2%'%'$5'*!=*#(%$' %:#&,(%5#(#%$'(% $#),%'/%)!.'-

('+"'$%#/I!'+"'$%9)'=+!),$%5'&#$%"#-$<>%N-,(#2%)':'/,$%#5'+#$%!+.,(/#(%#,%F,+$"('"",%C '%"#-%)':'(4%$'(% $#)#%5#(#%C '%#%#5&!*#01,%$'3#% !+!*!#)#%+,%#/I!'+"'V#&:,2%'%*,/%!$",%,%:#&,(%*,(('",%$'(4%'$*,&6!),%'/%"'/5,%)'%'8'-

* 01,>%`#%i!$"#-'/%a2%$'- '/%#$%*,+=- (#0D'$%)#$%)'5'+-

)J+*!#$%),%F,+$"('"",%*,/%,%Y#:'+%a>

!"#$%&'(")*"$!"+#,%-.!"/01$(2".#,#"03"!+.%4("-(5+#"6"

708.0+!"9::"#"(";::<" !"#$%&'(")=>".#,#"03"!+.%4("-(5+#"

?0!8%$!$#"$#"9#-.#-"@017%(1!%-"7(3"A#8#1%03>"2;#B!,#"

#"/!,#1<"C"!"#$%&'(")D"7(1.!"7(3"("!+.%4("-(5+#"E804%1-"

F!+!"G1.#4+!&'("H(1.I10!"7(3"("J0$-(1<

/para saber mais

!"#$%&'("*K"$!"+#,%-.!"/01$(2".#,#"03"!+.%4("-(5+#L"

M-!1$("("/!,#1"F!+!"3#8B(+!+"!"N0!8%$!$#"$(-"-#0-"

F+(O#.(-<

/para saber mais

Page 5: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

/ 30

Listagem 2. !"#$%&'()*" +" !"#,-'.--" #" /(0.# 12

<dependencies> ... <dependency> <groupId>org.constretto</groupId> <artifactId>constretto6api</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.constretto</groupId> <artifactId>constretto6core</artifactId> <version>1.1</version> <scope>runtime</scope> </dependency> ...</dependencies>

L#(#%'$"'%#("!-,2%#),"#/,$%#%*,+=- (#01,%),%F,+$-"('"",%:!#%,% .(#/'7,(K%j5(!+-2%*,+.,(/'%#%i!$"#-'/%k>%?+"('"#+",2%H%5,$$E:'&%*,+=- (#(%,%F,+$"('"",%'/%#5&!-*#0D'$%C '%+1,% "!&!@'/%,%.(#/'7,(K%j5(!+-%%9:'3#%g'-

.'(J+*!#$<>%

Listagem 3. !"#$%&'()*" +" !"#,-'.--" #" 34'5#% Framework.

<beans xmlns=http://www.springframework.org/sche-ma/beans

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns:constretto=http://constretto.org/schema/con-strettoxsi:schemaLocation=”http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://constretto.org/schema/constrettohttp://constretto.org/schema/constretto/constretto-1.2.xsd”> 67"#,-'.--"87"#$%&'(-5"#9 <constretto:stores> <constretto:properties-store> <constretto:resource locaion= :7;(,,4(-<84'"4.'-5.,=7"#$%24'"4.'-5.,>/> </constretto:properties-store> </constretto:stores> 6=7"#,-'.--"87"#$%&'(-5"#9</beans>

N-,(#2% *,/% #% #5&!*#01,% *,+=- (#)#% *,/% ,% F,+$-"('"",2%I#$"#%!+.,(/#(%5#(#%#%XbY%C #!$%"#-$%)':'(1,%$'(% "!&!@#)#$2%*,+.,(/'%i!$"#-'/%l>%`,%+,$$,%'8'/5&,%$!/-

5&'$2% "!&!@#/,$%#5'+#$% /#%W+!*#%"#->%F#$,%"'+6#/,$%/#!$%"#-$2%I#$"#%#*('$*'+"4V&#$%$'5#(#+),V#$%5,(%:E(- -

&#$>%

Listagem 4. Informando a JVM quais tags deverão ser utilizadas.

export CONSTRETTO_TAGS=development

ou

export CONSTRETTO_TAGS=development,<outras tags, caso existe>

4. Automatize o processo de migração de ban-co de dados

Y#!$%)!.E*!&%C '%#%"#('.#%)'%5('5#(#(% /%('&'#$'%)'%$,."7#('% 5#(#% )!:'($,$% #/I!'+"'$2% *,/% '8"'(+#&!@#01,%)'%*,+=- (#0D'$2%H%#%"#('.#%)'%/!-(#01,%)'%I#+*,%)'%)#-

),$%'/% $,%5'&#%#5&!*#01,%5#(#%:4(!,$%#/I!'+"'$>%O+)'2%"(#"#(%#$%)!:'($#$%:'($D'$%),$%$*6'/#$%'+"('%#$%I#$'$%)'%)#),$% )'% )'$'+:,&:!/'+",2% 6,/,&,-#01,% '% 5(,) 01,%#"(#:H$%)'%jmi%$*(!5"$%'8!-'%/ !",%* !)#),%5#(#%+1,%6#-

:'(%'((,$%6 /#+,$2%#&H/%)'%*,+$ /!(%/ !",%"'/5,%+,%*!*&,% )'% )'$'+:,&:!/'+",% )'% $,."7#('>% ?% !$",% )':'% $'(%# ",/#"!@#),>

m '/% 34% +1,% .'@% #$% $'- !+"'$% 5'(- +"#$Q% Sm #&% ,%$"#" $%),%I#+*,%)'%)#),$%+'$$#%/4C !+#]%m #&%,%$*6'-

/#%)'%)#),$%/#!$%#" #&%5#(#%#" #&!@#(%'$$#%!+$"A+*!#%),%I#+*,%)'%)#),$]T2% '/% /%5(,3'",%)'%)'$'+:,&:!/'+",%)'%$,."7#(']

L#(#% $#+#(% '$"#% )!=* &)#)'2% '8!$"'/% :4(!#$% .'((#-

/'+"#$%'%.(#/'7,(K$2%"#!$%*,/,Q%i!C !I#$'2%n&;7#;2%Y;-

h#"!$2%Y!-(#"'lX2%)'+"('%, "(#$>%L,(H/2%5#(#%'$"'%#("!-,2%.,*#('/,$%+,%n&;7#;>%O%n&;7#;%*,+$!$"'%'/%.(#/'7,(K%4-!&%5#(#%/!-(#01,%)'%I#$'%)'%)#),$2%*,/%:'($!,+#/'+-

",2%&!/5'@#%'%/!-(#0D'$%)'%$*6'/#$%# ",/4"!*,$2%(45!-)#%5(':'+01,%)'%!+*,+$!$"J+*!#%5#(#%+1,%5'(/!"!(%C '%#%#5&!*#01,%!+!*!'%*,/%5(,I&'/#$2% !+"'-(#01,%*,/%,%Y#-

:'+%a2%)'+"('%, "(#$%9:'3#%g'.'(J+*!#$<>O%n&;7#;%. +*!,+#%5#(#%,$%$*6'/#$%)'%I#+*,%)'%)#-

),$%)'%.,(/#%$'/'&6#+"'%*,/,%,$%/'*#+!$/,$%)'%*,+-

"(,&'%)'%:'($D'$%9$:+2%*:$2%-!"2%)'+"('%, "(,$<%. +*!,+#/%5#(#%,$%*M)!-,$V.,+"'$>%h#$!*#/'+"'2%'&'%*(!#%+#%!+$"A+-

*!#%),%I#+*,%)'%)#),$% #&:,% /#% "#I'&#%)'%/'"#)#),$2%)'+,/!+#)#% jFe?YNob?gjZO`2% C '% $'(4% $#)#% 5#(#%(#$"('#(%,%'$"#),%),%$*6'/#%)'%)#),$>%N%'$"( " (#%)#%"#-

I'&#%)'%/'"#)#),$%5,(%$'(%:!$"#%+#%=- (#%a>P (#+"'%,%I !&)2%,%n&;7#;%!(4%$*#+'#(%,$%*&#$$5#"6%

)#% #5&!*#01,% '/% I $*#% )'% !+$"( 0D'$% )'%/!-(#01,% 9, %/!-(#"!,+$<>%N,%&,*#&!@#(%'$$#$%!+$"( 0D'$%)'%/!-(#01,2%,%n&;7#;%!(4%*,+.(,+"4V&#$%*,/%#%"#I'&#%)'%/'"#)#),$>%F#$,%#%:'($1,%)#$%!+$"( 0D'$%)'%/!-(#01,%$'3#%/'+,(%, %!- #&% \$% )#% "#I'&#% )'%/'"#)#),$2% #$%/'$/#$% $'(1,% !--

+,(#)#$>%F#$,%*,+"(4(!,2%#$%!+$"( 0D'$%)'%/!-(#01,%$1,%'8'* "#)#$%5#(#%,%$*6'/#%)'%)#),$V#&:,%'%#%:'($1,%)#%"#I'&#%)'%/'"#)#),$%H%!+*('/'+"#)#>

O%n&;7#;%5,)'%"'(%'$$#$%!+$"( 0D'$%)'%/!-(#01,%"#+-

",%:!#%*&#$$'$% X#:#%C #+",%:!#% !+$"( 0D'$%jmi>%`,%*#$,%)'% "!&!@#01,% )'% *&#$$'$% X#:#2% #$% !+$"( 0D'$% )':'/% $'(%*(!#)#$%*,+.,(/'%'8'/5&,%)#%i!$"#-'/%p2%,+)'%,%+,/'%)#%*&#$$'%)':'%"'(%*,/,%5('=8,%#%:'($1,%)#%!+$"( 01,%)'%/!-(#01,%9$'5#(#)#%5,(% +)'($*,('<%'%#%)'$*(!01,%)#%!+$-

Page 6: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

31 \

!"#$%&'(&)*+!,#$%&-.(/,!,&/%!&'%*.&"0'(!.1%!(.23

Listagem 5. Exemplo de instrução de migração em classes java com Spring JDBC Suporte.

import !"#$%""%&'!"('$)*+,*$!"-'$#.%-,/."0$1,2,$

JavaMigration;import org.springframework.jdbc.core.JdbcTemplate;

public class V1_2__Another_user implements JavaMigration {

protected void migrate(JdbcTemplate jdbcTemplate) throws Exception { jdbcTemplate.execute(“INSERT INTO user (name) VALUES (‘brenobarros’)”); }}

4%&1,.%&'(& *0. !"#5(.&'(&)*+!,#$%&()&6789&'(:(-

)%.&1!*,!&.1!*/ .&;"(&/%'()&!(,<*=,!&)"',0#,.&>>8&, ?&)"',0#,.&'(&','%.3&@. (.&.1!*/ .&678&'(:()&.(!&%!+,0*-=,'%.&0%&/!%A( %&()&")&'*!( B!*%CD,.(9&1%0E%!)(&F+"!,&G3&H&/,'!$%&'(&0%)(01<, "!,&'(:(&.(!I&J!(FK%&L9&),*.&,&:(!.$%&',&*0. !"#$%&'(&)*+!,#$%9&,&'(.1!*#$%&-.(/,!,',&/%!&'%*.&"0'(!.1%!(.2&(&%&."FK%&3.;<3

Figura 3. Organização das instruções de migração SQL.

>(. ,& E%!),9& ,& +!,0'(& :,0 ,+()& ()& *0 (+!,!& ,&,/<*1,#$%&1%)&%& E!,)(M%!N&O<PM,P&?&;"(&%&)(.)%&*!Q&+,!,0 *!&;"(&,&,/<*1,#$%&(&%&.1R(),&'(&D,01%&'(&','%.&

(. ,!$%& .()/!(& 1%)/, S:(*.9& .()& *0 (!:(0#5(.& ),0"-

,*.3&H"&.(A,9&%&O<PM,P9&'"!,0 (&%&'(/<%P&',&,/<*1,#$%9&*!Q&1R(1,!&,&:(!.$%&'%&.1R(),&'%&D,01%&'(&','%.&(&,/<*1,!&," %), *1,)(0 (& ,.& )*+!,#5(.& 0(1(..Q!*,.& ,0 (.& ',&,/<*1,#$%&*0*1*,!3

T.& 8*. ,+(0.& U& (& V& )%. !,)& 1%)%& 1%0F+"!,!& %&O<PM,P&0%&W,:(0&X3

Listagem 6. 3"04%5-,67" (, ('8'0(90!., :&*+,* 0"

arquivo pom.xml.

<dependency> <groupId>!"#$%""%&'!"('$)*+,*</groupId> <artifactId>)*+,*;!"-'</artifactId> <version>1.4.2</version></dependency>

Listagem 7$ 3"04%5-,67" (" 8&5%;.0 :&*+,* 0" <,2'0

2.

<plugin> <groupId>!"#$%""%&'!"('$)*+,*</groupId> <artifactId>)*+,*;#,2'0;8&5%.0</artifactId> <version>1.4.2</version> =!"04%5-,/."0>

.... =?!"04%5-,/."0>

</plugin>

>(:()%.&+,!,0 *!&;"(&%&.(..*%0O,1 %!P&.(A,&(K(1"-

,'%&,/B.&%&O<PM,P9&/,!,&+,!,0 *!&,&1%)/, *D*<*','(&(0-

!(&,&,/<*1,#$%&(&%&.1R(),&'(&D,01%&'(&','%.3&Y%0E%!)(&8*. ,+()&Z3

Listagem 8. 3"04%5-,67" (" 8&5%;.0 :&*+,* 0" <,2'0

2.

<bean id=@)*+,*@ class=@!"#$%""%&'!"('$)*+,*$!"-'$:&*+,*@ init-method=”migrate”> <property name=”dataSource” ref=”...”/> ...</bean>

<bean id=”sessionFactory” class=”...” depends-on=@)*+,*@> ...</bean>

Figura 2. Estrutura da tabela de metadados.

Page 7: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

/ 32

J%!&/!(:(0#$%9& 1,.%& ,<+")&/!%D<(),&%1%!!,& '"!,0 (& ,&)*+!,#$%&/,!,&,&0%:,&:(!.$%&'%&.1R(),&'(&','%.9&?&!(1%-

)(0'Q:(<&;"(&,0 (.&',&(K(1"#$%&'(. (&/!%1(..%&"),&1B-

/*,9&%"&.0,/.R% 9&'%&.1R(),&,0 (!*%!&.(A,&1!*,'%3&J%*.&0,&/!Q *1,9&.1!*/ .&'(&'%M0+!,'(&;"(&(0:%<:()&,#5(.&'(.-

!" *:,.&- ,*.&1%)%&'!%/9&'(<( (9& !"01, (9&'(0 !(&%" !%.2&,1,D,)&0$%&, (0'(0'%&/%!&1%)/<( %9&!(."< ,0'%&0,&!(.-

,"!,#$%&'(&D,1N"/.3&J%!&(. (&)% *:%&?&;"(&%&O<PM,P&0$%& !,D,<R,& 1%)& .1!*/ .& '(&)*+!,#$%&'(&'%M0+!,'(9& %0'(&(<(& (0 ,&/!(:(0*!&;",*.;"(!&/!%D<(),.&'"!,0 (&,&:,<*-',#$%&'(&1%)/, *D*<*','(&(0 !(&%.&1B'*+%.&',&,/<*1,#$%&(&%&.1R(),&'(&D,01%&'(&','%.3

5. Implante automaticamente no ambiente-alvo[)/<,0 ,!&"),&,/<*1,#$%&0%& .(!:*'%!& '(& ,/<*1,#$%&

'(:(&.(!&"),& ,!(E,&EQ1*<&(&'(:(&.(!&(K(1" ,',&.()/!(3&J,!,&*. %9&?&*)/%! ,0 S..*)%&;"(&0%&/!%1(..%&'(&1%0 *-0"%".&'(/<%P)(0 &.(A,&1%0 ()/<,',&,& ,!(E,&'(&1%<%1,!&%.&D*0Q!*%.&',&,/<*1,#$%&0%&,)D*(0 (&'(.(A,'%9&0%!),<-)(0 (&0%&,)D*(0 (&'(&/!%'"#$%9&'(&E%!),&," %)Q *1,3

4(. (&1,.%9&"),&D%,&E(!!,)(0 ,&?&%&T/,1R(&Y,!+%&;"(&1%0.*. (&()&")&M!,//(!&/,!,&),0*/"<,!&.(!:*'%!(.&'(&,/<*1,#$%&\,:,&@@&-:(A,&),*.&()&](E(!^01*,.23&>*,0-

(&'*. %9&%&Y,!+%&/%..*D*<* ,9&(0 !(&%" !,.&1%*.,.I&[0*1*,!9&/,!,!&(&*0. ,<,!&"),&,/<*1,#$%&()&'*E(!(0 (.&.(!:*'%!(.&'(&,/<*1,#5(.&\,:,&@@&AQ&(K*. (0 (.9&%"&, ?&)(.)%&(K(1"-

,!&,&,/<*1,#$%&()&)%'%&. ,0'C,<%0(3Y%)%& (K()/<%& 0,& 8*. ,+()& _9& .(+"(& %& !(1R%& '(&

1%0F+"!,#$%&'%&Y,!+%&0%&W,:(0&X&/,!,&%&.(!:*'%!&T/,-

1R(&`%)1, &U3

Listagem 9. 3"04%5-,67" (" 3,-%" 0" <,2'0 A 8,-, "

servidor Tomcat 6.

<build> ... <plugins> <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.0</version> =!"04%5-,/."0>

<container> <containerId>tomcat6x</containerId> <type>remote</type> </container> =!"04%5-,/."0>

<type>runtime</type> <properties> <cargo.remote.username> </cargo.remote.username> <cargo.remote.password> </cargo.remote.password> <cargo.tomcat.manager.url> </cargo.tomcat.manager.url> </properties> =?!"04%5-,/."0>

=?!"04%5-,/."0>

</plugin> </plugins></build>

T/B.&,&1%0F+"!,#$%&',&8*. ,+()&_9&D,. ,&(K(1" ,!&%&1%),0'%&a):0&1,!+%I'(/<%Pb&(&%.&D*0Q!*%.&.(!$%&*)-

/<,0 ,'%.&0%&.(!:*'%!&'(&,/<*1,#5(.3H" !,&,< (!0, *:,&?&" *<*=,!&%&/<"+C*0&'%&\(0N*0.9&'(-

0%)*0,'%&>(/<%P&J<"+*0&-:(A,&](E(!^01*,.29&;"(&1%0.*.-

(&()&*)/<()(0 ,#$%&'%&T/,1R(&Y,!+%&/,!,&*)/<,0 ,!&,!;"*:%.&3M,!&(&3(,!&0%.&.(!:*'%!(.&'(&,/<*1,#5(.&-`%)-

1, 9& \c%..9& d<,..F.R& (& %" !%.2& 0%& F0,<& '%& /!%1(..%& '(&D"*<'3&L(A,&F+"!,&e3

J%!& /!(:(0#$%9& ?& !(1%)(0','%& ;"(& ()& 1%0A"0 %&1%)&%&>(/<%P&J<"+*0&.(A,&" *<*=,'%&%&/<"+C*0&Y%/P&T! *-E,1 &-:(A,&](E(!^01*,.23&J%*.&1,.%&,<+%&.,*,&(!!,'%9&?&/%.-

.S:(<&!(. ,"!,!&%&f< *)%&D*0Q!*%&;"(&(. ,:,&*)/<,0 ,'%&(&/%..*:(<)(0 (&(. Q:(<3&L(A,& (<,&'(&1%0F+"!,#$%&'(. (&/<"+C*0&0,&F+"!,&g3

Y%)%&!(1%)(0',#$%9&,0 (.&'(& *)/<,0 ,!&,&,/<*1,-

#$%&'*!( ,)(0 (&0%&,)D*(0 (&'(&/!%'"#$%9&?&"),&D%,&/!Q *1,& '*./%0*D*<*=,!& ,& ,/<*1,#$%& ()& ")& ,)D*(0 (& '(&/!?C/!%'"#$%&-%"&. ,+*0+23&@..(&,)D*(0 (&.(!:*!Q&1%)%&(K(!1S1*%&/,!,&+,!,0 *!&;"(&,&*)/<,0 ,#$%&0%&,)D*(0 (&'(&/!%'"#$%&.(A,&.(+"!,3&

J,!,&*. %9&(. (&,)D*(0 (&'(&/!?C/!%'"#$%&'(:(!Q&.(!&D()& .*)*<,!& ,%& ,)D*(0 (& '(& /!%'"#$%9& %"& ,%&)QK*)%&/%..S:(<9& *01<"*0'%& /!*01*/,<)(0 (& %.& )(.)%.& ','%.&/!(.(0 (.&0,.& *0. h01*,.&'(&D,01%&'(&','%.&'(&/!%'"-

#$%3&H0'(&*. %&?&/%..S:(<&:*,&.1!* /.&'(&!(/<*1,#$%&,+(0-

','%.&%"&, !,:?.&'(&E(!!,)(0 ,.9& ,*.&1%)%&%&>c](/<*-1, %!&-:(A,&](E(!^01*,.29&;"(&1%0.*. (&()&"),&,/<*1,#$%&A,:,&%/(0&.%"!1(&/,!,&1!*,#$%&'(&.1!*/ .9&F< !%.9&)(!+(&(&,+(0',)%.&'(&.*01!%0*=,#$%&(0 !(&*0. h01*,.&'(&','%.&R( (!%+^0(,.9&1%0E%!)(&*<". !,#$%&',&F+"!,&U3

6. !"#$%&'(&')*+%*'&'&,&$-.4%&/!%1(..%&'(&1%0 *0"%".&'(/<%P)(0 &,&, *:*','(&

),*.& *)/%! ,0 (& ?&'*,+0%. *1,!&)"* %&D()&,& 1,".,&'(&")&/!%D<(),&;"(&/%'(& (!&%1%!!*'%9&/,!,&;"(&(. (&0$%&:(0R,& ,1%0 (1(!& 0%:,)(0 (3& J%*.& +(!,<)(0 (& 0B.& (-

)%.&%&1%)/%! ,)(0 %&'(&.,*!&!(.%<:(0'%&%&/!%D<(),&(&/!%0 %3&H"&.(A,9&a,/,+,)%.&*01^0'*%.b&1%0 *0",)(0 (3&@&/,!,&*. %9&0$%&/!(1*.,)%.&'(&)"* ,&1%*.,3&i),&/!Q *1,&.*)/<(.&'(&,'% ,!&?&,&O*:(&jRP.&-1*01%&/%!;"^.29&%!*+*-0,'%&'%&W%'(<%&`%P% ,&'(&J!%'"#$%3&

Y%)&%&O*:(&jRP.9&;",0'%&,<+%&'Q&(!!,'%9&0$%&'(-

:()%.&/!%1"!,!&%&1"</,'%3&W,.&.*)9&:(!&;"(&(..(&a,<+%&(!!,'%b&?&"),&%/%! "0*','(&'(&,/!(0'*=,+()&/,!,& %'%&%& *)(3&T..*)9&,& ?10*1,&1%0.*. (&()&!(,<*=,!&,&/(!+"0-

,&aJ%!&;"(kb9&1*01%&:(=(.9&/,!,&1R(+,!&l&1,".,C!,*=&'%&/!%D<(),3

J,!,&(0 (0'(!)%.&)(<R%!&1%)%&,'% ,!&(..,&/!Q *1,9&.(+"(&")&(K()/<%&D()&.*)/<(.3&[),+*0(&;"(&,&!(<(,.(&'(&.%E M,!(&;"(&,1,D,)%.&'(&1%<%1,!&()&/!%'"#$%&1,*"3&4(. (&1,.%9&,&/!*)(*!,&1%*.,&?&1%<%1QC<%&0%&,!&0%:,)(0-

(3& O(* %& *..%9& ?& *)/%! ,0 (& .,D(!& ;"(& %& !,D,<R%& 0$%& (!)*0%"&,*0',3&L,)%.&,0,<*.,!&%&;"(&%1%!!("&(&/%!;"(&%1%!!("&',&.(+"*0 (&E%!),I

/0'#1(&2'(.'-$3&'4&25+!-*6'7.2'8+&'.'%.,-9*2&')*$+:

[O time responde] O processador do servidor chegou ao consumo de 100%.

/0' #1(&2' (.' -$3&' 4&25+!-*6' 7.2' 8+&' .' 42.)&%%*(.2'

Page 8: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

33 \

);&5.+'*'&%%&').!%+3.:

[O time responde] Tinha um trecho de código com um loop !"! #$%

/0' #1(&2'(.' -$3&'4&25+!-*6'7.2'8+&'&%%&')<($5.' ,.$'&%)2$-.:

[O time responde] Isso é um mistério. [risos]

/0'#1(&2'(.'-$3&'4&25+!-*6'7.2'8+&'!=.').!%&5+$3.%'>&2$?)*2'&%%&'3$%-@2$.:

[O time responde] Porque não tinha teste automatizado para essa funcionalidade.

/0'#1(&2'(.'-$3&'4&25+!-*6'7.2'8+&'!=.'&%)2&>&3.%'.'-&%-&'*+-.3*-$A*(.'4*2*'&%%*',+!)$.!*#$(*(&:

[O time responde] Porque o desenvolvedor era novo e não o treinamos nas práticas do BDD.

Y%)%&/%'(&.(!&:*. %9&%&),*.&*)/%! ,0 (&0(..(& */%&'(&!("0*$%&?&%&,/!(0'*=,'%&(&,&)(<R%!*,&'%&0%..%&/!%-

1(..%&(&0$%&a,/,+,!&*01^0'*%.b3&H"&.(A,9&'(:()%.&(0 !,!&0(..,&!("0*$%&1%)&,&:*.$%&'(&;"(&1,',&/!%D<(),&/%'(&.(!&/!(:(0*'%&(&;"(&(. (.&/!%D<(),.& .$%& 1,".,'%.&'(-

:*'%& E,<R,.&0%&/!%1(..%9&(&0$%&/%!& *01%)/( ^01*,.& *0-

'*:*'",*.3T..*)9&1%0.(+"*)%.&!,/*',)(0 (&*'(0 *F1,!&,&1,"-

.,& '%& /!%D<(),9& 0%& (K()/<%& (K/%. %3&T+%!,9& ()%.& ,.&

.(+"*0 (.&,#5(.&1%!!( *:,.Im3& 1!*,!&")&D,1N&"/&'%&.%E M,!(n

Figura 4.&'$!"()*+,-$&.$&/012$3&42)(5 !%

Figura 5.&'$!"()*+,-$&.$&'$13&6*# 7+8#&42)(5 !%

Figura 6.&902+:&.0&8$!"()*+,-$&.$&/;<012 8+#$*%

Page 9: Começando com as práticas do Continuous …...entregas para os usuários. Este artigo visa apresentar como adotar Este artigo visa apresentar como adotar algumas dessas práticas

/ 34

X3& 1!*,!&")& (. (&," %), *=,'%&;"(&'( (1 (&,&(K*.-

^01*,&'(..(&/!%D<(),9&/,!,&,<(! ,!&.(&(<(&!(,/,-

!(1(!nG3& 1%!!*+*!&%&1B'*+%&1%)&/!%D<(),ne3& ."D*!& %& 1B'*+%& /,!,& .*. (),& '(& 1%0 !%<(& '(& :(!-

.5(.ng3& (K(1" ,!& %& /!%1(..%& '(& '(/<%P)(0 & ," %)Q *1%&

0%:,)(0 (3@)&."),&(. ,&?&"),&/!Q *1,&)"* %&f *<9&(E( *:,&(&;"(&

0$%&/!(1*.,&'(&0(0R"),&E(!!,)(0 ,&/,!,&.(!&(K(1" ,',3&W,.9& .(& /"'(!)%.& !(+*. !,!& (..,.& /(!+"0 ,.& ()& ,#5(.&1%!!( *:,.&()&"),&/<, ,E%!),&M*N*&%"&*.."(9&.(!Q&(K1(-

<(0 (&/,!,&'*,+0B. *1%.&(& %),',.&'(&'(1*.5(.&E" "!,.3&&

Próximos passos para alcançar uma efetiva adoção do Continuous Deployment

T<?)&',.&/!Q *1,.&,/!(.(0 ,',.&,;"*9&/,!,&"),&(E(-

*:,& ,'%#$%& '%&Y%0 *0"%".&>(/<%P)(0 & ,<+"0.& %" !%.&/%0 %.&'(:()&.(!&<(:,'%.&()&1%0.*'(!,#$%3

H&/!*)(*!%&'(<(.&?&," %),#$%&'%.& (. (.&E"01*%0,*.3&J%*.& )(.)%& %.& (. (.& '(& "0*','(& .(0'%& *)/%! ,0 (.9&(<(.& ,/(0,.&+,!,0 ()&;"(&,& 1%)/<(K*','(& 1*1<%)Q *1,&'%&1B'*+%&(&%&1%)/%! ,)(0 %&'(.(A,'%&'(&1,',&1%)/%-

0(0 (& (. (A,& ., *.E, B!*%3& J%!?)9& ,.& !(+!,.& '(& 0(+B1*%&'*F1*<)(0 (&.$%&1%D(! ,.&/(<%& (. (.&'(&"0*','(3

Y%)&*. %9&?& !(1%)(0','%&;"(&%.& (. (.& E"01*%0,*.& ,)D?)&.%E!,)&"),&," %),#$%3&[. %&/%'(&.(!&E(* %&'(&E%!),& *01!()(0 ,<9& *0*1*,0'%C.(& 1%)& ,.& E"0#5(.& ),*.&".,',.&',&,/<*1,#$%& -<%+*0&(& <%+%" 9&/%!&(K()/<%29&'(-

/%*.& 1%)& ,.& 1%0."< ,.& (& F< !%.& ),*.& " *<*=,'%.& /(<%.&"."Q!*%.9&(&/%!&F)&,.&E"0#5(.&'(&*0.(!#$%9&, ",<*=,#$%&(&(K1<".$%&'(&*0E%!),#5(.3

H& .(+"0'%&/%0 %&?& (!)%.&,<(! ,.&()& ()/%& !(,<3&H0'(& )(.)%& 1%)& ")& '(/<%P)(0 & /*/(<*0(& (F1*(0 (9&(!!%.&/%'(!$%&,1%0 (1(!&(&E,<R,.&/%'(!$%&/,..,!3&@&)"*- ,.&',.&:(=(.9&1(! ,.& E,<R,.&.B&.(&),0*E(. ,)&R%!,.&%"&'*,.&,/B.&,&,/<*1,#$%& (!&.*'%&*)/<,0 ,',3&@&;",0'%&*. %&,1%0 (1(!9&.(&,1%0 (1(!9&'(:()%.&(. ,!&/!(/,!,'%.3&4%-

*F1,0'%& %'%.&%.&(0:%<:*'%.&*)('*, ,)(0 (3H& (!1(*!%& /%0 %& ?& 1%<( ,& '(&)? !*1,.& '(& 0(+B1*%9&

()&(./(1*,<&%& !( %!0%&'(& *0:(. *)(0 %&'%&/!%1(..%&'(&1%0 *0"%".&'(/<%P)(0 3&J%*.&*)/<()(0 QC<%&0$%&?&"),& ,!(E,&.*)/<(.3&H0'(&")&*0:(. *)(0 %&-(.E%!#%&(&1". %2&'(:(!Q&.(!&E(* %3&J%! ,0 %9&/!(1*.,)%.&.,D(!&*'(0 *F1,!&(&/!%:,!& .(&,&;",0 *','(&'(&/!%D<(),.&/B.C*)/<,0 ,#$%&'*)*0"S!,)9&%&;",0 %&*..%&!(."< %"&()&(1%0%)*,&'(&(.-

E%!#%&(&1". %&/,!,&!(.%<"#$%&'(&D"+.9&%&;",0 %&,")(0 %"&,&;",<*','(&'%.&,! (E, %.&'(&.%E M,!(.&/!%'"=*'%.&(&,&!(-

'"#$%&'%&S0'*1(&'(&'S:*',& ?10*1,9&%&;",0 %&'(& ()/%&E%*&!('"=*'%&0,&'*./%0*D*<*=,#$%&'(&")&0%:%&!(<(,.(&/,!,&%&"."Q!*%&(&1%)%&*..%&*0o"(01*%"&%&0(+B1*%&()&:,0 ,+(0.&1%)/( * *:,.&(&., *.E,#$%&'%.&"."Q!*%.&(&1<*(0 (.3

!"#$%&'()*+'$ ,#)%$H.&)? %'%.&'(&'(.(0:%<:*)(0 %&'(& .%E M,!(.9& .(-

A,)&(<(.&Q+(*.&%"& !,'*1*%0,*.9&E%1,)&)"* %&()&/!Q *1,.&'(& +(. $%& (& (0+(0R,!*,& '(*K,0'%& '(& <,'%& ,.& /!Q *1,.&

!"#$!%&'()#!*+,!-*./,!0*1)#2!3!45+6/+&5&7!-#)/.#128!

9#)/*()#!:5;6<*1#!9#)#*7#7!6=15&>=!?&/),@!A#76@!*+,!

-#B)52'#+6!C&65'*6/5+7D

!:6#.#+!E*12!?)*+F!3!A=#!05&1!:6#B7!65!6=#!GB/B=*+2D

!?)5>!,5!?1#+5!?*11578!=66B8HH<<<D(1#+5(*1157D+#6

!45+761#665!3!I&/JF!:6*16!E&/,#8!=66B8HHJ5+761#665DK/1*D

J5'H</F/H,/7B)*2H44HI&/JFL76*16L>&/,#

!CB*J=#!4*1>5!3!M*.#+!N!O)&>P/+8!=66B8HHJ*1>5DJ5,#=*&7D

51>HM*.#+NLB)&>/+

!0)2<*28!=66B8HHJ5,#D>55>)#DJ5'HBHQ2<*2H

!M2?*6/78!=66B8HH<<<D'2(*6/7D51>HK*.*D=6')

!M/>1*6#R"8!=66B8HH'/>1*6#RKD75&1J#;51>#D+#6H

!G1/J!9/#7!3!S=2!45+6/+&5&7!-#B)52'#+6T8!=66B8HH<<<D

76*16&B)#775+7)#*1+#,DJ5'HNUUVHUWH<=2PJ5+6/+&5&7P

,#B)52'#+6D=6')

!-#B)52!O)&>/+8!=66B78HH</F/DK#+F/+7PJ/D51>H,/7B)*2H

"GXYZX:H-#B)52LO)&>/+

!-?9#B)/J*6518!=66B8HH,(1#B)/J*651D51>

/referências

!"!#!$%&%"!"#!# &'(%"!)*+#,%#"%&%!-%-#,%#-+./0!"%-# !"!#+-#!1('%2/%-#,%# "+,3)*+4#$+1+#.+"1!#,%#+(/%"#.%%,(!-

$5-#'1%,'!/+-#,%# "+(&%1!-#63%#+$+""%1#-+1%2/%#2%-/!#'1 &!2/!)*+7#

8# !,+)*+# ,!-# "9/'$!-# ,%# $+2/'23+3-# ,% &+:1%2/#2+-# %"1'/%#!2/%$' !"#%;%2/3!'-# "+(&%1!-#,3"!2/%#31# "+$%--+#,%#,%-%2;+&;'1%2/+#,%#-+./0!"%4#!$%&%"!2,+#!#&'(%"!)*+#%1# '2/%";!&+-#,%# /%1 +#$3"/+-4#,%# %63%2+-#'2$"%1%2/+-#,%#$<,'=+-# !"!#63%#+-#3-39"'+-4#+3#$&'%2-

/%-4# +--!1#/%-/!"#'1%,'!/!1%2/%7#>#.!/+#,%#%-/!"1+-#&'-(%"!2,+# %63%2!-#!&/%"!)?%-#2+-#$<,'=+-#$+2/'23!1%2-

/%4#1'2'1'@!#!# "+(!('&',!,%#,%#+$+""A2$'!#,%#="!2,%-#'2$',%2/%-#B$!3-!,!-#2+"1!&1%2/%# +"#="!2,%-#13,!2-

)!-C4#%#$+2-%$3/';!1%2/%#2+#!31%2/+#,%#-!/'-.!)*+#,+-#3-39"'+-#D2!'-7

E%-/!# .+"1!4#$+1#31# "+$%--+#,%#,%-%2;+&;'1%2-

/+#,%#-+./0!"%#9='&4#"+(3-/+4#%-/9;%&#%#/"!263'&+4#+#/'1%# +,%"9#.+$!"#%1#1%&F+"'!-#$+2/G23!-#%1#-3!-# "9/'$!-#,%# ,%-%2;+&;'1%2/+4# %2-!"# '2+;!)*+# %# "%!&'@!"# %H %-

"'1%2/!)?%-7#I%-3&/!2,+#!--'14#%1#31!# "+,3/';',!,%#-3-/%2/9;%&7

J2/"%/!2/+4# 1%-1+# $+1# !&=31!-# "9/'$!-# ;'-/!-#2%-/%# !"/'=+# 63%# .!$'&'/!1# !# K "% !"!)*+# ,+# /%""%2+L# !"!# !,+)*+# ,+# $+2/'23+3-# ,% &+:1%2/4# !# 3/'&'@!)*+#,%-/!-# "9/'$!-#,%;%#-%"#(%1# &!2%M!,!#%#%H%$3/!,!#$+1#$!3/%&!7#N+'-4# +"#-%#/"!/!"#,%#!3/+1!)*+#,%# "+$%--+-4#-%#+# "+$%--+#,%#'1 &!2/!)*+#,%D2',+#%-/';%"#$+1# "+-

(&%1!-4#%--%-# "+(&%1!-#! !"%$%"*+#1!'-# "! ',!1%2/%#! <-#!#!3/+1!)*+4#=%"!2,+#31!#'2-!/'-.!)*+#%#'2-%=3-

"!2)!# +"# !"/%#,+-#3-39"'+-7