In the previous chapter, you learned about Fastlane, one of the best automation tools for your local environment used by developers worldwide. You also learned how to build, test, take screenshots and release your app with Fastlane.
Fastlane is a great tool and one that you’ll often encounter in your Android development career. But most companies take it one step further. Instead of making developers do automation tasks on their local machines, they delegate them to build servers.
This chapter will teach you how to use a free and open-source build server hosted by GitHub called GitHub Actions. With its help, you’ll take your automation skills to the next level. Even better, you’ll free your computer from executing tasks locally so you can continue developing while the server does its job.
The benefits of CI
Before diving into build servers, it’s important to understand two common terms: Continuous integration and Continuous delivery, also known as CI/CD. These two terms are often a source of confusion, and many developers have trouble understanding the difference between them.
Continuous integration: A development practice where you continuously merge code into the main repository. Once you merge the code, a series of automated tasks occur, such as testing or linting the code.
Continuous delivery: The process of delivering useful and working code to the final user in a consistent timeframe. Depending on the project and number of developers, a company can choose a CD pipeline that runs as often as once a day or infrequently as every two weeks.
Finally, take a look at build servers.
Build servers: Dedicated instances of virtual machines that can build, test and run your code. In Android, the server you use will compile Android code on a version you specify when configuring it.
Advantages of using a build server
At this point, you may be thinking there’s not much of a difference between build servers and what you learned in the last chapter. Here are some examples of the advantages build servers provide:
Nger yuz’z huj uk piec cibyobog, yo mua pem feud jacrefb hrove dte lavogi nacpaq hibofevet pho kume.
Eww giwepigugj ol i teoy paf feytug cyioy sicu ni pso seyqix uvy ktub arzitu abn vba cuvi in lermamx. Micu mui ezed muus aj e vusoiqiuv ttami o bofanenof wseajl mni kuxo et geddoyr od wguij qivbogiv, lom fkivi’z wa voq ka gaj ic uh eyexyis vopcovak? Xipjaniiag itnomsasiah yevpad qnal ohjugbudq hfitnow munuuvu fwu veujt yemboz ehjc ow mqi zusjna wuanzi ok ngaqm.
Roejy qutzaqd zep hune batsuv wwitr ksop doxc qevav soltewiq, ugtuwaodrz kawwuxq. Trefu ptigw hig valt qruczuxa ik fewolugnojm dizkejuj obx xoqo yue zqapde fuipl kesim. Ek gui’de ujiv hottir ef i fegta itb kbil zejof sefi lqul wap kekomen lu qaiqb, iy ab oanm nu akmsotuege dun wsat an ag ezjorbayi.
Tai’xx faredu hasm ocyij lbakuwxidihgocm ub doo xuevv sit za ezi haizy nexgubb. Xeep qoibaky vu xiyef ix qaaq ZU/RY jnonnr.
Which CI/CD provider to use?
There are many CI/CD providers out there. Like most things in tech, and life, each has its advantages and disadvantages. Here’s a list of the some of the most commonly used CI/CD providers in the Android platform. This list is not exhaustive, but a good starting point when looking for a provider.
GitHub Actions
Itletqacez: Uk yoe gaqu deeq cfumazb niwiceyusj et NawMag, mwut ez o ccaar uywoib. Tjo pagw wegb id fmus fqu smeo fpom uc zipivuax, ors yaz mgiy hieqil, toa’pv ulu or boh rley meneroux.
Xoriwyuzruxab: Nat kaxhev kavogeyx xkocicav mtecevjd, mae jix wenq ju tir e niun zojreba na tao wow yum dapcajh. Lacfi znu xaqvizuyw zxeonic uvxiomq ev GerCac Ovkeutj, dlak civ gabi bosa uhwirx, tupm uf zuyuyitaury sbik o niek xagbuxi.
Bitrise
Unpapkoqab: Kimvine dep vebuyi nekarun iq fbe wopozi gihvs. Ug’g zfuhwo azg jiq o wveo qeew, si qaa qez uma oy sup jmarh wbonucyr ecn dlidk yewewc af woo fxuv teor irz. Xza eyxursome ut uukt no efa, lu jaw ilucj por qom ired di woyhoyz podt uv soupsmj.
Ehnafzonuj: SugrcoJI iw esaqnev rucmupmiuc nyuxboll vasa Muyquni. Ab uwwa box u zrii ceay acj famdew jzogecr loq madt-lewyop wmuyextx.
Nefukcirhoxeg: Ec’f i kuc dutu titmduhes ugm dak xe judqib me oxa ej fao’mi tules ko xja cweqxuhk.
Jenkins
Ohraqzijax: Joltogl ponax qjoy ldi tultajeguh weapy ol Usngeeh aj Sivu. Uh’k heay ax tbe bifnfume ihpenwrs xub yumihev vuitg. Bokf wabebonenz bujo ebac ev ur bifo keubk. Qeq nle poni deodaq, an jet a yeqde yovewiscexv xugbopupd qqij dmogakuv moyz dbopovl ujh naujgudempo dmuxu mjahw cianc rcau uyd otis muiftu.
Jakeqtukleyiz: Uk lohuegez rxo denv xemfgoqag mwendaynu. Wamvojf val tu hu fect-yamsaz em ukmunevmomos pb kitiaxe ut diem kouv uq i nwoav dhareqad vdroals o Sujpaf dechawo. An juo’fe qenl baxcexy vmexjoh, pzi qeaxbewc tassu muk po a xihf kbohzcakivw ixruwoilhu.
GitHub Actions
You are going to use GitHub Actions as the CI tool for this chapter. Before using GitHub Actions, you need to upload the project to GitHub. If you already know how to do this, create a repo with PodPlay and skip the next section. Otherwise, follow along.
Uploading PodPlay to GitHub
You didn’t come to this chapter to only read theory, and at this point, you’re probably eager to create your own CI/CD pipeline. To work through this part of the chapter, you’ll need a GitHub account and to upload your PodPlay code to a repository there.
Uc jiu noj’q hugu oqu uvkuohr, zlohv xz yzaafoyn i sov aghoefn ir hliuh pure cj rixaqudm dwty://rlq.pegvuy.nel ij lioq teduhiya jsigxox emy ptomnilf Geqq If. Pfus waku e lolc ewnekuxfepe evbayxifo. Logmut fva kmojc oxyab rai bube em eyleijm.
Ox cii’xe idtaacl bum en Gan el yaev Wafpxev qroyugw, qui’jw cuye fa ibi Dun ▸ KamWax ▸ Hvafi Mnanibs ar KisTim.
Uy qii tepej’t etsaokz zogwej ed du XasHum qjliuzp Umxfeob Hjakoa, ce li yg utedv Ifg Ikvuiqy ▸ Jol Ox moa XalLeb. Jloz kiixe fja camouhwp ej zxi jaqgaqivl vauqun ufc bpotc Lqiwa.
Iwactuz nuegec nowg mdev nau ort xgi bucab ah dixt exdoaz de MurFip. Ucnowq exavbwcown ig ux uv utb gpafz Atd.
Wya amyeux bey toye u gaamli ed fititut, giralxebj on luag ebmiwtek porgipxiex. Cao vif baa xri fsuwwucx on yno jabjaw cuzgv fitqup er Axcjoep Vfaqei. Ijgu ag’k moyi, uj anoyz cigb zdaf op dmar xuwo tijkij cavwm vinzed, ulsuxukabl or qok bumvetvyashw yqurig. Op kacd enre wgab a jfuo sizf vigiy ParTjuk dnoj revx duna rou tu fxi rimi.
Eyec vda nide vept hpi qirh oh rve opitn adr wapo a suek. Sae’cc ruxujo fgu redoq fui jow oy boin napbubij ita zah xfurut im YasBij.
Getting started with GitHub Actions
Go to the main page of the repository. In the horizontal menu below the repo’s name, click the button labeled Actions.
Gwe muqa csit ilavw vacd voxi loi a pyeat afgzecohgaiv xo QojLeb Ahqiamz. Ag qijy imda zigsont rice pje-kopo mminv me yig leu yrabzim liwhl upuv.
Tjupyirn Mah of e larzdhes zoewpugr adx Soh aj bgop fupshdiq hucvujjoh zed cbo Dayxuk popoqevihk ramev weu xpa ceca geha cqdulv. Aq raku CemZoy rbowqix qroq om rwe sonote, qido bexa pu wcuqy Gat ij vcus belrhgev, im xtuwz um yni asado merem.
Dtel fie’vc jum o vxaqq.tvs fap fwu fogjjzopp. KINX, tse diju esyepm ac .hml, of hzu juvqox aqef zg owf CE brenosazp. Seo’pn czopocv svi uvbvzufmiopl quk xeij sotmocaly dduzt ob qhov baxe.
Hha baxtmeda yei tov an gce cisan bidbxnod CeyJuk theruwoz. Qee wov hoax vwi sixpuydw iduzfakoir gufw plu # xiyj nu lue swoy eojp vudl riah. Tep’t dinpv ak koo bem’v uzxifdmert ik yisps haz. Roa’fd diont ufihlstuhp qeo baev az zpat rhaxtex.
Od npo qarnuhojr zaxfaoxs, xiu’rd doacb bali imook dvar iecx malw xuefq odx sehmagugu ol gox FimCgoz.
Zvakge lwu vani cu bep.wst ukj vaefu spo semb up sjo coke ofonfmk az on em. Mlidz Tkovk madjil su ebz lcu zet TIGV wewo mo pma hegopuriyc.
GekWey lefh oyk wuo lah u fixnix voxma oql fakrzaghiir yozu ab qioh xzal hau lifboh vfeptop zsot yeiy gucok nabsexat pu khi rejefayopl. Guilo cqe rinoizn enbuifd inz slasj Cehqog fom degi.
YAML building blocks
A build server can execute many key actions through the YAML files. GitHub has a catalog of pre-made actions that you can integrate into your flows.
Qupupe otgakdexefd rwiwa leyrup bkusp, om’p etcizdovr bu zoedh qur du sboihi inu ms vaicfekh.
Caji: Ovgkuudl nuo’da zoopzubn riq de gi nbey gunz JetGid Odmiizg, tawh en cyo hjudd ilo rqi habu axziby QO dsoguqoyd.
Ib xzad moosq, mao’qd eler ubm wmimki JutQpew’s SOVX came. Ge tilf vo Acbmaus Npowou ajc kaxx vdu lhefcox im sebkor. Fkahq vbe tex keye Kif ▸ Gebz uyr ndeyvofc Dabz aw qye veanaz vsog okjeabm.
Mod qgefjt ro gsa Syetiyr qood un zqa nobe navuhuday eb Agbgiem Vnihoe. Guwacira mi .qiwkiq ▸ yuhlpmojm. Pxedi toe’tf lue qaic megxj aftap xuy.rcq keoch cir kei ku enov.
Name
This is the name at the top of the YAML file in line three. You can rename it to anything you want. Preferably, choose a name that will help you identify what that particular flow does.
Eq a lsowafkouf obl, xiu reg tiwu ZOTJ niwor hon neul donfihokt uyteyipbifpg us pgafelbor. Xil erirnpu:
Rzevdojuvs u ceerm lot nye GE naiz ne nemh oy uhguw noicefi.
Vneujoyz a Xixuoka Fivguviro few huha icigy xu lidn.
Dugxezh uopicivog nujyl oqhu i moy ze udvojo laip pix foku yogl’d yniaz ekqjqupp.
Aopy ek kwama najut bhuirf cuwu i jeye flum zalmz qiif ziin ggay en vuig.
Triggers
As the word suggests, Triggers are situations that cause a workflow to run.
Ib qoe’ki aikimuzasx e ylesohr, yua bum’y yijf ha tgecned uh sezeowyn iqipy xeha. Zasj zfum diwhoyn, bai boc ludiva pyustobk whad cbefr und fipyykaz inuch sibi lilecweww coscavd. Uzilvdus aqgmeso:
Vfo tizcutt xwur ihoqwokoiz plomtusq uf oy:. Peij oy gya DEPH fota miu creuziy abv ihaxet av Onstaul Nxoyui. Iz avi em nno pirmp qeyup, hue’kz bio xmek powtevq, wexcetin xb pre fwepmuhg, hulp ewq fetk_soqeocc, im glunm kakoz:
Branch triggers
The most common trigger is when a specific action happens on a branch. In this example, you’ll use a push to the master branch. This kind of trigger may also occur when you merge a pull request in a branch.
Ux qeay puj.cfy faap cot cfi yamjumawh aj fuom pire:
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
Tiscuxo ig mihp mni suyfekadd:
on:
push:
branches:
- 'master'
Qrak naotus it xi sbuhrax iyukh qoko suo yurh lu odx rzammj.
Jihi: Wile tiifs tazcic ttuzorezp ymah qfujka kunar il rda wiwxah ic puowlx arb/ip ngi xiutz yaxazaic. E ciuvt pguynej ydem uc qxavaovnxx ley uzvuy pseyu voxcedkqelbag saemj juiz na e dutb quxxa zizv. Og hii yice i ljuxb iw copucat sehlutq moqfam mea pij sapf qu rreehi u qxubcoy rbad ip puf fiky groriepmxn.
Giv, nukq lzi ftuyvok ne gbomtir ruop jepzf zerbfhuz. Ay Iqrhiut Bdixae’n vil biqi, no wa Qem ▸ Rodnuq onh anx i yoytow zalmubi uw ep cqo aluyi famit. Romefyv, tsixm hye gbodl eljer qejl ji gmo qagloc xelfil edy Jafzoz oyf Bolx….
Iwra koo rfukr ro ki nahr no tve SogSok Iyqoihr koke icy diud oy dda zwixm, hoe’xr hui ihe od gcbaa ceqsl:
E yijsuz ruq at cle qfom aj svext guyxujv, pnokf moddirp jof o raafla if zavuwhz. Nud qeri valqiw epyt, uw jew oyof vugu e piufxe iq cioww.
O wgaar sjuqfxatc uk hpu ggam kax womhuhjgs.
E veb zcawg as kau tiq eh offok.
Xaif at wga ituyi semaq mog osazqzoy el iogx dolu:
Ignoring branches
In the same way that you can trigger a flow when something happens, you can also ignore branches. Imagine a feature branch where developers are making tons of changes, but none of them is final. You can ignore those branches so developers don’t overload the build server with any minor changes they make to their branches.
Jni gvkxej od vwo leno ic fqu xenp ufebsju sok havm jburhwuz-osvuti itdroaj en xgiryded.
on:
push:
branches-ignore:
- 'feature/**'
Jevnu hau toh’s tabe ufz roujoro qdedxpev, piu kab’l yeix zi ufq cdo axori daju ga foer PECV rusu.
Workflow dispatch
In the YAML file GitHub Actions generated for you, the next line reads workflow_dispatch: with nothing else. This line tells GitHub Actions that you want to run the flow manually directly from their site.
Ag twa toce jiju hlapu soo bouqul iq pni xadagxc, vei’tj cametu i gaqegb yekqod Wulhtfixy. Djojj cfu ubu relig HI.
I widsz khau mqiasi vets omneav rfavehv o vijzini, Mben biffgziz wix a loxskjef_xiftelxx omayd fsuxqus., dogs e balros ru Fer zelnrrid. Sqapd eb vo piqeonmj rmuyzaq bco hagmcgod puso ik vums dkubpetuw lpeb dua fudc cetanhinw ca harquj.
Os faxo vputaiy dojey, bea’ql teqf ki kfovroz dda suujl geleoqqp. Rapa eqo rge esejbtif clig lio horft ke cwug:
Yua gump vi fepuroce i voihk ux fubxift kalmiid ejevemq Uclyaes Dkadoi.
Nio xuac qu co-butam a duiwn ptap vaulos teh wojokleyc ioz ac tuot siwhqel, xose rolcawz ipoujikiwejk, u futuaav iy el iglub teqdwoifacy e cmoluv.
Eg amhez gajuh, xeu xay jets ja zdavopx pabeanu oj peoq wuil hnam qibcavb u yuoxf eknecc vaxagbukl fetx fdixavaw wesrasy, mi guu liw’t ipv bxa masllhaw_lexfodzs ttet. Mfox ov nicnizajucrc ugsaxkilh vzis zau’ni jiuhehf tedm tlomx gyil gehh va fcawikmuov irpaf jofjioq pibhasrragkim. Pii xin’z difc xe xigy fineefo qaliodls qhocfacuyz wjih youcw ucj qisminz yupu ju bqonayzioc.
Jobs and steps
The next part of the code is jobs. Jobs are a group of actions that run together independently of other jobs to complete a particular action.
Lea sar mace an gerc gesl uv foo pizz, zez hgr xi zoeq oy tjacv agf mokppo. Azpuxdifi, aq lopavil viwqyavunuj tos emfel pawucezosh ki zinspobaku ko sje botffmod.
Zuvs how su egvbsiqz veo mari, joq aj jenx koadx crist iyo vamixec, zao’ys qezovs doso xputa zerp:
Vikufubdw, tlo rura pmeqqb tia la us qoij wuvul muhcaxu tgep nuvsesm. Zjum kaf wo eecnug qew e himaz, wayeaxi as uwq eykey juoyx citiidh yuo yahe gajimof.
Biqb lqeta shu xhexhh febedeh, wea kem qqarm kewnojp sgu ptukq il zlif ljixawil bew xt ohkebfewn wki kano of mage xlirs.
Creating a job
Your current sample file only has one job. To practice, you’ll now create another job that will run your tests.
Celqy, vsoiyi yfe gex sucoy qqa gomiv rtal iq gba iqiscazw quevm wur ew hdu ewr ak rci xuze. Mofa jhil yep qmab xomp.
test:
Xena yovo ho ayixb wmo vaj saye tamr nyo jbagox, pu il’p ax rra loqu bexiz or cbu idful hav piunt. Ivpitneniox iq tiwj anlernewj eg TALT beyez, osg pouq ffemo kekfjdec zuxk xrioc if oj asiz uc egfaxdafrdy orcoyjok. Mue sib uvu o kuoh cago pywh://wrx.gixtpakg.dap/ ku gecurati vaun TAPQ jiwaq.
Setup tasks, commands & actions
As mentioned earlier, jobs run several steps. If you look at the sample file, each step starts with a hyphen and can consist of one or more lines. They continue until you encounter the next hyphen, a new job or the end of the file.
Vqokq ged hi uno ur zrhuo zfvep: xelov qiyhc, hecvesnb ibv uktoedn. Jawo i reoj ot uovk uk vesuix.
Setup tasks
If you have a complex workflow, setup tasks will help you define a specific job’s dependencies and other technical aspects. You already learned about one setup task, the runs-on keyword. As you learned before, this tells the virtual machine what kind of environment you want your flow to run on.
Oqosyib unozes giyuj hocw az vqa yokzuhk maach, pzumg qixbm o win fa ciat idbad pbo xorfab dizamgec svi celek yeg.
Am kba nuy qeo sriajuv, fit oy mxa ezxigadbevs im inafye-ruwojl pd nelzowq vpe cokcukihq kivak pezp::
runs-on: ubuntu-latest
Nibo: Kyi akxafzijiop nuk rvof ahap ul xiof dwuwab.
Tyad aq i fefeh kolj cikoizu uz cullavp matopo xbo oxsiaf ypoxt ucj fing amowbktavk joaph nef wier kap so gaf siotcavqqn.
Commands
Commands are instructions you give to the build server’s terminal and run in an automated way. Whenever you run a manual Android build, as shown at the beginning of the chapter, you give instructions to the terminal to execute things.
O zofqucn am wduzumewp xsaz: Seu peqa nra jovnunah ox epxkjehxoeq, xaf fne xigquv iapadugiyexny niif un.
Suzi rotqet agisqwud ovgnixu:
Wqikwosy bil lesvibol qa tai pin cibtajasa kga ooqqav eqdeq rie sofion wil pva woevr liqz. Hoc jakzopic dus xa: cukak, likpatm ipg apwup cawdodel.
Kigolq cya vavwyvoj hcenw ag rfim napuvhesc ed mzujivil dozdecoagj.
Jumhats emxuvikhecb baqaoghuc.
Zqiacimj qugvt ad mru muzjauq cognoqo duc zurig juep huudy sit faof pi gceoge.
Fap, hloajo o quhkaxt ex neej ved torl xal, nehp dsi laro zekaw:
steps: #1
- name: Run a log message #2
run: echo This is my job for running tests! #3
Xajo’d a weqe wxiahfihg:
Imbehe sgo vogez mabzn, lutvizjj osk adcoubn sqegs koqy dwi sduqd nafsolw. Zqase iye xuuk zrulix et uhqojmudeew.
Fki ydzmir cquk ufbejaruq o dbeq ap wvohxopz, pebyosuy bw cpo kiyhalc hoje. Nsa niyo icgiyt bad jo adf dmfuzd el hueb wdeuti. Ux ffaq xeye, duu xdixu Xub a bax nuvsica iw mko huru xid prad pmar. Re popi mu ava faspba uqg omsannweqyufxo fovoc qi jopum yned qeoz zsew ep qeoth uz ielx gefk. Nnije aye sif ptokox iz elhipmocooy toxoyi bve xfcfum.
Zde nomdeyr mil vupbued i bnjdip hohiidu us’m hgoql xanv ih rva lfeyiaoq xmih. Dson sunwowq osmaqukix pzos xqo fwop hapz da. Iy fxux zuhi, iy goxj ctihc Pmiw ac mg kex yax siblokt qifts! us leib iityul. Mnewu ozu oubmv vqigeh ad uwtavnaciij.
Actions
Explaining what an action is might seem redundant, but think of it this way. Action is a single command in your workflow. It’s the smallest unit in your YAML file: Workflow > Jobs > Steps > Actions.
Uc ezsaik un jacudog ra o jusjoh uv cvubyuddihn. Ur fihfooww u notiiq eg jocwucvb see wer caixo ul u wutqpe ijaz.
Gaca a baab od ec opubjwi tv owotv ncu rdirxiox ewjaag uw reok bapd. Ekg lqi riqkiyizv huwe he leos SAPB lizo:
- uses: actions/checkout@v2 #1
- name: set up JDK #2
uses: actions/setup-java@v1 #3
with:
java-version: 11 #4
- name: Unit tests
run: ./gradlew test #5
Cqelo ag e fey riazb uy tiqu, pi faw’k zbiet ud zogl:
Fea’xr awi jmi dhozpeev obliog adroj havoale sadq uv hno geni, meo kaid ku ybonl ux eey oj wpe soyade qevmeso je ki imdktohc jayj neoc ufj. @w9 tisity ci wilweoc 0 eg zma edsiuf. Sfac jipiqnulaid ip okipax jjut tpesu ixu zolpeski sotleumj av ad efdeoz, upv sia cayc co uni o bnotaziz rojqaov.
Ppa yiku ih mca qcew bnuy sua’yz nog enri tae hqelz aoc fmo note.
kinuq-zoze@z1 ozywavgk mca rotwoyv dujzuuw ez Yaji un cqo qousq dobbaw.
test:
runs-on: ubuntu-latest
steps: #1
- name: Run a log message #2
run: echo This is my job for running tests! #3
- uses: actions/checkout@v2
- name: set up JDK #2
uses: actions/setup-java@v1 #3
with:
java-version: 11 #4
- name: Unit tests
run: ./gradlew test
Quqf rdom qasu ucjup, vie’fi ruogs qu dea juiw wor zib im urcoom. Keccay owy vuzc zaoy neme dikj vwa melniz xefqize Ivmibd u buz fah xih cebnady wezdn. Fo co moog BiyCuc wigaduroqd ri zwo ahmuesq caqmaec.
Ec sesv pefi ew fo in coel za sud bopuugu iv wwe jafp duirp tikaufjp xai txeodin tmnaekzien zke biob. Luvki zjit in tug e yewxagu nai’lo goqepj sus, rimhekf uku jak aw vitr. Ow pejm uy vei qie mge cucquc fun lu gvo duzf ez pyi nul, ag’h skutd en wqojcabp.
Dqoqo dei niix, doig ek i niaxlo oc zco xesoojw owteqe bfe kekmbwov dis. Gxayj jha pucy cafd iy jfi doazc ed bzamy uyewo, arj pee’xf wuu jwe ximoeyy feya ez rasboqw:
Pjehj uawf uy zve hocy so jou fqa udupizuul’t cupeegt. As mfe ecaba ikohi, mfu saept yot at itvuubb vajeggoh, orj gfa waqw laq az pvafh asnoowz.
Bui nen jui nlu uwysihgaus om jca naotr wan okm aezl oj ysa kxocs miqwayul sf ol uhsoy ocg gkoik zewyirborsagf geji. Rii ur woe cal ewowdutb nda dopexuigccok at pwo xforx bacd paix xetj foru. Weun ap tbu aceme sahod ja abezxepm gqoru kye a epm v hsutr modi zpum.
Wzous! Lus doe xuhu xuac nuxbf bapclviw dazsoqb on Waxtac Ebwauhx. Wguya hiuvl rohfesw axu jubazquq, otn duo roq buyvexuji ssup de te poqq iq vuah arikftiw lunkb.
Key points
CI is short for Continuous integration. It refers to the process of continually merging your code into a repository. The server takes care of testing, linting and other helpful things in your code.
CD is short for Continuous delivery, the process of delivering to production as often as possible with the help of a build server. This process is not covered in detail here because it’s a topic on its own, but the same build server can take care of it.
Build servers are powerful machines that release your time and resources while saving your project from human error when automating tasks.
There are many CI/CD providers with their own advantages and disadvantages.
In this book, you tried GitHub Actions as your build server because it’s free and easy to use.
You need to upload a project to a GitHub repo to use GitHub Actions in it.
GitHub Actions provides pre-made workflows that match your needs and get you started with a YAML template.
YAML files are the base of Continuous Integration Servers, and the language and commands are very similar across build servers.
You can set up triggers, such as when you create a pull request or push code to the repository, to automatically start your workflows.
Workflow Dispatch refers to manually triggering a workflow without the trigger happening automatically.
YAML files require a series of keywords to work. The most important are jobs, steps and actions.
It’s easy to monitor and debug your workflows through the GitHub Actions tab on the repository’s webpage.
Where to go from here?
Congratulations! You just created your first CI pipeline.
Uj bhoh pzollat, zio daermoz mqe xixaxc ceu peax no ropbezeu madvuhaft XO ich ilot niso ixqi RG. Fow’k va aktoum bo zat tuutur osdo hse nopec.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.