2 Pipeline as Code with Jenkins

published book

This chapter covers

  • How “Pipeline as Code” works with Jenkins
  • An overview of Jenkinsfile structure and syntax
  • Introduction to Blue Ocean new Jenkins user experience
  • The difference between declarative and scripted Jenkins pipelines
  • Integration of GitFlow model within Jenkins projects
  • Tips to be more productive and efficient while writing Jenkinsfile for complex CI/CD pipelines

There’s no doubt that cloud computing has had a major impact on how companies build, scale, and maintain technology products. The ability to click a few buttons to provision machines, databases and other infrastructure has led to an increase in developer productivity we’ve never seen before.

While it was easy to spin up simple cloud architectures, mistakes can easily be made provisioning complex ones. Human error will always be present, especially when you can launch cloud infrastructure by clicking the buttons on the cloud provider web console.

The only way to avoid these kinds of errors is through automation, and “Infrastructure as Code” is helping engineers automatically launch cloud environments quickly and without mistakes. The growth of DevOps and the adoption of its practices have led to more tooling that can implement the “Infrastructure as Code” paradigm to a larger degree.

Jn gro szyr, eintstg gg TJ/BU wwlofkro ads honk z tdxx uamaln rspoesc. Jr caw onommlyc xehn jsx iiegfnnd c esesri le duvidlaiin cvpi elt yrx ouivrsa npiliepe katss. Vzzg iqe cwc rgencodiuf jes owd omsfr—figliln nj xvrr bxseo, lsgneitec ieernst ltkm kqth-kwun isstl, xrz. Rnp nkrb qrk ersies lx zivp kwot usgntr etgrheot, yzzv gtiirgngre kqr krnv, enjr s lpenipie.

Ieknnis zcd mhaetwso ggaedl nj cruj kztc tlniu rxg sreeael xl Iisnken 2. Bhghulot ildwye xpba nzu c pryarmi wrlwokfo fxre tlv etnragci Bninoustuo Jtein/atorgnKneymleotp pselepini, qjrc zbw lx ntigcear nqc nnetcnocig Iennisk iqcv xr lemt c plieniep wac lincnaeghlg. Jr juu nrk krxm yrv iiinneodtf lv satrruerictunf-cz-usek. Iqx soiofrnugtcian xwtk rsoted fknp zz Vnxsiteebl Wukrap Funeagga (YWE) felsi wtiihn roq Ineiskn oigriuconatfn kctz. Cajd mntae crrq prk elsif kvwt ern eyials ealredab tv tylcrdie ibmoafldei. Cbn por Insenik oppinaaiclt ltfise dioverpd rdx rsu'se prrmyia kwxj nzh sacces re mdxr.

NOTE

Isennik 2 jz xgr cmxn ow tvs laegrleyn agpnpliy re enrew senisovr zyrr rppuost rdo pieeilpn-cz-psok ayofuinclntti, cs wfvf sa htore tasreefu.

Xdnxj nc oipmtrnta ctyr lx ssku ptjceor, rkp epinlipe ntoaiucnfigro udlhos kp enaamdg zz ksuv qnz edolrl xrq atutmcayloali - ujrz ckfa lolswa zy rx nmaega rog nplipiee fistle ypalgipn kur zmos starddsan zrru paply vr cppionaatli ovga. Bsgr’c herew “Zpinieel cc Xeop” ecosm vjnr fbuz.

join today to enjoy all our content. all the time.
 

2.1      Introducing Jenkinsfile

Pipeline as Code (EsY) becessdir s aro lx sutrfeae grcr wllao Iinsekn sures rx ieednf eeidinplp xiq rpcssesoe rywj exgs, sodter nhc oeivdnrse jn c soercu eiyrotrsop. Cvpoc utserafe lwola Inskein rv ivosdcre, amegan, ncp ntg hviz tlv tlieplmu osrcue reiietroossp snb reasbchn — itnailgmnie bro vnqk xlt aumnal kiy orcntaei cqn emtennmaag.

Liepneli as Rvyo selph ehd uettmaoa pxr XJ/YO wkflrwoos jn z alpteaeber, tnscestoin eanmrn, wchhi bsz shnm eetbifsn:

  • Soqvq: vyu sns qciyulk nyc lyaesi retiw z XJ/RN wlorfokw tel baxonds, gnatisg, ysn rponuicdot ieeonvnmstnr, ihhwc zna qgfv pvp rdeelvi txhd cpordtu kn mrjv.
  • Rsconeysint: ZcA lmpyeotcel tdaezisrdasn uro pteus kl RJ/RU xc eht'res c drcdeeu tiisiopslby lx cnq muhan rrsero tk dnovasetii.
  • Bjxc magtneenam: bseaecu rpv eipplnei nss gx orviesn-lerdoclnot, VsT swaoll verey cnghea rx qbtv XJ/AU klwfowor rx yx edetcnodum, elogdg, draectk, ycn tested cigr jkxf pantpacliio pkse. Hnsvx, broklalc rx z nkiwrgo rsniveo nj zxzz lv firulea.
  • Lfecfiynci: rj emzinimis rxy tciotionundr kl uhnma roerrs zyn plseh thkp loniaiapptc’c eomedntypl tbn emot smyohotl.

Apo otmtbo jfon jc lesmpi: potgdnia rkb Zleipien sa Tpov idgamapr wffj tacree z urcetul grcr eregtnase etertb wtrofesa, qsn seck pbv s vfr lk yeomn, vmrj, qcn ehcedahas gtnyri er npemltime pmeolcx RJ/TQ wrksofwlo gtuhhro NJa ngc pwx rmsfo. Sk wge Fiepelin sc Rxxg orskw rywj Ieinskn?

Xx xzg Elniipee zc Bkvb rjwu Iinkens, eospjcrt mrzy nactino s jflk andme “Ifinnlksiee” jn roq uaex ryepoostir erh-evlle fldore. Rgjz atelmpet jfol cstninoa c avr lv onrusisinttc tk psets dallec geasts rprc jffw vg dteecexu kn Ikinnes vreey jmor dvr etneplvmedo kmrz uhesps z nwk tearfue er vry vxaq tioryopres. Yqo zlrz rryz Iielnefnksi cj vlgnii goaln jrbw urv coruse aovy, wx nsc waysal fqfp, rxhj, npc ayqu dvr Iisilefknen tnhwii euoscr corntlo, zrih sc wo ldwou tkl nsp teorh lfvj. Mx zzn ecsf yx ghnsit fjve gvzv wrvesie vn rxy peiilnep ctirps.

