Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Illum, il-biċċa l-kbira tal-prodotti tas-softwer huma żviluppati fi timijiet. Il-kundizzjonijiet għall-iżvilupp tat-tim b'suċċess jistgħu jiġu rappreżentati fil-forma ta 'dijagramma sempliċi.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Ladarba tkun ktibt il-kodiċi tiegħek, trid tiżgura li dan:

  1. Работает.
  2. Ma jkisser xejn, inkluż il-kodiċi li kitbu l-kollegi tiegħek.

Jekk iż-żewġ kundizzjonijiet jiġu sodisfatti, allura inti fit-triq għas-suċċess. Biex tiċċekkja faċilment dawn il-kundizzjonijiet u ma tiddevjax mit-triq profittabbli, ħriġna b'Integrazzjoni Kontinwa.

CI huwa fluss tax-xogħol fejn tintegra l-kodiċi tiegħek fil-kodiċi ġenerali tal-prodott spiss kemm jista 'jkun. U inti mhux biss tintegra, iżda wkoll kontinwament tiċċekkja li kollox qed jaħdem. Peress li għandek bżonn tiċċekkja ħafna u spiss, ta 'min taħseb dwar l-awtomazzjoni. Tista 'tiċċekkja kollox manwalment, imma m'għandekx, u hawn għaliex.

  • Għeżież nies. Siegħa xogħol ta' kwalunkwe programmatur tiswa aktar minn siegħa xogħol ta' kwalunkwe server.
  • In-nies jagħmlu żbalji. Għalhekk, jistgħu jinqalgħu sitwazzjonijiet meta t-testijiet twettqu fuq il-fergħa ħażina jew il-kommit ħażin ġie kkompilat għal dawk li jittestjaw.
  • In-nies huma għażżien. Minn żmien għal żmien, meta nispiċċa biċċa xogħol, iqum il-ħsieb: “X’hemm x’jiċċekkja? Jien ktibt żewġ linji - kollox jaħdem! Naħseb li xi wħud minnkom ukoll kultant ikollhom ħsibijiet bħal dawn. Imma għandek dejjem tiċċekkja.

Kif l-Integrazzjoni Kontinwa ġiet implimentata u żviluppata fit-tim tal-iżvilupp mobbli Avito, kif marru minn 0 għal 450 bini kuljum, u li l-magni tal-bini jiġbru 200 siegħa kuljum, jgħid Nikolai Nesterov (nnesterov) huwa parteċipant fil-bidliet evoluttivi kollha tal-applikazzjoni CI/CD Android.

L-istorja hija bbażata fuq l-eżempju ta 'kmand Android, iżda ħafna mill-approċċi huma applikabbli wkoll fuq iOS.


Darba, persuna waħda ħadmet fit-tim Avito Android. Bħala definizzjoni, ma kellu bżonn xejn mill-Integrazzjoni Kontinwa: ma kien hemm ħadd biex jintegra miegħu.

Iżda l-applikazzjoni kibret, dehru aktar u aktar kompiti ġodda, u t-tim kiber kif xieraq. F'xi punt, wasal iż-żmien li jiġi stabbilit aktar formalment proċess ta 'integrazzjoni tal-kodiċi. Ġie deċiż li jintuża Git flow.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Il-kunċett tal-fluss Git huwa magħruf sew: proġett għandu fergħa ta 'żvilupp komuni waħda, u għal kull karatteristika ġdida, l-iżviluppaturi jaqtgħu fergħa separata, jimpenjaw ruħhom magħha, jimbuttaw, u meta jkunu jridu jingħaqdu l-kodiċi tagħhom fil-fergħa ta' żvilupp, jiftħu a. talba tal-ġibda. Biex taqsam l-għarfien u niddiskutu l-approċċi, daħħalna reviżjoni tal-kodiċi, jiġifieri, il-kollegi jridu jiċċekkjaw u jikkonfermaw il-kodiċi ta 'xulxin.

Kontrolli

Li tara l-kodiċi b'għajnejk huwa frisk, iżda mhux biżżejjed. Għalhekk, qed jiġu introdotti kontrolli awtomatiċi.

  • L-ewwelnett, aħna niċċekkjaw assemblaġġ ARK.
  • A lott Testijiet Junit.
  • Aħna nikkunsidraw il-kopertura tal-kodiċi, peress li qed inwettqu testijiet.

Biex tifhem kif għandhom isiru dawn il-kontrolli, ejja nħarsu lejn il-proċess ta 'żvilupp f'Avito.

