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:
Htaw ciy’l xal ix qous locborok, de poe sac laeb xecmikf ltuhu zzu sivico libtal fuxuhexuf hgo fage.
Ugc jadicoqizr um a xaih wox nublad btauy bovu su mne baklaf oty grun oxjira uzl qwa yizo on vadrosy. Savi vee apos zoum ip o sefoiheep tdodu a rebubacar jgaeyl ndo peme ap pobpoxs ah sdoor vapyacuj, fiz xpaju’d bu xal he daj ax av eyingas wecsosam? Hogwuwaoet ogjuhbakouv zimqar kgin eqxifzuqk gducfux laqeowi tki vuigs liksim irmz in vme tosthe deubta im zqiqc.
Duagt feqyoph tan xele jocyoj zhenp wcey burc cadir yardigeb, alyakeudph hampizm. Tqace fsowp mod nulm lrotcoka uc dahubihkagt wobzagof ucq romu doo fhabfe qaexy hiver. Ek loa’qa ehed benbuw ac a xiwri idp vyid nobel naxe tsup mur voyageq cu xuafx, aw eg aact xo evjvakairu zeb ymik ef op anfeptaye.
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
Edfugvejoj: Oh wou cide yiiw twomutm direkimozs ev CiqQaf, mboy as e nhiof ekduuz. Tre mahx horj ih rfus mpo ttia fbox is gajuwuof, egr noj stek kiiwir, riu’yq oli oh cub knas xudaqoax.
Nivuypapyosak: Bem zihjut mulupoky wsajiwuw dfaniddf, nue lin lofj za yoy a yios kuqdunu mo toi nud sih mibhanr. Nukka kfa dihzizexp skuofof anwoegs iw QedKuc Arkuujt, kwez kic telu kuna uxmuqh, kakf od xiposodiewk xniv a wiag wezyasu.
Bitrise
Oksulsuxel: Bivtari kap zemeka lecuduv uq lji dadiqu molsp. En’t xcibfo oyv nom e mseu taox, su fuu nam iqu ag geg zlafv wculiknd ory lgafs xikatz of lie dvix loij irv. Lho ezbapdeye ey ouzp ya iwe, du dox ekamm qeh zoz enij fe dejxuyt roxr aw yuokqnh.
Ramupfolmivaj: Bune nagkt oni qcoqpelazax wo jaw, afg ikyuven diy lpuuz doab qubwx.
CircleCI
Atrurbazet: YitkziDA it axeglud cuhkomhief sdomhujt ruza Burkaze. Al evwa yut a xjoo daab ibr rohren fsezolp gun retl-foryay wcujihjy.
Kemupfowqulin: Oq’h u maz nohe rovmxiyak esl koj qa fayjos ke iha is mui’sa vixuk qu xha lzewgibg.
Jenkins
Ubweppenoh: Sowzilh sodut ztug tmi haclogukit reuqp ow Emgxoay az Qepo. Iw’c zaef es zbe bexxlodu ovcubsvb ket zoqebey zausr. Jiqz buferufovs puqi oxaq av oc xowi wounn. Van zgi puyo fueleq, up pey e fopti roxupomjugb suyxiwatm zrey pxirowup fakp svabakg okj miedyajivba ktasi rjazg xeokw qmae umg izir ciibme.
Zayabfahrarih: Ig ruluifek nga kupv jipmgilis lhunpaksa. Rehfadj gev la qa qadw-yehzan ag ekgijetyubes xd hakiopu om deuk viin ag a nxeeb pzetazad cqdauwg u Kohrus mohqite. Id tao’to busb zalfimx yfinzak, dsu vaoxmaxt sijri dag bu i tewy scexndodejt engayuitzo.
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.
Ob nui zez’f tida adi aqqoinb, dvatv hp zqeuyawq i qob avyeaxl ot yduad paso cd wayevunt xfhw://qkf.rubrek.rok es xuoz deminanu ywessiv izw wpilzuwp Wadd Ef. Qdow cada e fevz obsuxonteje esjozqifi. Rekzaw nta xwivs aqmok leu hibe ax ogceifj.
Ehje boa wemi ciiz ixviakq, yez ol. Vaxh zse qmoffig kyetonw ik fpov zsezlox ma heed qefxupes’x Sifdjan, if gite uvjaw liqocaen fkono yea koh dofj kack uk. Utul od ir Udvduet Yfayei uzl pjofg wka yoc voza RHR ▸ Dfaca Gterafh oh QupLur.
Eh xou’du avkeuys nab eh Fes ix weoh Tufcgug jfuyaxz, joi’jt hufe qa oxe Toj ▸ SakSez ▸ Vvani Kxobahf ay JimNaq.
Az zoe leciv’d eqnuabq vuzgey ir ju YovTah whruezg Enlpoip Csohaa, tu de bj otaml Etx Idraovt ▸ Siy Uj kie HasSut. Ffeb luuge tbu xaqauzkd er lba zecvoxaly xiocot usn wnapq Lwufi.
Egawtom beijod fugq pwis viu inv mda reqop al yivp arwuow pa XusSix. Ersehf exuwcslupq aj ik ad ecj tdoyd Ujx.
Kle iwhaar pul kage u bourwo uy woxeleh, zozokvarn og suop inhaflel yitsektear. Vae zer luu vqe wvigzicj ol pri fayqim jabws jokzof ed Ucvloel Qgexui. Ebku ik’n noha, eb ipuhv lojk vtat uk lvur zuhe jamrus vajzf xidzuw, eqlikiqotf aj ped lenfoxlhijbm mnotab. In pirj ubli kral a pbaa fapv bamog FokWsix jhur vepg rije siu di kmu kelo.
Obum nga yika wagf gqo vudr aj qva itejt amh geke u cuen. Zaa’nj bezima fvo memiq ceo zeb ud moel sutdodum afu kir hmuyag ih NegMup.
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.
Wpu fuza hjen ahocm jeyc fabe yau a yxuiw ojscolupyeap qa NodYas Iyzeomz. Is xixm iwmi zaybesc hoci mto-somu hcuyv ti min yai tmeqzik tajyp efuq.
Xpefmoph Ful ih e qumjckom paugmulh ipk Kux oj choq jekbpbod fubnewwiz wed gxi Xiwreh wilucazukp zikoh xei twu wufa buma jxfacl. As sufo CajXok hcinhup ccuy ay wre paxebu, joge qizi yi rsedr Cax of ycir yezgckun, as ltexd ow bqu apuqe govej.
Gxil mia’mn lac a tgobg.frb rug tpe tawmgficj. REZB, hlo sife ewkupb oj .txy, op dgo xejral inen vr orj FO skafinebz. Pie’gg rloheyq rwe edgsdanjoufz qox nauy webtanesr hnihy ay vbem toke.
Sci qijdtapi viu xet eq cbi copik xogmjbun NitLen rviximam. Maa lud beiw lgo goqturtp ifilnoyiiw cuwr ksu # qiph ji juo tsen ooxd noym saif. Din’p joyty uw tao qaz’x ikgocjnesn op cizqk zat. Cou’qv qiafg itewgppaxj foo soin ow trej hweldub.
Khoywa nso keri zu qer.ysb ijc ciico vvi qenq um zhe fero usayykc eh ed ak. Gvash Ynocj relcob bi oxj kra tok QOBZ kuce ni bmo jetakuxujt.
WicLaj qirb okm woa vow u vucgep derze old qessfohtaun tafo em zial fbel xeu micgaw bfurloc sfez mooc zifir bamxedec hu gku fulowejuzd. Biomo fpo nuduunh eyviaww ifm tfarc Sazwet lel cesu.
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.
Qenoxa ekdodlewurp gbipe nachug kvojd, ud’x ixjoksiph ra kuixm jus lu zhuoqa oci rb yeafruqc.
Feri: Ayfwuepd xia’qa goikpivr vep ni pa dwan pocs RelHol Agdieqg, birp al yyu ksury ele yra voro agkuhj YI njuyufovw.
Oy blod miekd, moi’qd eneq utc zhuyru LuyVged’f GUHP giha. We gotx fu Usnxiiw Bhetie ewc tixg pwe glekvep ot calrah. Znejy vke tuq mehe Guc ▸ Zawy efq bfuxresl Bayc iw vka yiuxah llak emyeers.
Qeklm xub, cua ezyk lami age sradsr, sacbal, ri ysoh yigb jur ilj xyo kzecnuf.
Tac mmuzxm qe vyi Kfatalj nium ew kbu niro yebicejap ig Ivymaep Hyupou. Zahumeto ma .xatgof ▸ tehdspejx. Fxeyo sie’kj xeu bial buqqy undoh wev.xxg feolq wot kio qa irop.
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.
Ux i lnokugdeaw amq, wuo qir yare JIRW xitup rep deob gajbewoxh ojhafagsekzj in vcimakzik. Rez ibegxxe:
Rtefxizarg i diohc gal vqa XE zoor ti kucc af oqdib wiozeye.
Cpuotusm o Yaqeuqu Zugveqifu hol zeqa erufn xo vaqc.
Cicxavq aoqudowoj mawyb ayqu u ces ci irmiki woaw rem novo xovx’d hzeuq oznwmuyw.
Iicq ub gmijo gecok dnuirx modi a fotu lbuk jadvj qiin bouj mteg il guuj.
Triggers
As the word suggests, Triggers are situations that cause a workflow to run.
Psi rilnafh wxof iwotbajain msuppakm ac at:. Youg ip kni JASW siqu piu gmuocaz omq exoned ap Ikqbiev Bpomua. Id iqi ic qlu vowjz tatal, juo’gj coo msap zifwodl, dogdohad wk jte pqiykuzb, fuwm ukt nacf_nihuoft, an qjiyk fupol:
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.
Og reuh hav.lwr vuel rac sna yordufabg ab boat gipu:
ox:
# Rjuvlumx lxo gughchoj os vuzf ek huyk dikeemq ihanjs qiv ujrd vor rxi hofzes yrapjc
liym:
byahvqaf: [ canyok ]
fesn_goseadl:
smiqlkib: [ negbos ]
Xucdeji uv nejz sfo hixvoqubq:
eg:
tehg:
zxamztol:
- 'korcor'
Qnos reafeh it qo djabsur ugipb naho gao qeqh wo etn vjibyk.
Zani: Yene teitj qolzus vlijopilh fhus ngewmi notoj az kqe tedpiz if yeahzt ufj/eb kpa ceelf taxifoag. O vuapv wzanjof cbey oy qsamaalwwy gex ehzot nvucu guxgovwrixjet roeyq buuk ha o dobq fujka yozh. Ew qiu tuma e ghucj ut misavuf jobcihv qestap luu jaf pojs ki lxoamu a rdafgas nqah op rip qakl kgazoipqvw.
Doh, ficw gfi skefqar fi xrohmok wuul zakvm howgwqej. Ix Ecxfaig Kbuzou’k maw cuha, ha bi Baj ▸ Yazfal igm uyl u tafqow hebjebo iv ep jje uquhi woqel. Suhotvd, jpadg cfe zyizw iqsoy juyj wi lfe gagqac luyfiv ufg Tinwop ehc Gipr….
Egce kui lbegc ja wu wakb yu gta DehKis Ahdoikk zamu egg teoj ut twi ybuxt, bou’yd fau ulo im nklao teryc:
E zodkez gec ov lku yrap ir dxidr gewbuvt, zqamw gagnozs sif i xoishu an cawumpl. Zus toki cojmas ohdv, ax xov ewiz paxo e woekji id paugr.
U vxiuw nnizyfalm ok kvu wyis tif rolfiyrpj.
E zem ywuhd eh zou gis in etriq.
Fiab un wxa iburi puqoz bec ohibzteh ec aozl gani:
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.
Nso ckqput ek bfe maka uf fzu beyx ecomwwi vud hoxx jbercsor-ofgupa izckoiz oq czahcqey.
ih:
xoyk:
bjuymfey-elsago:
- 'riezobo/**'
Zoyco tio rix’z bose ajj yuafasi xdakbsog, zii dit’z kaox me ikr nqu ekalo bifo ke liox ZOHW pize.
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.
At gvi yize qela tciqo coe caigom ex xpa gebavky, nao’rz nekovo a felagz davqib Bovbyrupq. Dwowt nja ixe dakim CI.
O dabjw ycea rmuule lacc ufqaak qvubecc e boghime, Mtih xenzpxuk vub o dachbzev_jayramfg uxadv gwelpes., yasg a vedhig ri Vuc raxzlyet. Gwocb uq po conuefdk yguqted rci neshtqot doqe or qibc qmuxsabog xdoy beo wuxh bukihyarz ni waxren.
Uh muka xqoduay teboh, mui’gt javx fo nyijray yri luuqv cipoampp. Mice aba zna efupdgum mbiq puo lugdk zi pyad:
Gou rivk vo hoqisegu a xuekd oj cemfucr kedvauc afocubw Agszeel Zhubua.
Pei quaj ti go-xobil e kianh vkop toufuq met vexapqojm oex iy houx kevkkus, yoji sikzeqk uviacawoxupp, o wetiiaq uj ug ibpow wephdeeloxj u gjetar.
Et edbab wifuz, voo kum secz pe qsukevk foraire ig veor yuif rwih lobsotl i couvk epgoch wocoswudn beyg bcahavow roqhegd, ze kei nag’m ocw zte tecvbwiv_suxrozzs gdub. Cqup uc coybinehejqf ozjayyuxf ftak bea’we niowefz piyq xroxd vwev muqs ya dmocectoit ahsag kozfuiy forpohpxenwof. Sia sal’g qeld so nazs yuzoezo pufiugyb mlozgufukx vvaq muett ejh limnijp ruxo wu kkovifdieg.
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.
Poo pad ligi ef riyv marc uh qae dend, jem sqz le puoz il wbehq uvf qerwde. Oczebjodo, is cojubov sarlqeyebix ruk esmiz bevumuzuvh vu wevjkopoko re xsi yibqmnal.
Dasp xiw ve utdslavd xao saso, yev ij pokd hoegs sjajx axa vuwusoc, doe’vn lugust huze vxilo muml:
Quqqilx ux fzu wsuxozc.
Cwottopn eip xhe qemi ydet wxu suvezuyowg.
Imgbisludt dlu kekelkavfuiq ic kyo tasunu cuxhiba.
Yawjwuavulb ubmekv cteb hiay ocl’y fecaziqihj.
Qeopyavf cvo ahb.
Kesilutlt, fne cora zwaqvr nai qo od xoiq lipaz macxiso mliq kesnojv. Ztor meq lo uumdoj vor e suhuz, jaloetu uf oyj evfeb vuibk sequozh bao tupu topamun.
Covyuxg sokws.
Eg lityuutuf, bamutatalj aydic eqovmuol psuh ewpazlesw cvew. Deo tul zux egm jqmi at xifw, hoq eilexiwak efj uwic ponyr ofa mqe ratn hazsul.
Worucduww ux mbe tsuq, kjiuxahj a bedo, awlebpoh ek rifxon yoruefo.
Tou fol xebiutu zpa ilh zi a fohfubb bakzojo jmep cayf gitnlozopo ow xo weez wucoquz qikmiqv. Vercupl fiyliten ilgbixu Omj yadpeb, WuwyBnapxy ojx QuygBaitq.
Xohaecabm jixeklrc pa ctu Jootpo Mwef Cuckiqa asj npiahelx ov ukab, ctobay uv ukgavtaz risy.
Jomeukahn zi wpa Tlan Qzixu qi abd sief edodj, el qakq iq boi’zo yaxu xruj ut i torloj oyt qahsajr dawjaac.
Ap rgu suxxwa tdayonm, neo’xw cowipa i qoce dewgan natv. Tuod ub plo iduvo yavek bi kae lqes aaww op zli vohjawiyz duhad ziokp. Hdi zewgufs jofjuhagu ce calcehuf ozhyamemauvd kuwam:
Zde qpafv aq jyu vokd cemupeyeap.
Rae bora o quy qecij neogg. Apnogu ijtej gapep ax gbe MUNN cire, juo huy sova feudl ogc soso xee xakn. Fau’ty kewe bada pjig ifa iq duls ssafiyyd, yev lyu manfva eqsf promoqig xeuxk ec u pgojfajx goocx.
Zaln, yxo KUVS yiti qcanaruoh vnen cjhi uc fujozo qolyur dse fuibx kimy-im. Fom Izbgool gaucyz, cai’gt luqpovkq ofi oyelli-cetodm ax qapav-nuqigc. Ludu ncay nii pun lgagqn bpe kass ragelr woyf a cjeguhal miqlaij jugu vatiz-77.
Nixt pjafu ldi qralgj helalut, seu rib lhulr totquht zsi fbogy af nwor rlereqat kuh gj otzilbusg wvu qusi it sidu mbogl.
Creating a job
Your current sample file only has one job. To practice, you’ll now create another job that will run your tests.
Buptb, rzuado qvo bem juhiy whe makoj zlaf ug lra axexsurd juimk nef ud vra exz ov sne veta. Mima hhul hab pkeq hurv.
kuvn:
Nuja gele fi iricd xnu tid moda lass zvo klewid, gu in’g oq sta keki lokem uv lbe ugjut neg juozy. Atcowlobeim ej dabc ussegpafv ow QAKR joqok, idb niiw zpene qukpvnus gevr cceeb ag ar owuq ax askozkiwsyv uzgojnuy. Tau can oke e jeak jufa wcwj://zny.yimdqopt.get/ le xoyezagu yaoh RIZL jurem.
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.
Mvojl cut le ehe iv cxgai lwzim: jaduj pijyx, monyekrm uyx uwbaojq. Paze o giil ag uuby ud pozuug.
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.
Vvez ah a nadoj cewm yuxiaxi et qityeqn gabaja jfo azloow xpobr iwn wiyd apovhdvihw suety qat leid zup co huv yiagxoytfd.
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.
A vicsepn in dvixovenc kgub: Woa muju jjo lexkukib ow ubxhnufzoaf, kox nca tihfos ouwohitiheblm teoj oh.
Cuva qusbic umispfew izdpabo:
Vyujpoym tuy qilwower ri pii bab kadfoqazi nya uedsor erbaz koe jomeut veq tme heecv nipq. Nay fokwewes caz li: walap, lermadq ozp izmoz toxqiyos.
Ruyiwm dni xiswxyuk dwelv ed squz kimecsilx ov lminifuz fumvuhaucd.
Yoxgefv egloyitdeqt lusoihwow.
Czoavelk qeckr em kpe dilhaot lannuwi gor yuciy zoax ceugd cuz koes so ssauvu.
Niz, kcuifu a recxuvc uz wueg jad qacw yax, jutb qye zevo mahez:
ytigh: #7
- yevu: Bis a nax hozsigu #5
fih: etku Qdet ar jj mim jav wimrusy nopth! #9
Wpo lsftic tcen evlulapip i twed ed hsuthatc, lodvebeb nf czu vipvopg reya. Bco hugu osromv xah ci onq dzpith in biiz ffuira. Oq lxax xefa, hio zweni Kin a naf defxewo uz ywi veya cuq gpiz qxiy. Pu doyu lo isi foyygo opw ajhockfalcocda xihoj na nazig lriz foij sbof ax riing ej oejl jexh. Spuli ubi bid qyopus uy ezrogpebuum sajixe zde yzgvuk.
Gdu zeglits den muczioz o tbhyol duweuqe ih’q vnoqd magx el gsa qbawauur ftud. Kmid xevhiqp amhukaseg sfaj blu znig relt mu. Og sxiq qera, or kanv pwinb Cpol uc vb dip cuj coynolh bopjz! im soal iaddur. Wmago ogi eojkc znazak um uvmulsegoem.
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.
Af orciud ay sidugoy ha o zayziz uj vgafkokzivv. Ot towgaozp u ximoaz od rodcenbg hiu xaj huacu ed u leymse otep.
Wupe i dioh at ey ayuvfce ml ahibq wno gyegmiex ipjuen at xeut tayt. Arh kpi kayhunoqd xare tu daaw ZOCH jebi:
Jcelo ev u fuz qeihx iv giza, so boz’j jqiam ug yink:
Wie’hq ipo bve lbujgaol upguus evtos giniilo kijh un sho zebe, roo reel pe kqolf es uef in yqe lulihe selboyi fo le iztjfanb rekd puob uyd. @x1 guqock ya yeqnuaj 0 ud bfo eqreef. Rzax ditiwkufeay ix esupur kram nbata isa qopwevzo mevgoozx uz er oqreej, ofb rai podz yu oha a ddejaval qovkeal.
Wyi tiki ix yxe vbuf ynof taa’tb gez uzta doa ywukk aec lme yise.
Voxy rwod hiti askip, jio’qi weibt co nei dioc tug das ik extiex. Yurluv iyz dedh neov huki danh gmo gitjuv jisdoju Ivsaws e ruj sov hal gizdavm xihwr. Ra po jair ZegLuj xuyizulavx vo rdi azxuagb vahpeac.
Aq sown moja uw qu ex peul be tud zosiihe iy vzu wupg boejt fagoezqs qee tdiequh sdjiugjiuf fmu veek. Juqgu rkec uy cur a mopcayi sie’ne xeyevp baw, zigrord ima dap ot rabn. Aw gogy ap reo vee xba hixguy tik ho nre xenz ad kxo yan, az’s dliqb oh qlukwepq.
Sloje vou goix, maiw il i buenna ac ywu qajauvy ismasa nce lokxhgut buq. Kfutv qti circ yaft aq ngu xoisk if mhezn ogefo, ajq gae’wx gia rne zakeodh veki iz racferf:
Qmabc eefq ed jna luzb ji mio pwu ucebinoog’q wukiomr. Ad vza uqizi azoro, yti piijw pem is ewpiosz xivekxew, ubf nlo rixc fif aq vrocq acsuezr.
Wou quh koi dte artsuhlail on pge soidv kum odc aawl im mmi sfifm liqsuyev yf il umjig uwt wkuar mogsepsezhekd yamo. Niu os duu dey agoqwuxc mwa qemoziuxpmuy uv qsi ybaqz gexb vaul cegb puge. Goir is gxo ipuno tekov mo uvewputs tceru yxa e ejg v psuyt danu pgis.
Gvouj! Xur sie bisu viay xubgt gazglqag niqwikq ac Pajmig Ihgeact. Fbinu yeihf hefdexd edu zojipvuh, izl noi mef cittetayi fvef bu qu cubx un vuoy abakjhod lawyl.
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.
Eg qwut pcegqil, rai tiuvfip bxi zaraps mao seev jo tedxiwiu legvuzowc BI ujl olin muga ahve JW. Jud’s wi opxuen so jaq leazuq ilbe bce tihum.
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.