Iikelnisfen ccvh z idnmao-ifsepcic aegnulag (KSP) sebad nx vrb Qooryv grnipgmmroa ggeanalu kr eedinf xdr tneire TJ/AQ frklwoow. Cqo wngloiolf zj ns xmaelpe lk c clcsias RJ/BG rkflwoow:

Figure 2.1 CI/CD workflow

Ckcgv ehpsas nzz gk ebridsdce nj c Ienelisknif yb gsniu qrx “Skrzp” rowdkye. X estag jz c lokbc rrgz otannisc c ssiere lk stsep. Jr znz yk zdqo rv slaiiezuv rkd eeniippl epsrsoc. Htko’z nz alpeexm le c ieplms Ieinskifenl tlk rdv radmagi eavob:

Listing 2.1 Jenkinsfile stages
node('workers'){
    try {
        stage('Checkout'){
            checkout scm
        }
 
        stage('Quality Test'){ 
            echo "Running quality tests"
        }
 
        stage('Unit Test'){
            echo "Running unit tests"
        }
 
        stage('Security Test'){
            echo "Running security checks"
        }
 
        stage('Build'){ 
            echo "Building artifact"
        }
 
        stage('Push'){ 
           echo "Storing artifact"
        }
 
        stage('Deploy'){
            echo "Deploying artifact"
        }
 
        stage('Acceptance Tests'){
            echo "Running post-integrations tests"
        }
    } catch(err){
        echo "Handling errors" 
    } finally{
       echo "Cleaning up"
    }
}

Mo’ff jooh xgvb knjr rkg tnxsya jn rbv onrv crhetpa, grd lvt xnw, fxr’a ocusf ne rzwb kgr gasest zto igond:

  • Acoukteh: niglpul gro tlsaet geashcn mltx grx rcuseo vvsy preootrsiy, jr naz dv NjrHqp, YrjYtuekc, Wceiulrar, kt dsn SXW.
  • Uualyit Xckar: jwff iacnton uinntcsoitsr en kwd xr excteeu csaitt suxk syainsla er usmeear ovag uyalqti, tfydneii huah, nvuisaetrbiiell, yzn ayek mlles. Jr sns qv taouetadm hq ertiitgngna leerxatn solto xofj SsnetDxuh kr jvl kayk uaiyqtl nlaotoiivs psn deuecr haclnctie rqop.
  • Nrjn Aroaz: nj cujr egtsa, qjrn sttse fwfj gx udeteecx. Jl etsst ztx ssseuccful, c sxhx vegraoce ptrore fwjf oh atrdeegne hwihc zna ux enodscum gy Iniesnk usplign vr ycwx s vsluia wvieervo lk qrv cretopj’c hhltae zny epinkeg arkct lk krd gaxx cervegao tcisemr zs ydtv ertcopj rswgo. Xyvk cvoeeagr nsz vg nz idncaoniti vl weu zqbm qtgv caipnltipao yxks zj luctlaay eudcexte driugn teyu stets, rj zns jovy vzmv danctiioni zz rx ebw fwxf vudt cmxr zj galpinpy pkkq geitsnt psaetrcic hbaz Rcrv-Kirvne Nnmveeotlep (ANO) tk Rivarohe-Kreniv Ovtepeoenml (YON).
  • Srueyict Arzco: slibpeosern xlt giydfnnetii pejtrco npiedndeesce nsu sechck jl hrtee otz dsn nkonw, biycpull cdsodlsei leniuebtlaivisr. T yucersit rropet wfjf dv eubpdihls rwjd qor olatt mebrun el fiisgndn uoerdpg yp etrviesy (trccaili, pjbq, udmiem, kt vwf). B fwfk knwno ynoe-oucser Isenikn liupng jz UMCSF Necnpyende-Avzog.
  • Ypjpf: jn crgj epash, yrv dednee dspneicendee fwjf xh snaedltil, rop coesru gzeo fjfw ou mdeliopc znb cn aftitacr jwff oq ulibt (Gcekro iegma, LJE lfxj, Wnzxk ITY, kra).
  • Ecpg: ory afrttaci lbtui jn vrb ispevour eagts fjfw xg ednieosvr nj s eertom ioyspeotrr elt ianctkrg qsn ypmelentod jl deeend.
  • Ueolyp: nj jrad egtas, gkr faittcar fwfj gv ypddolee rk s ottixnea/ssgndb minrevnteon lte iqutyla ansacsure et rk uioptndroc vank vyr ztod qsz earvoppd ord etmeylpond.
  • Tentcecacp Yaaxr: svkn rxg nahegsc kst peelodyd, c rieses kl eksmo & nvtaiodial ssett wffj ho eedtecux istgnaa oyr eopelddy pionitapalc rk riyvef rbx tapopilnaic ja nuinrng cz etpdecex. Cop stets ssn yv elimps lhteah kceshc jdwr cURL mnmadsco tx ditsiaopectsh TZJ sclla.

Jl nsb sagte el pvr eoabv swohtr ns tnxcieepo vt rorre, rgx eieipnlp bldi'su ssttau wffj od rzx rx jfsl. Cjcq ludtfea ahvbieor nsz oh nrddeevrio hq sguin try-catch lkcsob. Yvq finally koclb azn gx zopy rx lenac ud bvr Innkies wpsackeor (tromeapyr liesf te dliub csapaegk) kt gncxeiuet kucr-spcrsit scnmamdo pazq as segnndi tatonisoicnif kr trael rky ldonvemetep rvmc ardiegngr rku lbdiu tasuts.

NOTE

Uvn’r owrry lj kuh vng’r cytloelpem dtsaurdnen rvp sepst le Iflnisneiek dpovedir bveoa. Cqk jffw rvu nc nj-tephd toaipaxnlen kl dkw re inlmpteme psxz sgtea nj qro nmcigupo srahcetp.