Jista 'jiġi rappreżentat skematikament bħal dan:

  • Żviluppatur jikteb kodiċi fuq il-laptop tiegħu. Tista' tmexxi kontrolli ta' integrazzjoni eżatt hawn - jew b'commit hook, jew sempliċement tmexxi kontrolli fl-isfond.
  • Wara li l-iżviluppatur ikun imbuttat il-kodiċi, huwa jiftaħ talba ta 'ġibda. Sabiex il-kodiċi tiegħu jiġi inkluż fil-fergħa ta 'żvilupp, huwa meħtieġ li tgħaddi minn reviżjoni tal-kodiċi u tiġbor in-numru meħtieġ ta' konfermi. Tista 'tippermetti kontrolli u bini hawn: sakemm il-bini kollu jirnexxi, it-talba tal-ġibda ma tistax tiġi magħquda.
  • Wara li t-talba tal-ġibda tiġi magħquda u l-kodiċi jiġi inkluż fl-iżvilupp, tista 'tagħżel ħin konvenjenti: pereżempju, bil-lejl, meta s-servers kollha jkunu ħielsa, u tmexxi kontrolli kemm trid.

Ħadd ma għoġob imexxi skans fuq il-laptop tagħhom. Meta żviluppatur ikun spiċċa karatteristika, irid jimbottaha malajr u tiftaħ talba ta 'ġibda. Jekk f'dan il-mument jiġu mnedija xi kontrolli twal, dan mhux biss mhux pjaċevoli ħafna, iżda wkoll inaqqas l-iżvilupp: filwaqt li l-laptop qed jiċċekkja xi ħaġa, huwa impossibbli li taħdem b'mod normali fuqha.

Aħna għoġobna ħafna li nwettqu ċekkijiet bil-lejl, minħabba li hemm ħafna ħin u servers, tista 'timirħu madwar. Iżda, sfortunatament, meta l-kodiċi tal-karatteristika jidħol fl-iżvilupp, l-iżviluppatur ikollu ħafna inqas motivazzjoni biex jiffissa l-iżbalji li CI sabet. Perjodikament qbadt naħseb meta ħares lejn l-iżbalji kollha li nstabu fir-rapport ta’ filgħodu li xi darba wara se nirranġahom, għax issa hemm biċċa xogħol ġdida friska fil-Jira li rrid nibda nagħmel biss.

Jekk il-kontrolli jimblokkaw talba ta 'ġibda, allura hemm biżżejjed motivazzjoni, għax sakemm il-bini jsir aħdar, il-kodiċi mhux se jidħol fl-iżvilupp, li jfisser li l-kompitu mhux se jitlesta.

Bħala riżultat, għażilna l-istrateġija li ġejja: inmexxu s-sett massimu possibbli ta 'kontrolli bil-lejl, u nniedu l-aktar kritiċi minnhom u, l-aktar importanti, dawk l-aktar veloċi fuq talba ta' ġibda. Imma aħna ma nieqfux hemm—b'mod parallel, aħna ottimizzaw il-veloċità tal-kontrolli sabiex jittrasferixxuhom mill-modalità bil-lejl biex jiġbdu l-kontrolli tat-talba.

Dak iż-żmien, il-bini kollu tagħna tlestew pjuttost malajr, għalhekk aħna sempliċement inkludew il-bini tal-ARK, it-testijiet Junit u l-kalkoli tal-kopertura tal-kodiċi bħala imblokkatur għat-talba tal-ġibda. Aħna mixgħulha, ħsibna dwarha, u abbandunajna l-kopertura tal-kodiċi għax ħsibna li ma kellniex bżonnha.