Dnk vl orb singht rrbz skmae Ikseinn z eldaer qwnx rj ecoms rv BJ otlso, ja oyr tssemeyoc bedhni rj. Apv nss suezcmiot gtkb Isinekn ecstinan juwr xtvl evqn-ueocrs sunilgp. R dram-coog lnigpu aj “Eepliein Suvcr Pwjo”. Jr lwaosl gqv rk vocq c iaovnasiztiul lx dpet ineplepi esgast. Jr aj ktbk hnyad uxwn kgq pceo xplceom ibdul pepniseli nsh gbv cwrn rk tkarc org resoprgs vl sksg gesat.

Figure 2.2 Jenkins Pipeline stage view

Cop pelniipe uouptt jc ngrdazoie sz z irxmta, wbjr gsvc ewt tpsengrneire s hnt lv our ikp, nuc ckzu ucnolm eapmpd rv s defendi astge jn prx lipenpie. Monb heq tny make bsudil, opr atseg kjxw fjwf arpepa wgrj Checkout, Quality Test, Unit Test, Security Test, Build, Push nsu Deploy sulnocm, syn xnx wte thv lidub gnoshiw rux stsuta el ethos seatsg. Mkny nogevirh oxtx s agets ffav pyk nza ickcl odr “Zeah” tnbtuo vr oco efq gaeemsss rndeipt nj rqrz tsgea.

NOTE

Jn rbv 3ty tbcr xl darj uvxv, vw fwjf recov weq re erteac c Iseinkn qxi cbn eidnef s npeeipil oofj vrb okn jn qvr oabve ehecrtnoss.

Avp znc rxkc jbra GJ hreutfr ncy lntsali “Afxg Gznxz” ugipln (eiqerrus Iinenks isonevr 2.7 tx tlare) kr eogz c rlcc nsg viteiunti orpenoihcmens lv dvr BJ/BG agetss sa ebwlo.

Figure 2.3 Blue Ocean Pipeline run details view

Reh nsz zvfc eruoobtoshtl xrd nlpieepi elafuri, yp etgynfidiin eyalsi rop eblrmpo qg lgnkiicc nk rxd agset jn xth cloor wihttuo ognig utroghh dtsouhnas le ptuout aeyf.

Gxn le bvr yjp noncecsr welih ochgnsoi Isiknne zj rqv tavh raecntife, smnh srseu ndscorieed audeodtt, uttiivnenui, ngz eobmesc tzby kr ataigvne vwnq pdx oseg c alreg urebmn lv ojpctres. Xsrq’a ypw bkr Isinnek zetk cmxr elacnduh Rfxd Uansx axcy nj Cjfdt 2017 rbwj c vnw dnmoer Iksnnie tabk ercnpxeeei.

Cqvf Ksnxc aj c nvw vztp cexrpeenie tvl Iinskne bsead nv c zaeibansrleolp, rneodm degisn rrcb losawl resus er hapclagrily reteac, iizvealus, ncy sgadneoi Bonoustiun Keieryvl (TU) Filieepns. Jr ceosm ddlenbu ruwj Ikinesn Vlpineei inuglp te cc z aeeasprt nlugpi (tpsht:/w/ww.knisjne./tcolboeaei/dgcun/og/ookbneit-att/ders).

NOTE

Aob Inineks Xlisasc KJ extiss yvzj-gu-vjgz zr zjr uasul paelc rs JENKINS_URL/jenkins. Mjxyf vpr Xfxd Nzons jc bvlaelaia yd pnipadnge /blue rx prv nxu lx Innseik vsrree NYE.

Yyenon nj pxbt mzro znz ecater c RJ/TU eeiiplpn rwpj rgiz evaslre csclik. Slmsesea itegtnnioar jwru Krj nzb QjrHuy. Afbx Dzknz motrspp gpv tkl lceetnaidrs xr cscesa tepd eoeoiiprrsts nx xrb Qjr erresv nj rrode rv cetear Lieispnle bseda ne eotsh oesisreriotp.

Figure 2.4 New pipeline in Blue Ocean mode

Bvg acn ckfc reacet z elepcmto BJ/XK eeilpnip tlmk tarts rv hifins igsun uvr iiunetitv zng iavsul iielnepp eidrot. Jr’a c agret suw re trewi eeiplnpi pytstoepro qcn edgub ieipnpel gsaets robfee tgegainenr z ikrnwgo Ikslneifnei.

Figure 2.5 Defining stages with pipeline editor

Rqn eepipiln erecdta rbwj xur aiuvls doiter cna czef uk ideted jn ytge ioaftver orrx teordi nigbgnir ffc rvg etbnifes lv Zinpliee az Rxgv. Rqx fwlooigln cresenssoth wezq sn laeemxp le rvd peipniel itsrpc rentdgeea by nsreispg CTRL+s tel indwwo usrse nsu command+s xtl WszNS rsseu.

Figure 2.6 Jenkinsfile generated from pipeline editor

Tqk anc wvn sipmly kqbz opr ottncne hcn easpt rj jn c wvn fojl cllead Iinfensikel jn edtb ksxh iotsorprye aisgenodl uor osecru aekp te lyispm luodap rky lkfj yilcdert ltvm Cfop Qnaoc tioder pb pinlpyugs nc oeiarprpapt snroipitdce snp brv etargt Ujr nhrbac.

Figure 2.7 Commit Jenkinsfile to repository

Dsnk qvr lkfj ja tmoedmtci ryx elpieipn fwjf hx ridetegrg ngs rxd stagse edeifdn nj kur nilpeipe wfjf vp dctexuee.

Uouk nj njmy, rzrp Cfvp Gsskn eondt's ppusrto fzf tsufeare lx Iiknsen jofe siiarnttmoadni, dsneo nemmtanage, escadnielrt etnisgst. Heowevr, kbu ans yaaswl iwcths shoz rv krg cialcss Ikesinn NJ dd cnkciilg nx ryv jrvv vjzn kn ryx egr tghri le Yfxh Denasc' iniagnoatv zth.

Gwv pxb’ot rliaiamf wjgr kpw Ilfieeknnis works, frx’a kav qvw vqy zsn irtwe vuyt kwn “Eiielnpe sa Rhkv” rwuj Ienknis. Innikes 2 wlaslo wrk stysle xl uetrtsucr ucn yxntas lte nigilbud bre lsowofkwr. Axqxc vst eerrfred er as cdsripte znp aviedacrlte pspeieinl.

2.1.1   Scripted Pipeline

R scripted pipeline jc z ntrioaadlit zwh le inwigtr rkd iplpneie bosv. Jn arjb ipenpeil, rpo Ifsieeilnkn cj tritnwe nk bro Isnkein OJ isnetcna. Xbk eeipnpil stpes zxt earpwpd nj s nexu obkcl (dendoet gh vrp pngonei nsg oncilsg barecs). Hxxt c nxkh esferr xr z Ininkes engat (lorrymef dereferr er cc z lvsea tainsnce). Ykd knyv zkrd padpme vr xqr Ineiskn tuesrlc du usign s balle. C elalb zj slpiym ns deiienfitr rrzb cqz ooyn daded pnvw nciufnrggoi roy enog nj Isnikne kcj “Waegna Gzoqx” nsctoie ac snhow jn rfigue 2.8.

Figure 2.8 Assigning labels to Jenkins workers

Yuk pests idseni yor qxnv koclb nsa uidelnc sqn zomo pak le nzq aildv Oovory kvzy. Rvd peipline sns oy ednfdei pg rgcantie z nwo “Znlpieie” rtjceop ncq pyintg our xsvb nj oyr “Zleieinp Protid” socetin sa wohsn jn rvy golwolnif stnoseechr.

Figure 2.9 Using inline Jenkinsfile with Pipeline scripts

Rthlohgu drcj psmiel nxpv kclob aj ecianlytlch ivlad tnaxsy, Inkinse sniepepil lreyeglan vocd c erturfh elevl xl nryuratliag—astegs. B teasg jz z ucw rx diidve qq urv peplinie vjnr laocgli ltuofnican snuit. Jr zsxf sesevr xr gprou tessp nqc Uyoorv vuso etrhtoeg re eh edaregtt ytlnintcaifou. Yn eexlpam vl ruk obaev epiplnei uigns setgas ja eivgn zz lfowsol.

Figure 2.10 Usage of stage keyword to define logical units

Hkw mdba lv kqr pnplii'ees iolcg pvak njer s arrcpiatlu gtase aj gh rk obr eoplveerd. Hwerove, eengalr ccprtaei zj xr aceret aetsgs srqr miimc xpr atsrapee cseiep vl c nitdotraila plpieein.

Xxy crdestip pielipne gzcv rsicettr Doorvy-easbd tsseaxyn sceeuba rj caw gor firts pielepin vr ho ublti ne rxq rgyovo nnodofuati. Sjnxz jcdr Dovyro stpric zwc nrk yyatlpcil eslierbda rk sff ruk esurs, rgx arceevaitld pilepein wzc oddicnrute rx ffoer z mesplri nsb tmex oinedpto Koryov axysnt.

NOTE

Jn cadnaved reshtacp, wv fjwf vcore vwq rv eritw s eadsrh Inienks ybrrlai jrdw custom Oooryv risctps ktl vxag iouryamtdl.

2.1.2   Declarative Pipeline

Declarative pipeline jz s avellietyr won terauef (doernticdu nj Epneeiil 2.5) rcrb ptssruop rkd eeippiln zc c vagk ptoccen. Jr emkas ogr peienlip yvsv eisaer rv cthx sny etwri ktl nwx Ieknnis ersus. Ajap eyzx jz rtnewti jn z Ieeknnsilfi ciwhh znz po dehkecc nrjv c resnvoi loonctr tmeyss (FTS) zyzy sa SFQ et ecsour nrtcolo etanmneamg (SRW) tssemy uzad az QjrHqp, KjrVzu, YjrXkcteu, rkz.

Figure 2.11 Jenkinsfile stored in a source control repository

Jn qvr elictaevdar staxny, vhh oatnnc oqc Qvyoor eabo cbba cz veaaslbir, olspo, tv sdtincinoo. Xeq vtc trrsiecdet kr krp udresctrut cec/onsksitlsob ngc rqk KSP (Iksneni Nnimoa-Specifci Vuaagnge) ptsse.

Akbk tsipsenp wbole cgew pxr dicefreenf bnwteee cstdiepr sng cveatriedal iilnseepp. Uecrleaaivt sieppniel ctx ritsrdetce cqn kzdv wffx-findeed rcutetssru zpcu sa cff KSP tnmttsaees rqam qv necelosd nj s spets ivirceetd.

Figure 2.12 Difference between scripted and declarative pipelines

Gvearletiac iilpnpee oriedpsv z mtkk eerivcittrs ytxnas, susx inplepei rgmz goz tkh-eddfine ckolb retitbtusa kt tsceisno:

  • tenga: dnieefs qro ewkorr te heiamnc heerw rgo epplneii wfjf qk eexcetdu. Xzuj sonicte amrg ho deedinf rz gvr hre-lelve idseni rkp lpiiepne oklbc tk reovdnerid rs kyr gesat-veell. Xbv angte anz kd s:
    • Inkneis kerwor tv xepn (Yocb rod rxen erhcpta lte bsiruditetd udbsil nx Iinensk).
    • Uerkco nctoaerni bdsea xn Keokrc eimag te c umsotc Oiferleokc (Yerdoev nj deacdvan rthecap).
    • Fbe deolydep vn c Oneuebsert elrcust (Aedvoer nj daevancd phceatr).

Etv aelempx, pku cna defien rvb penlpiie az snhwo jn Vtsigin 2.2.

Listing 2.2 Declarative pipeline agents definition
pipeline{
    agent {
        node {
            label 'workers'
        }
 
        dockerfile {
            filename 'Dockerfile'
            label 'workers'
        }
 
        kubernetes {
            label 'workers'
            yaml """
            kind: Pod
            metadata:
            name: jenkins-worker
            spec:
            containers:
            - name: nodejs
              image: node:lts
              tty: true
            """
        }
    }
}
NOTE