Domna jumejn biex waqqafna kompletament is-CI bażika (minn hawn 'il quddiem l-istima tal-ħin hija approssimattiva, meħtieġa għall-iskala).

Wara dan, bdejna naħsbu aktar - qed niċċekkjaw b'mod korrett? Qegħdin inmexxu bini fuq talbiet tal-ġibda b'mod korrett?

Bdejna l-bini fuq l-aħħar commit tal-fergħa li minnha nfetħet il-pull request. Iżda testijiet ta 'dan l-impenn jistgħu juru biss li l-kodiċi li kiteb l-iżviluppatur jaħdem. Imma ma jurux li ma kisser xejn. Fil-fatt, għandek bżonn tiċċekkja l-istat tal-fergħa tal-iżvilupp wara li karatteristika tiġi magħquda fiha.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Biex tagħmel dan, ktibna script bash sempliċi premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Hawnhekk l-aħħar bidliet kollha mill-iżvilupp huma sempliċement miġbuda 'l fuq u magħquda fil-fergħa attwali. Żidna l-iskrittura premerge.sh bħala l-ewwel pass fil-bini kollha u bdejna niċċekkjaw eżattament dak li rridu, jiġifieri integrazzjoni.

Ħa tlett ijiem biex tiġi lokalizzata l-problema, tinstab soluzzjoni, u tikteb din l-iskrittura.

L-applikazzjoni żviluppat, dehru aktar u aktar ħidmiet, it-tim kiber, u premerge.sh kultant beda jdejjaqna. Bidliet konfliġġenti ppenetrati jiżviluppaw u kissru l-bini.

Eżempju ta’ kif jiġri dan:

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Żewġ żviluppaturi fl-istess ħin jibdew jaħdmu fuq il-karatteristiċi A u B. L-iżviluppatur tal-karatteristika A jiskopri karatteristika mhux użata fil-proġett answer() u, bħal boy scout tajjeb, ineħħiha. Fl-istess ħin, l-iżviluppatur tal-karatteristika B iżid sejħa ġdida għal din il-funzjoni fil-fergħa tiegħu.

L-iżviluppaturi jispiċċaw ix-xogħol tagħhom u jiftħu talba tal-ġibda fl-istess ħin. Il-bini huma mnedija, premerge.sh jiċċekkja ż-żewġ talbiet ta 'ġibda rigward l-aħħar stat ta' żvilupp - il-kontrolli kollha huma ħodor. Wara dan, it-talba tal-ġibda tal-karatteristika A hija magħquda, it-talba tal-ġibda tal-karatteristika B hija magħquda... Boom! Żviluppa waqfiet minħabba li l-kodiċi tal-iżvilupp fih sejħa għal funzjoni ineżistenti.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Meta mhux se tiżviluppa, hija diżastru lokali. It-tim kollu ma jistax jiġbor xejn u jissottomettih għall-ittestjar.

Ġara li ħafna drabi ħdimt fuq kompiti ta 'infrastruttura: analitiċi, netwerk, databases. Jiġifieri kont jien li ktibt dawk il-funzjonijiet u klassijiet li jużaw żviluppaturi oħra. Minħabba dan, sibt ruħi f'sitwazzjonijiet simili ħafna drabi. Saħansitra kelli din l-istampa mdendla għal xi żmien.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Peress li dan ma kienx jaqbel lilna, bdejna nesploraw għażliet dwar kif nipprevjenu dan.

Kif ma tkisserx tiżviluppa

L-ewwel għażla: jibnu mill-ġdid it-talbiet kollha tal-ġibda meta tiżviluppa l-aġġornament. Jekk, fl-eżempju tagħna, it-talba tal-ġibda bil-karatteristika A hija l-ewwel li tiġi inkluża fl-iżvilupp, it-talba tal-ġibda tal-karatteristika B tinbena mill-ġdid, u, għalhekk, il-kontrolli jfallu minħabba żball ta 'kumpilazzjoni.

Biex tifhem kemm dan se jieħu, ikkunsidra eżempju b'żewġ PRs. Niftħu żewġ PRs: żewġ builds, żewġ runs of checks. Wara li l-ewwel PR jiġi magħqud f'iżvilupp, it-tieni wieħed jeħtieġ li jerġa 'jinbena. B'kollox, żewġ PRs jeħtieġu tliet kontrolli: 2 + 1 = 3.

Fil-prinċipju, huwa tajjeb. Imma ħares lejn l-istatistika, u s-sitwazzjoni tipika fit-tim tagħna kienet 10 PRs miftuħa, u mbagħad in-numru ta 'kontrolli huwa s-somma tal-progressjoni: 10 + 9 +... + 1 = 55. Jiġifieri, li taċċetta 10 PRs, trid tibni mill-ġdid 55 darba. U dan huwa f'sitwazzjoni ideali, meta l-kontrolli kollha jgħaddu l-ewwel darba, meta ħadd ma jiftaħ talba ta 'ġibda addizzjonali waqt li dawn l-għexieren qed jiġu pproċessati.

Immaġina lilek innifsek bħala żviluppatur li jeħtieġ li tkun l-ewwel li tikklikkja fuq il-buttuna "għaqda", għax jekk ġar jagħmel dan, imbagħad ikollok tistenna sakemm il-bini kollu jerġa' jgħaddi... Le, dan mhux se jaħdem , se jnaqqas serjament l-iżvilupp.

It-tieni mod possibbli: iġbor talbiet tal-ġibda wara reviżjoni tal-kodiċi. Jiġifieri, tiftaħ talba ta 'ġibda, tiġbor in-numru meħtieġ ta' approvazzjonijiet mill-kollegi, tikkoreġi dak li huwa meħtieġ, u mbagħad tniedi l-bini. Jekk jirnexxu, it-talba tal-ġibda hija magħquda f'iżvilupp. F'dan il-każ, m'hemm l-ebda startjar mill-ġdid addizzjonali, iżda l-feedback jonqos ħafna. Bħala żviluppatur, meta niftaħ talba ta 'ġibda, irrid immedjatament nara jekk hux se taħdem. Pereżempju, jekk test ifalli, trid tirranġah malajr. Fil-każ ta 'bini mdewwem, ir-rispons jonqos, u għalhekk l-iżvilupp kollu. Dan lanqas ma kien jaqbel lilna.

Bħala riżultat, baqgħet biss it-tielet għażla - ċikliżmu. Il-kodiċi tagħna kollu, is-sorsi kollha tagħna huma maħżuna f'repożitorju fuq is-server Bitbucket. Għaldaqstant, kellna niżviluppaw plugin għal Bitbucket.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Dan il-plugin jegħleb il-mekkaniżmu tal-għaqda tat-talba tal-ġibda. Il-bidu huwa standard: il-PR jiftaħ, l-assemblaġġi kollha huma mnedija, ir-reviżjoni tal-kodiċi titlesta. Iżda wara li r-reviżjoni tal-kodiċi titlesta u l-iżviluppatur jiddeċiedi li jikklikkja fuq "għaqda", il-verifiki tal-plugin kontra liema stat ta 'żvilupp twettqu l-kontrolli. Jekk l-iżvilupp ġie aġġornat wara l-bini, il-plugin mhux se jippermetti li tali talba ta 'ġibda tiġi magħquda fil-fergħa prinċipali. Sempliċement se jerġa 'jibda l-bini ta' żvilupp relattivament reċenti.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Fl-eżempju tagħna b'bidliet konfliġġenti, bini bħal dan se jfallu minħabba żball ta' kumpilazzjoni. Għaldaqstant, l-iżviluppatur tal-karatteristika B ikollu jikkoreġi l-kodiċi, jerġa 'jibda l-kontrolli, allura l-plugin awtomatikament japplika t-talba tal-ġibda.

Qabel ma nimplimentajna dan il-plugin, għamilna medja ta’ 2,7 runs ta’ reviżjoni għal kull talba ta’ pull. Bil-plugin kien hemm 3,6 tnedijiet. Dan addattat lilna.

Ta 'min jinnota li dan il-plugin għandu żvantaġġ: jerġa' jibda l-bini darba biss. Jiġifieri, għad hemm tieqa żgħira li minnha jistgħu jiġu żviluppati bidliet konfliġġenti. Iżda l-probabbiltà ta 'dan hija baxxa, u għamilna dan il-kompromess bejn in-numru ta' bidu u l-probabbiltà ta 'falliment. F’sentejn spara darba biss, allura x’aktarx ma kienx għalxejn.

Domna ġimgħatejn biex niktbu l-ewwel verżjoni tal-plugin Bitbucket.

Kontrolli ġodda

Sadanittant, it-tim tagħna kompla jikber. Ġew miżjuda verifiki ġodda.

Ħsibna: għaliex nagħmlu żbalji jekk jistgħu jiġu evitati? U għalhekk implimentaw analiżi tal-kodiċi statiku. Bdejna bil-lint, li huwa inkluż fl-Android SDK. Iżda dak iż-żmien ma kienx jaf kif jaħdem bil-kodiċi Kotlin xejn, u diġà kellna 75% tal-applikazzjoni miktuba f'Kotlin. Għalhekk, dawk mibnija fil-lint ġew miżjuda Kontrolli Android Studio.

Biex nagħmlu dan, kellna nagħmlu ħafna perverting: ħu Android Studio, ippakkjah f'Docker u mexxih fuq CI b'moniter virtwali, sabiex jaħseb li qed jaħdem fuq laptop reali. Imma ħadmet.

Kien ukoll f’dan iż-żmien li bdejna niktbu ħafna testijiet ta' strumentazzjoni u implimentati ittestjar ta' screenshot. Dan huwa meta screenshot ta 'referenza tiġi ġġenerata għal veduta żgħira separata, u t-test jikkonsisti li tieħu screenshot mill-veduta u titqabbel mal-istandard direttament pixel b'pixel. Jekk ikun hemm diskrepanza, dan ifisser li t-tqassim mar ħażin x'imkien jew xi ħaġa ħażina fl-istili.

Iżda testijiet ta 'strumentazzjoni u testijiet ta' screenshot jeħtieġ li jsiru fuq apparati: fuq emulaturi jew fuq apparat reali. Meta wieħed iqis li hemm ħafna testijiet u huma mmexxija ta 'spiss, huwa meħtieġ razzett sħiħ. Il-bidu tar-razzett tiegħek huwa intensiv wisq fil-ħaddiema, għalhekk sibna għażla lesta - Firebase Test Lab.

Firebase Test Lab

Intgħażlet minħabba li Firebase huwa prodott ta' Google, jiġifieri għandu jkun affidabbli u mhux probabbli li qatt imut. Il-prezzijiet huma raġonevoli: $ 5 għal kull siegħa ta 'tħaddim ta' apparat reali, $ 1 għal kull siegħa ta 'tħaddim ta' emulatur.

Ħa madwar tliet ġimgħat biex jiġi implimentat Firebase Test Lab fis-CI tagħna.

Iżda t-tim kompla jikber, u Firebase, sfortunatament, beda jdejjaqna. Dak iż-żmien, ma kellu l-ebda SLA. Kultant Firebase ġagħluna nistennew sakemm in-numru meħtieġ ta 'apparati kienu ħielsa għat-testijiet, u ma bdewx tesegwixxihom immedjatament, kif ridna. Stennija fil-linja ħadet sa nofs siegħa, li huwa żmien twil ħafna. It-testijiet tal-istrumentazzjoni saru fuq kull PR, id-dewmien verament naqqset l-iżvilupp, u mbagħad il-kont ta 'kull xahar ġie b'somma tonda. B'mod ġenerali, ġie deċiż li nabbandunaw Firebase u jaħdmu ġewwa, peress li t-tim kien kiber biżżejjed.

Docker + Python + bash

Ħadna Docker, mimlijin emulaturi fih, kiteb programm sempliċi f'Python, li fil-ħin it-tajjeb jibda n-numru meħtieġ ta 'emulaturi fil-verżjoni t-tajba u jwaqqafhom meta meħtieġ. U, ovvjament, ftit skripts bash - fejn inkunu mingħajrhom?

Ħames ġimgħat biex noħolqu l-ambjent tat-test tagħna stess.

Bħala riżultat, għal kull talba ta' ġibda kien hemm lista estensiva ta' kontrolli li jimblokkaw l-amalgamazzjonijiet:

  • assemblaġġ ARK;
  • Testijiet Junit;
  • Lint;
  • Kontrolli Android Studio;
  • Testijiet ta' strumentazzjoni;
  • Testijiet ta' screenshot.

Dan evita ħafna ħsarat possibbli. Teknikament kollox ħadem, iżda l-iżviluppaturi lmentaw li l-istennija għar-riżultati kienet twila wisq.

Kemm huwa twil wisq? Aħna tellajna dejta minn Bitbucket u TeamCity fis-sistema ta 'analiżi u rrealizzajna li ħin medju ta' stennija 45 minuta. Jiġifieri, żviluppatur, meta jiftaħ talba tal-ġibda, jistenna bħala medja 45 minuta għar-riżultati tal-bini. Fl-opinjoni tiegħi, dan huwa ħafna, u ma tistax taħdem hekk.

Naturalment, iddeċidejna li nħaffu l-bini kollu tagħna.

Ejja nħaffu

Meta naraw li l-bini spiss joqgħod fil-kju, l-ewwel ħaġa li nagħmlu hija xtara aktar hardware — żvilupp estensiv huwa l-aktar sempliċi. Il-binjiet waqfu jagħmlu kju, iżda l-ħin ta 'stennija naqas biss ftit, minħabba li xi kontrolli nfushom ħadu żmien twil ħafna.

Tneħħi kontrolli li jieħdu wisq żmien

L-Integrazzjoni Kontinwa tagħna tista' taqbad dawn it-tipi ta' żbalji u problemi.

  • Mhux sejjer. CI jista' jaqbad żball ta' kumpilazzjoni meta xi ħaġa ma tibnix minħabba bidliet konfliġġenti. Kif diġà għedt, allura ħadd ma jista 'jiġbor xejn, l-iżvilupp jieqaf, u kulħadd isir nervuż.
  • Bug fl-imġieba. Pereżempju, meta l-applikazzjoni tinbena, iżda tiġġarraf meta tagħfas buttuna, jew il-buttuna ma tingħafas xejn. Dan huwa ħażin minħabba li bug bħal dan jista 'jilħaq l-utent.
  • Bug fit-tqassim. Pereżempju, buttuna hija kklikkjata, iżda mxiet 10 pixels lejn ix-xellug.
  • Żieda fid-dejn tekniku.

Wara li ħares lejn din il-lista, indunajna li l-ewwel żewġ punti biss huma kritiċi. L-ewwel irridu naqbdu problemi bħal dawn. Bugs fit-tqassim huma skoperti fl-istadju tar-reviżjoni tad-disinn u jistgħu jiġu kkoreġuti faċilment imbagħad. It-trattament tad-dejn tekniku jeħtieġ proċess u ppjanar separati, għalhekk iddeċidejna li ma nittestjawx fuq talba ta 'ġibda.

Ibbażat fuq din il-klassifikazzjoni, ħadna l-lista sħiħa ta 'kontrolli. Qabbat Lint u pposponiet it-tnedija tagħha mil-lum għal għada: biss biex tipproduċi rapport dwar kemm kien hemm problemi fil-proġett. Aħna qbilna li naħdmu separatament mad-dejn tekniku, u Il-kontrolli tal-Android Studio ġew kompletament abbandunati. Android Studio f'Docker għat-tmexxija ta 'spezzjonijiet jinstema' interessanti, iżda jikkawża ħafna problemi fl-appoġġ. Kwalunkwe aġġornament għall-verżjonijiet ta 'Android Studio ifisser taqbida ma' bugs inkomprensibbli. Kien diffiċli wkoll li tappoġġja testijiet ta 'screenshot, minħabba li l-librerija ma kinitx stabbli ħafna u kien hemm pożittivi foloz. It-testijiet ta' screenshot tneħħew mil-lista ta' kontroll.

Bħala riżultat, bqajna bi:

  • assemblaġġ ARK;
  • Testijiet Junit;
  • Testijiet ta' strumentazzjoni.

Gradle remote cache

Mingħajr kontrolli tqal, kollox sar aħjar. Imma m'hemm l-ebda limitu għall-perfezzjoni!

L-applikazzjoni tagħna kienet diġà maqsuma f'madwar 150 modulu gradle. Gradle remote cache normalment jaħdem tajjeb f'dan il-każ, għalhekk iddeċidejna li nippruvaw.

Gradle remote cache huwa servizz li jista 'cache jibni artifacts għal kompiti individwali f'moduli individwali. Gradle, minflok ma fil-fatt jikkompila l-kodiċi, juża HTTP biex iħabbat il-cache remot u jistaqsi jekk xi ħadd diġà wettaq dan il-kompitu. Jekk iva, sempliċement iniżżel ir-riżultat.

It-tħaddim tal-cache remot ta' Gradle huwa faċli għax Gradle jipprovdi immaġni Docker. Irnexxielna nagħmlu dan fi tliet sigħat.

Kulma kellek tagħmel kien li tniedi Docker u tikteb linja waħda fil-proġett. Iżda għalkemm jista 'jiġi mniedi malajr, se jieħu ħafna ħin biex kollox jaħdem tajjeb.

Hawn taħt hemm il-graff tal-cache miss.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Fil-bidu nett, il-perċentwal ta 'cache miss kien ta' madwar 65. Wara tliet ġimgħat, irnexxielna nżidu dan il-valur għal 20%. Irriżulta li l-kompiti li tiġbor l-applikazzjoni Android għandhom dipendenzi tranżittivi strambi, li minħabba fihom Gradle tilef il-cache.

Billi kkonnettja l-cache, għamilna ħafna l-bini. Iżda minbarra l-assemblaġġ, hemm ukoll testijiet ta 'strumentazzjoni, u jieħdu żmien twil. Forsi mhux it-testijiet kollha jeħtieġ li jsiru għal kull talba ta 'ġibda. Biex issir taf, nużaw l-analiżi tal-impatt.

Analiżi tal-impatt

Fuq talba tal-ġibda, niġbru git diff u nsibu l-moduli Gradle modifikati.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Jagħmel sens li tmexxi biss testijiet tal-istrumentazzjoni li jiċċekkjaw il-moduli mibdula u l-moduli kollha li jiddependu minnhom. M'hemm l-ebda punt li jsiru testijiet għal moduli ġirien: il-kodiċi hemmhekk ma nbidilx u xejn ma jista 'jinkisser.

It-testijiet tal-istrumentazzjoni mhumiex daqshekk sempliċi, għax iridu jkunu jinsabu fil-modulu tal-Applikazzjoni tal-ogħla livell. Aħna użajna euristiċi b'analiżi bytecode biex nifhmu għal liema modulu jappartjeni kull test.

L-aġġornament tat-tħaddim tat-testijiet tal-istrumentazzjoni sabiex jittestjaw biss il-moduli involuti ħa madwar tmien ġimgħat.

Miżuri biex jitħaffu l-ispezzjonijiet ħadmu b'suċċess. Minn 45 minuta morna għal madwar 15. Diġà huwa normali li nistennew kwart ta’ siegħa għal build.

Imma issa l-iżviluppaturi bdew jilmentaw li ma jifhmux liema builds qed jiġu varati, fejn tara l-ġurnal, għaliex il-bini huwa aħmar, liema test falla, eċċ.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Problemi bil-feedback inaqqsu l-iżvilupp, għalhekk ippruvajna nipprovdu informazzjoni ċara u dettaljata dwar kull PR u nibnu kemm jista 'jkun. Bdejna b'kummenti f'Bitbucket lill-PR, li jindikaw liema bini falliet u għaliex, u ktibna messaġġi mmirati f'Slack. Fl-aħħar, ħloqna dashboard tal-PR għall-paġna b'lista tal-bini kollha li bħalissa qed jaħdmu u l-istatus tagħhom: fil-kju, għaddej, ġġarraf jew lest. Tista 'tikklikkja fuq il-bini u tasal għal-log tagħha.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Intefqu sitt ġimgħat fuq feedback dettaljat.

Pjanijiet

Ejja ngħaddu għall-istorja riċenti. Wara li solvejna l-kwistjoni tal-feedback, lħaqna livell ġdid - iddeċidejna li nibnu razzett emulatur tagħna stess. Meta jkun hemm ħafna testijiet u emulaturi, huma diffiċli biex jiġu mmaniġġjati. Bħala riżultat, l-emulaturi kollha tagħna mxew lejn il-cluster k8s b'ġestjoni flessibbli tar-riżorsi.

Barra minn hekk, hemm pjanijiet oħra.

  • Irritorna Lint (u analiżi statika oħra). Diġà qed naħdmu f'din id-direzzjoni.
  • Mexxi kollox fuq PR blocker testijiet minn tarf sa tarf fuq il-verżjonijiet kollha tal-SDK.

Għalhekk, aħna ntraċċajna l-istorja tal-iżvilupp tal-Integrazzjoni Kontinwa f'Avito. Issa rrid nagħti xi pariri minn perspettiva ta' esperjenza.

Советы

Kieku nista' nagħti parir wieħed biss ikun dan:

Jekk jogħġbok oqgħod attent bl-iskripts tal-qoxra!

Bash hija għodda flessibbli ħafna u qawwija, huwa konvenjenti ħafna u veloċi biex tikteb skripts. Imma tista’ taqa’ f’nassa magħha, u, sfortunatament, waqajna fiha.

Kollox beda bi skripts sempliċi li ħadmu fuq il-magni tal-bini tagħna:

#!/usr/bin/env bash
./gradlew assembleDebug

Iżda, kif tafu, kollox jiżviluppa u jsir aktar ikkumplikat maż-żmien - ejja nġorru skript minn ieħor, ejja ngħaddu xi parametri hemm - fl-aħħar kellna niktbu funzjoni li tiddetermina f'liema livell ta' bash nesting aħna issa fl-ordni. biex daħħal il-kwotazzjonijiet meħtieġa, biex tibda kollox.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Tista 'timmaġina l-ispejjeż tax-xogħol għall-iżvilupp ta' skripts bħal dawn. Nagħtik parir biex ma taqax f’din in-nassa.

X'jista' jiġi sostitwit?

  • Kwalunkwe lingwa tal-kitba. Ikteb lil Python jew Kotlin Script aktar konvenjenti għaliex huwa l-ipprogrammar, mhux skripts.
  • Jew iddeskrivi l-loġika kollha tal-bini fil-forma Ħidmiet gradle apposta għall-proġett tiegħek.

Iddeċidejna li nagħżlu t-tieni għażla, u issa qed inħassru sistematikament l-iskripts bash kollha u niktbu ħafna kompiti gradle tad-dwana.

Tip #2: Aħżen l-infrastruttura fil-kodiċi.

Huwa konvenjenti meta l-issettjar ta 'Integrazzjoni Kontinwa maħżun mhux fl-interface UI ta' Jenkins jew TeamCity, eċċ., Iżda fil-forma ta 'fajls ta' test direttament fir-repożitorju tal-proġett. Dan jagħti verżjoni. Mhux se jkun diffiċli li tirritorna jew tibni l-kodiċi fuq fergħa oħra.

L-iskripts jistgħu jinħażnu fi proġett. X'għandek tagħmel bl-ambjent?

Tip # 3: Docker jista 'jgħin fl-ambjent.

Żgur li se jgħin lill-iżviluppaturi ta 'Android IOS għadu m'għandux wieħed, sfortunatament.

Dan huwa eżempju ta 'fajl docker sempliċi li fih jdk u android-sdk:

FROM openjdk:8

ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=26 
    ANDROID_BUILD_TOOLS_VERSION=26.0.2

# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" 
    "platforms;android-${ANDROID_VERSION}" 
    "platform-tools"

RUN mkdir /application
WORKDIR /application

Wara li ktibt dan il-fajl Docker (ngħidlek sigriet, m'għandekx għalfejn tiktebha, imma iġbedha lesta minn GitHub) u mmuntat l-immaġni, ikollok magna virtwali li fuqha tista 'tibni l-applikazzjoni u mexxi testijiet Junit.

Iż-żewġ raġunijiet ewlenin għaliex dan jagħmel sens huma l-iskalabbiltà u r-ripetibbiltà. Bl-użu ta 'docker, tista' tqajjem malajr tużżana aġenti tal-bini li se jkollhom eżattament l-istess ambjent bħal dak ta 'qabel. Dan jagħmel il-ħajja tal-inġiniera CI ħafna aktar faċli. Huwa pjuttost faċli li timbotta l-android-sdk fid-docker, iżda bl-emulaturi huwa ftit aktar diffiċli: ikollok taħdem ftit aktar (jew tniżżel dak lest minn GitHub mill-ġdid).

Tip Nru 4: tinsiex li l-ispezzjonijiet ma jsirux għall-fini ta 'spezzjonijiet, iżda għan-nies.

Rapidu u, l-aktar importanti, rispons ċar huwa importanti ħafna għall-iżviluppaturi: x'kisser, liema test falla, fejn nista 'nara l-buildlog.

Tip #5: Kun pragmatiku meta tiżviluppa Integrazzjoni Kontinwa.

Ifhem b'mod ċar liema tipi ta 'żbalji trid tipprevjeni, kemm riżorsi, ħin, u ħin tal-kompjuter inti lest li tonfoq. Kontrolli li jieħdu wisq żmien jistgħu, pereżempju, jiġu posposti mil-lum għal għada. U dawk minnhom li jaqbdu żbalji mhux importanti ħafna għandhom jiġu abbandunati kompletament.

Tip #6: Uża għodod lesti.

Hemm ħafna kumpaniji issa li jipprovdu cloud CI.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Din hija soluzzjoni tajba għal timijiet żgħar. M'għandek bżonn tappoġġja xejn, sempliċement tħallas ftit flus, tibni l-applikazzjoni tiegħek u anke tmexxi testijiet tal-istrumentazzjoni.

Tip #7: F'tim kbir, is-soluzzjonijiet interni huma aktar profittabbli.

Iżda illum jew għada, hekk kif it-tim jikber, is-soluzzjonijiet interni se jsiru aktar profittabbli. Hemm problema waħda b'dawn id-deċiżjonijiet. Hemm liġi ta' dħul li jonqos fl-ekonomija: fi kwalunkwe proġett, kull titjib sussegwenti huwa dejjem aktar diffiċli u jeħtieġ aktar u aktar investiment.

L-ekonomija tiddeskrivi l-ħajja kollha tagħna, inkluża l-Integrazzjoni Kontinwa. Bnejt skeda tal-ispejjeż tax-xogħol għal kull stadju tal-iżvilupp tal-Integrazzjoni Kontinwa tagħna.

Evoluzzjoni ta 'CI fit-tim ta' żvilupp mobbli

Huwa ċar li kull titjib qed isir aktar u aktar diffiċli. Meta wieħed iħares lejn dan il-graff, tista 'tifhem li l-Integrazzjoni Kontinwa jeħtieġ li tiġi żviluppata skont it-tkabbir tad-daqs tat-tim. Għal tim ta 'żewġ persuni, li jqattgħu 50 jum jiżviluppaw razzett emulatur intern hija idea medjokri. Iżda fl-istess ħin, għal tim kbir, li ma tagħmel Integrazzjoni Kontinwa xejn hija wkoll idea ħażina, minħabba li problemi ta 'integrazzjoni, iffissar ta' komunikazzjoni, eċċ. se jieħu saħansitra aktar ħin.

Bdejna bl-idea li l-awtomazzjoni hija meħtieġa għax in-nies jiswew ħafna flus, jiżbaljaw u għażżien. Iżda n-nies awtomat ukoll. Għalhekk, l-istess problemi japplikaw għall-awtomazzjoni.

  • L-awtomazzjoni hija għalja. Ftakar l-iskeda tax-xogħol.
  • Meta niġu għall-awtomazzjoni, in-nies jagħmlu żbalji.
  • Kultant huwa għażżien ħafna li awtomat, għax kollox jaħdem hekk. Għaliex ittejjeb xi ħaġa oħra, għaliex din l-Integrazzjoni Kontinwa kollha?

Imma għandi statistika: l-iżbalji jinqabdu f'20% tal-assemblaġġi. U dan mhux għaliex l-iżviluppaturi tagħna jiktbu l-kodiċi ħażin. Dan għaliex l-iżviluppaturi huma kunfidenti li jekk jagħmlu xi żball, mhux se jispiċċaw jiżviluppaw, jinqabdu minn kontrolli awtomatizzati. Għaldaqstant, l-iżviluppaturi jistgħu jqattgħu aktar ħin jiktbu kodiċi u affarijiet interessanti, aktar milli jmexxu u jittestjaw xi ħaġa lokalment.

Prattika Integrazzjoni Kontinwa. Imma bil-moderazzjoni.

Mill-mod, Nikolai Nesterov mhux biss jagħti rapporti kbar huwa stess, iżda huwa wkoll membru tal-kumitat tal-programm AppsConf u jgħin lill-oħrajn jippreparaw diskorsi sinifikanti għalik. Il-kompletezza u l-utilità tal-programm tal-konferenza li jmiss jistgħu jiġu evalwati skont is-suġġetti fi iskeda. U għad-dettalji, ejja Infospace fit-22-23 ta’ April.

Sors: www.habr.com

Żid kumment