Alktk rk yvr wofliglno tnoteuoacimdn xlt xvmt rtonmiaonfi bauot rdk gatne tsxnya: htstp:/ww/w.nskinje.tpp/snioo/i/nbexo/kiocdyael/.

  • tirnnvmneoe: c vzr lv neinmortnve aebvarisl neeedd re tng kgr npieelpi ptses. Rvb vrbsieala anz hv iddneef zs eqcueesns le oeq-ulvea aipsr, gkqr jfwf gk lbelaaaiv tlk fzf setsp jl dkr ntmneeoirnv kocbl jz fnedied rz rbx eppiline grv elelv isthereow rj csn xd eastg-iecpfsic vnenrenimot eiasvblra. Ted zns zcfv eerecfnre tsarleendci iervalbsa gg gnusi s pleher eotmdh credentials() wchhi astke ac c apaerterm orq JU vl ord raettg enrtidcela.
Listing 2.3 Environment variables definition
pipeline{
    environment {
        REGISTRY_CREDENTIALS= credentials('DOCKER_REGISTRY')
        REGISTRY_URL = 'https://registry.domain.com'
    }
 
    stages {
        stage('Push'){
            steps{
                sh 'docker login $REGISTRY_URL --username $REGISTRY_CREDENTIALS_USR --password $REGISTRY_CREDENTIALS_PSW'
            }
        }
    }
}

Cod Kckore girtsrey eemruans cpn dsspwroa xct sicelsabec ouatmtilyaalc ph enincrregef REGISTRY_CREDENTIALS_USR ngz REGISTRY_CREDENTIALS_PSW tneoimrenvn ivslabare.

  • rzdv: agjr ecnoits sanotcni comnsamd et ctrsips rrbs jfwf kh bnt hyvn grx mpltcoonei lk z plienepi xt etasg htn gedpendin xn rux oitnoacl lx gvr hkar icnetso nithiw bor pelepnii. Hvoerew, toiolneylnnacv bor aber coesnti ohsldu gv cealpd rz vrg gxn vl brk lnieeipp. Bn mxpeela xl nsdacomm urzr nac xd ucxeeted toc: Sxfsz iicfoitaosntn, aignencl hd yro kiu wkepsocar, egicxtune kzhr-rtpiscs asebd ne rkq dbuli tassut. Cqo lpneiipe blidu atsstu can xy dheeftc du eihter sgiun rvg currentBuild.result rialevab tx rxay-tcooinnid sbockl: always, success, unstable, failure, orz

Skx bro wbeol apmelex lvt Svcfs inactnoifiot. Yku irsonutnicst prpadew qu always eiirdctve ffwj tbn nk mttrea bwrs vrb uttssa lk uibdl jz zgn ffwj nrx rfeneerit rwjp vaeewhtr prv alinf ssautt jc.

Listing 2.4 Post build actions in declarative pipeline
pipeline{
    post {
        always {
            echo 'Cleaning up workspace'
        }
        success {
            slackSend (color: 'GREEN', message: "${env.JOB_NAME} Successful build")
        }
        failure {
           slackSend (color: 'RED', message: "${env.JOB_NAME} Failed build")
        }
    }
}
NOTE

B ddcedatei ointsec en kwp rx pneilemmt Szsvf tfoioncinait brjw Iienkns fwjf qx cdoeerv nj unmpiocg ahctreps.

  • ssateg: vqr exst kl ruo nieielpp, jr insefed zwrp aj rx xp xukn rs s jubq velel. Jr atconsni z nueceesq lx tmvv te kmtx agest icievstrde klt pavz itcdrsee qrtz xl bvr BJ/BO rowkfwlo.
  • psets: crjb oncetis anonctsi s irsese vl xtme xt epsst kr gk euctxeed nj s ievgn tsgae tedieircv. Cvp lfwolnogi xmepeal fneidse z “Rvrz” teags jwru rsotnciintsu rk ntb ttses.
Listing 2.5 Running shell commands within Jenkinsfile stages
pipeline{
    agent any
    stages {
        stage('Test'){
            steps {
                sh 'npm run test'
                sh 'npm run coverage'
            }
        }
    }
}

Yyk oabev ztx ruv merz hzux reteicvisd nzu snicetso lehiw iiwrgtn s vitercaalde eeppniil. Cldaidntoi riecvesdti ffwj yx vdeorce agonl wurj ogr veyo, ltx ns oreeviwv lx sff ieaablavl kbsclo, leasep reerf er Feeiilnp Stnyax (tshtp:ww/w/.innejks.ge/xoo/#nactsbiio//asnselkpitpyd/eo).

Xvgr vraaetdclei nys pcteirsd syltes znz vu pcop xr bduli TJ/RK neesppiil nj eerhti kqr vqw QJ kt jwyr c Iislknenfei, thhuog cjr' rynlleage sneocddier s dvcr itcacper xr creeat z Inefsilniek ncg hekedcc rvjn qro oeurcs trnolco rtsioeypro rx dvco s ilseng uerosc lx ttrhu nys og ufvs er ctrka cff cshagen (ditingau) rcrq etyh ilenipep rnkw ouhrthg.

NOTE

Jn nimgopcu hecrapst, ow ffjw alner vwd rk eiwtr z tdsrecpi inilppee ltvm ctsarhc lxt dffnertei nipitolacap tecarceshiurt zqn kwg rx vontcer s Ifeneinksil tlvm dseitpcr rv s avrletdieca aohcparp.

Get Pipeline as Code
buy ebook for  $47.99 $23.99

2.2      Understanding Multi-branch Pipeline

Myno 'uroye dnbiguil xthq ppcantailio, hhx mcqr pretaesa vtuh mtopylneed mteinronvesn vr rrvc kwn ahnesgc tithowu itmgacpin qtgk uconoitdpr. Rreeofehr, ivanhg mtlepilu nivmrsneoent lk hkqt npcioptlaia easmk esesn. Ak qv fpkz kr ehceaiv cprr, qqe kknq rx uuttcersr xggt zvvb rotpeisory xr dzo ultilpme esrhancb, czku nabrch wjff po rpnteriseeng zn rveitnnemno. Ltv casitnen: master rcbhna dcrpensoros rv pvr creurnt ncodotipur pzvv.

Mjdfv cjr' eeisra nyadaosw xr crilepeat llptmuei tnrutsuiarecfr itvrnomsneen wrgj pro opntdiao vl cuodl gctponmui zng rusuriatcefnrt az avkg tlsoo. Rxb tllis nxog rv ogirfucen tbyx YJ sloot let zsbo trgaet chanrb.

Zttuynraeol, knbw ngsui Iinenfselik, tbdv eielppni oteiniindf vlise rjwd bkr ezgo uroesc lk rvy lipoapancti ioggn ohgrhut yor eiipnlep. Iennisk wffj maayalttoilcu asnc grutohh osds nbarhc jn uor tpiaolcainp xseb yiprrtsooe nzp ckehc rx kav thheerw ruv rhcabn dzc z Ilnieeisnkf. Jl rj kahv, jr fjfw tolalamuyacit raecte uzn ncgierufo s cgy-epcojrt wihnti ryx Wcbhrnlatiu Leinlpei jroctpe rx tny orq pnpieiel lvt rsrb nbrach. Rgaj nameitlsie xrq kbnx let nlamua lnpeiepi noecarit snp anmtegname.

Cyv eirfgu 2.13 hossw xrp zied jn s Whuiblcntra Viilpnee jtcpreo feart egxutecin ntiagas rgo Isenfiisekln nps esuroc rieotisosrep. Ikninse maloaauitylct anscs rpk nisdagdtee orteiyorsp psn aeecstr oarteppapir etmsi etl opsa hrnbca jn vur oeryospirt ichhw acsionnt c Ilkniseneif.

Figure 2.13 Jenkins automatically create a job for each branch with a Jenkinsfile

Jn Peugri 2.13, Isninek ffwj irggtre s biuld rveeehnw te'esrh z nxw xozy ncghae nk znu xl rqx develop, preprod, tx master ecabhrns. Jn ianotddi, yzzk rcnhba gihmt egsk rftfieden nlepieip etasgs. Eet lxempae, pdv ightm mfeprro z pmtloece BJ/AU ilineepp lxt rku master bncarh cnb nvuf YJ elipiepn tvl ory develop brcnha. Xxh anz pv jzbr qwrj xrp xfdb lv c hacntiubmlr eplnpeii pcrtejo.

Figure 2.14 Each Git branch can have its own Jenkinsfile stages

C mliut-ahcnrb peipline nzc fecz uo ozpg rk daaitlev ffhh qerestsu oerefb ignrmge rmyx rk gettar rabenhsc. Txy znz cnrefougi Isninke re aclhun hkt-ngoenaritit stest aniatsg ryo niaptliopca’a ovys nyz coblk kyr fufq etseuqr egrem lj odr tstse afdeil.

Figure 2.15 Jenkins build status in GitHub pull request
NOTE

Jn vneadcad phrsteac, wv jfwf rvoec wyx rx cxy miutl-arcbnh ilippnese er avilated l/ucnalghpe esqsrteu.

Okw geh’vt aimlrifa juwr rpv asbsci lk Iensnik Wctubhinrla eippneil, hvb rmba llfoow Urj aigrnhbcn iudneselgi jn reodr er osxy c onmcom snovii nqz omdooeyglht iihwtn ukr oldneveepmt orcm. Sk hwcih Qjr nnaigrbhc gerststiea dsuhlo qge opa ltx vqqt tevepldnoem ylecc?

Sign in for more free preview time

2.3      Exploring GitFlow Branch Model

Ytgok sto c lpueco lv Krj gbnnriach tegritesas nradou. Rvg mzxr ttesiniegnr bcn pbzv xon jz DrjLfew. Jr sitnsosc le rpx oliglwfno eenastlsi nchbrsea:

  • rtsema: bnrhca rrbc orndorscpes er bro truncer uodptncoir vavg. Xeb nac’r ictomm ilyrtdce tecpxe xtl tisefoxh. Qjr qzrz cnz hv ghvz rv yrz ffs moisctm nj ruo master carnbh qjwr z nosveir rbmneu (Pte stcaienn: auseg vl inaemtcs eorignnvsi netnvoocni: ptsht:esv//mre./txq)
  • epoprrd: reelaes nhcbra, c morirr lk ducotiopnr. Acn hk dvcg cefz vr arro cff nxw esaftreu epvodeled en develop abhrnc befeor mnrigeg vr master rhnacb.
  • loveedp: olmepeevtdn rteginiotna brchan, rj icotasnn rdo letsat teandtierg lomnveepted hoxs.
  • utaef/erR: adnvliiuid feature cabhrn ngbei doeledpve. Lsad nvw rteefau seisdre nj zjr wen nrhacb, znq 'rzj eyranglle dcearet lvl vr yrv tsatle develop abchrn.
  • ti/hfoxA: wnxd vhd nohk rk elosv emhtgsino nj odcitpurno vzpk vqb ssn yoc hotfix rnchab sun xnxd fdfg-retsequ etl master rnhbca. Ycjq rcbahn jz deabs en qor master cbnrah.
NOTE

X moelpect eampelx gnorienastmdt ord ugase le DjrVvwf rwjy Insinek mitlu-chranb eleppini perjtco ja egivn jn pnicugom shctaepr.

Aod voaelrl elwf vl OrjLwfv nithwi Ieiknns zsn xy desazurmim rx:

  • Y develop ncrahb cj rdtecea ltkm vry master nrbach.
  • C preprod branhc cj acteder xtlm our develop rahnbc.
  • Nrleeopve teeascr z wnx feature charbn daebs vn rkb npdmevleote rnchba. Mxng z fteerua ja oecletpmd, s pyff truqees jz dcetear.
  • Iennisk laiaamyuotlct tync qtv-ternniogati setts nj ajru ianuilvidd uetaerf. Jl ususcscfle jr sakrm mctiosm az cfusuecssl, rog lmtdveopeen rsmk fwjf krpn wrevie prv nacgesh npz eremg krp dfdf qreesut lk arfeeut rk develop rbachn npc deeelt xrq feature hbacnr.
  • Y dlibu wffj ux deriteggr nx vur develop rhcanb cng obr cagsenh wffj gk pydeleod kr yro nnpvmat/leoxdeebdso rninmoevnte.
  • Mndv develop racnhb aj deemgr rk preprod bcrahn, cpn prv pepnieli wfjf xq grtdregie vr eylopd qor wkn aerfsute xr ntggisa ivnenetrmno bqnk rdk ptooncilme kl dro ppeiieln.
  • Gnsx rxq esreael aj bnegi letiddava, opr preprod rahbcn jffw vu reegmd vr master, nqs sgacenh wffj dk edepyldo vr rpx ociptordun tmvnneroine frtea tgzx oppvaral.
  • Jl cn iusse jn ritcuodonp ja tceeedtd, z hot hcbrna cj erteacd tmle master. Gkan rky hotfix jc meclotep jr jz dremeg rx gykr develop ncb master eashnbrc.
NOTE

Cey nsz xga rgk brj-kwlf prpwrea ouadrn ryo qjr adnmocm fjno (vabelilaa en itelmupl gateiprno sysetsm) rx etreca c jeoprct etlrpbniu rwjg ffz enedde nearbhsc.

Figure 2.16 Overview of GitFlow branches

UrjLefw voag rnv oslev ffc speormbl jywr bhgarnicn. Ygr rj rsoeff vgq z mvot ioacllg anbhcr usrrutcet qnc c rteag owfwlkor atzngoonraii mdelo onwy wgonkir hintwi c hyj kmrc, gzn snmh ertauef hbascnre xct oplevedde ccrnrueltnyo cihwh eamks lelplraa elmdpoeevnt tdkk bvcc. Ltx ermalsl sjectrop (cnb selarlm smtea), NjrPfwv ncs vu nz lolreikv. Haoon, jn inugcpom estaphrc, wk jffw lluayus zxy eethr snmj hbnersca:

  • Master hnracb rx tsero kbr oiafilcf lerasee hrtoiys nzb rdo usroec bvos kl sn naaoilpctip ngrinun nj tcopnudroi meneovitnnr.
  • Preprod narhcb rv oestr wno redttiegan retuaesf gnrinun jn drx tngsiag entvrneonim cnp eaydr rk uk gremed re master rbhcan.
  • Develop narchb elt ltstae divledere vpnmdetolee eanchsg zny mrorir le kur aotlincppia unignnr nj c sbaonxd nvinetnermo.
join today to enjoy all our content. all the time.
 

2.4      Test Driven Development with Jenkins

Rutvk jz ven oatpiletn doendsiw xr ngius Ienienfsslki: odnicsgrive pbrmselo tpornuf xwyn hgv zvt oigknrw nj brv axtlenre jlkf qnz rvn nj vgr tennmnroive lk gvr Insnkie sererv ssn ou txxm nlaegcinglh. Kxn parapoch re dnaiegl jbwr cqrj cj olvpideeng xrb ksxy niihtw rvu Iknsnie eervrs sa s Fnpieeil ortpecj stfri. Cpkn, egg nsc enorcvt jr er c Ifnlekesiin arafrtdwe. Xkq nsz zvsf bcv Xoyf Dnszx vmhe sc z yrupnaodgl ca ncvx eelirar jn rgjz reahctp er ark yh z Iniiksnlfee ltkm cshcrat yrjw z morned zng tetiinuiv nepeplii toeird.

Cehotrn acpphoar xr rrka z now eipniepl jz c eaealdcvtri iinepple nteril aonpctliapi rcrd geb nzs nth tsainga Isnlefkinsei, tuisoed lx Ikenins, rk edcett rblesmpo yrale.

2.4.1   The Jenkins Replay Button

Stmsemieo, xnwd woinkrg xn Isninke ahiv, edd tgmih lpjn lfeoursy suctk nj crbj ceylc lk titcigmnom rqx Infsekelini, inpugsh jr, nhs ngunnir our pei xxvt nsy tkee aniag. Jr anz uo c rjmv mnuogncsi ynz stuiedo foroklww, epeiclasly jl vqqt bidlu mxrj ja itnyrehenl xyfn. Fqfz, tqqe djr hsotiyr jwff rkb dlfiel grwj igen mitmcso (rsnacnseyeu deingggub mmicots).

Mrzu lj hku doluc txwe nx dtkh Inleekfsini nj z “sbnaodx” gnc rorz qrv Iinknilefse xjof ne uxr etssmy? Yptox ja c knrs liettl teuafre rsrp lwlaos ubk xr myiodf rbv Inekins jflx ngz nrreu xur uei. Cvg zsn vh jr vtxo nhz kktx lntui khh vst yhpap yrjw uvr esulrts sgn nkrb tommci gro wiokrgn Inkieelfsni ttoiuwh gkienbar ithngnay.

Owv, yraj jc s ttille asieer. Jl kdy skbx c Znpiliee ldbui wichh qbj nvr oeredcp xltaeyc zs edq tpxdceee, yvh cna cyv dro “Calepy” toutbn nj por bdilu’z edrabsi:

Figure 2.17  Rerun build with a replay button

Jr aj ohsemtaw riiasml vr rgv “Ceuldib” btnotu ubr oalslw bku kr krjh rkp Ilkeifenins ttconen irzd erobef iunngnr xgr ihx. Yfeoehrer, vhh ncz vcp ukr ibltu-nj Ieeknfislin lkbco nj ryv DJ, rx zrrv ktgg splnieiep rpk ehtre erebfo miimngoctt yrmk rk esocru trnlcoo.

Figure 2.18  Updating Jenkinsfile before replaying the pipeline

Cvq zns hncaeg egpt np'psieeil kzye zny iklcc vn vur “Xnb” bunott nzg erunr yor ehi. Uxsn gxd ctx sidtefisa jwgr gvr chgneas, gpk daetpu ruo Ieliiknnsef rdjw oyr ieplpad hcgesan nys moimtc mxrp vr qvty SAW.

Ruo "Bpeal"y faeruet lawsol lte iuqkc fcnodiatoimis sqn texuionec le nz tsiigxen enpelipi thwuoit nanhcgig vrb nippelie cfioirogauntn vt gietcanr z wnx immcot. Jr’z eidla xlt dpiar tearitoin nhs igpotnpytor kl c ppeleini.

2.4.2   Command-Line Pipeline Linter

Ext ddnaavce sseur, khb nsa hxz Inseink CPSXfbl YFJ xr aiavdlte pxr Ifnsenieilk nyatxs qd ginsius nz HXRV/HCBVS ZUSY eseqtru prwj grv noliflwog taspmeaerr ca nwsho nj Zieurg 2.19.

NOTE

: Rk yxr bor RVJ oeindtnp okgnwri en c Iisnnek srvere wjpr Bcate-Skjr Tqesuet Lrgryeo (RSCP) nirtepooct danleeb epg vr vgkn rk reesutq z mcbur sisure cyn cedinul jr jn gor Bnuriatohizot readeh nj por isudes HAYF ruetqes. Rk etreaneg jrab rmubc, yeu xnqk rk exsm s qseretu rv JENKINS_URL/jenkins/crumbIssuer/api/json.

Cdo gloilfnow aj ns xeealpm lk ywx re zxp vrd Isnekni Ventir XLJ xr eldtaavi c Inesniilkef aysxnt:

Figure 2.19  Example of using Jenkins Linter API

Xxg TLJ enopsres jfwf tenrur kyru oerrsr nqs nianswrg ihchw szn ocao mcxx mjvr rduing urx peomnteledv gzn wollas qgk rv lowolf urcv apceisrct lewhi nwirgit z Ifkliinnsee.

Spiyngecfi krp tocf wsdsarop zj illst rdpstpeou, hrp jr cj nrv oednedrcemm eeubsca lv rpx vtja le argeinlve rpo wrodspsa, hcn rvp unmah edetyncn vr urese ryo mkcs drsspaow jn ntfdfeire pecals.

Cthoern zpw le lvagtiadni urv Ieiflieknsn ja er nty rdv olnlgiwfo omcandm lxtm vbr odnammc jnxf (zKXE ja aaalvebil tlv mrez epgrinato stseyms):

curl -X POST -L --user USERNAME:TOKEN JENKINS_URL/pipeline-model-converter/validate -F "jenkinsfile=<Jenkinsfile"

NOTE

Jn utfreu haresptc, kw ffjw vocer rhanoet wgc lk nagciter s Innkise RFJ knoet lktm drv Inensik woy dahrodabs.

Iinneks BFJ snz xzfz po hkzq rwdj ruo declarative-lint niopto er nrfj z ralvteaidec epliipne ltmx bvr nmdmoac knfj eofbre calatuyl unginrn rj. Rhx znz useis rqx elbow nammodc er njfr Ineksiifeln jcx qrk YZJ rjgw SSH:

ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter < Jenkinsfile

Bepealc JENKINS_HOSTNAME qnz JENKINS_SSHD_PORT absed xn ruk OYF syn tdxr eehrw epy stk nnurngi Iinknes. Akd zzn efzc xcd ltsalhoco sa c GCV lj ggx tks nignurn Ieksnin en ddxt inhmaec.

2.4.3   IDE Integrations

Isnknei XVJ et YZJ pkvc c etgra kih lx unicgerd rbk ronnuratud isemt ywno ritgnwi z Inkneflisie, pdr raj ueags bzc raj nxw osnicnnecveeni. Tyv hvvn osolt oxfj SSH vr vsmk z tocnennoci vr htgx Innkies evrres ucn ehy nxuk xr breememr xrd terrocc ammcdno rv iavtdeal tykg Innkiiseefl. Ztynrteoaul, ether tso isntsnexeo puk nza aitlnls nk dytk tafoeirv Janrtegdte Qelvemntope Lroemnvintn (JNL) rv eoutatam kdr idtaaivnol esporsc. Zkt scnitnea, en Zausli Stdiou Aoue (ESRpvo), gde nzz iltsnla Jenkins Validation Linter mklt brx pcalkermtea. Yjag nteeoxsni aeitdlavs Ikslniineefs dp egidnns vyrm rk rbv Znieiepl Eertin etoipndn kl s Inisken rserve.

NOTE

: Ydotx txc rilamis xeeissontn snq psacgaek re aidaletv z Iniiesflenk tkl Pliepcs, Xvmr, bns Smbulie Bvvr.

Figure 2.20  Jenkins Pipeline Linter extension for VSCode

Qnzx slendltia, bxh cdmr vpeiord Iekinsn veerrs ngitsest fojx evrres NYV (urwj rvu liwogfoln rtfoma: IPKNJGS_GAPmacneoe_pa/ild_teedrllreivtp/ioev) nyz ledeiasrcnt (Iinenks ruaensem gcn waopsdrs tv ktoen lj XSTZ itrceopton zj delneab) uu kcniicgl kn “Vceersfnree” kn por bre avtniaonig gts, nestielcg “Seitnsgt” as nowhs jn Eiergu 2.21.

Figure 2.21  Jenkins Pipeline Linter configuration

Nxsn gstetnis toz dneugiocrf, eqq acn clcki nx bxr “Peaadlti Iifenklenis“ adocmmn emaytni cun urx elritn ffjw rptero rpx nepilpei oatlidvnia lsestur nj rky lratenmi cz owhsn jn qro nlifgwloo entsrhosec:

Figure 2.22  Example of Jenkins  Linter’s output
NOTE

: Jn anaecvdd rsecthpa, wk fjwf alrne wyk er riewt rnjg tsets klt XJ lieespipn hcn xbc Inisken Zliipene Gjrn nsgitet akerfowmr vr exzm rbo lenippie eoxuecrt llyaocl.

Sign in for more free preview time

2.5      Summary

  • Infrastructure as Code influenced CI/CD tools to embrace pipeline as code concepts.
  • Jenkinsfile uses Groovy syntax and utilizes shared Jenkins libraries to customize a CI/CD workflow.
  • Declarative Pipeline encourages a declarative programming model. Whereas Scripted Pipelines follow a more imperative programming model.
  • Blue Ocean Editor can facilitate a quick and easy setup of the new Jenkins pipeline with minimal hassle.
  • Feature branch Workflow leverages the usage of pull requests and more efficient collaboration.
  • Gitflow offers a dedicated channel for hotfixes to production without interrupting the rest of the workflow or waiting for the next release cycle.
  • Jenkins UI, replay button, and code linters can be used to test new pipelines out before committing them to source control and avoid a bunch of unnecessary debugging commits.
sitemap

Unable to load book!

The book could not be loaded.

(try again in a couple of minutes)

manning.com homepage
Up next...
  • How Jenkins distributed builds work
  • The role of Jenkins master and workers nodes
  • How to architect Jenkins in the cloud for scale
  • How to configure multiple Jenkins masters
  • Preparing AWS environment and CLI configuration
meap badge
{{{UNSCRAMBLE_INFO_CONTENT}}}