Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Ankehitriny, ny ankamaroan'ny vokatra rindrambaiko dia novolavolaina ao anaty ekipa. Ny fepetra ho an'ny fampandrosoana ny ekipa mahomby dia azo aseho amin'ny endrika kisary tsotra.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Rehefa avy nanoratra ny kaodinao ianao dia mila mahazo antoka fa:

  1. Miasa.
  2. Tsy manimba na inona na inona izany, anisan'izany ny kaody nosoratan'ny mpiara-miasa aminao.

Raha feno ireo fepetra roa ireo dia eo amin'ny lalana mankany amin'ny fahombiazana ianao. Mba hanamarinana mora foana ireo fepetra ireo ary tsy hiala amin'ny lalana mahasoa, dia tonga tamin'ny Continuous Integration izahay.

CI dia workflow izay hampidiranao ny kaody ao amin'ny kaody vokatra ankapobeny araka izay azo atao. Ary tsy mampiditra fotsiny ianao, fa manamarina tsy tapaka koa fa mandeha ny zava-drehetra. Satria mila manamarina be dia be ianao ary matetika, mendrika ny mieritreritra momba ny automation. Azonao atao ny manamarina ny zava-drehetra amin'ny tanana, fa tsy tokony, ary izao no antony.

  • Ry vahoaka malala. Ny adiny iray fiasan'ny programmer rehetra dia lafo kokoa noho ny adiny iray fiasan'ny mpizara rehetra.
  • Manao fahadisoana ny olona. Noho izany, mety hitranga ny toe-javatra rehefa nisy ny fitsapana natao tamin'ny sampana diso na ny fanoloran-tena diso nanangona ho an'ny mpanandrana.
  • kamo ny olona. Indraindray, rehefa mahavita asa iray aho, dia tonga ny eritreritra hoe: β€œInona no tokony hojerena? Nanoratra andalana roa aho - mandeha ny zava-drehetra! Heveriko fa manana eritreritra toy izany koa ny sasany aminareo indraindray. Fa tokony hojerenao foana.

Ahoana no nampiharana sy novolavolaina ny Integration Continuous tao amin'ny ekipan'ny fampandrosoana finday Avito, ny fomba nandehanan'izy ireo 0 ka hatramin'ny 450 isan'andro, ary ny fanamboarana milina dia mivory 200 ora isan'andro, hoy i Nikolai Nesterov (nnesterov) dia mpandray anjara amin'ny fanovana evolisiona rehetra amin'ny fampiharana CI/CD Android.

Ny tantara dia mifototra amin'ny ohatra amin'ny baiko Android, fa ny ankamaroan'ny fomba dia azo ampiharina amin'ny iOS koa.


Indray andro, nisy olona iray niasa tao amin'ny ekipa Android Avito. Raha ny famaritana azy dia tsy mila na inona na inona avy amin'ny Continuous Integration izy: tsy misy olona azo ampidirina.

Saingy nitombo ny fampiharana, nitombo hatrany ny asa vaovao, ary nitombo ny ekipa. Amin'ny fotoana iray, tonga ny fotoana hametrahana amin'ny fomba ofisialy ny dingana fampidirana kaody. Tapa-kevitra ny hampiasa ny Git flow.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Ny foto-kevitry ny fikorianan'ny Git dia fantatra tsara: ny tetikasa dia manana sampana fampivoarana iraisana iray, ary isaky ny endri-javatra vaovao, ny mpamorona dia manapaka sampana misaraka, manolo-tena amin'izany, manosika, ary rehefa te-hanambatra ny kaody ao amin'ny sampana fampandrosoana dia sokafy misintona fangatahana. Mba hizarana fahalalana sy hifanakalozan-kevitra, dia nampidirinay ny famerenana ny kaody, izany hoe ny mpiara-miasa dia tsy maintsy manamarina sy manamafy ny kaody.

taratasim-bola

Mahafinaritra ny mahita code amin'ny masonao, saingy tsy ampy. Noho izany dia apetraka ny fisavana automatique.

  • Voalohany indrindra, manamarina isika Fivoriambe ARK.
  • Betsaka Fitsapana Junit.
  • Mihevitra ny fandrakofana kaody izahay, satria manao fitsapana izahay.

Mba hahatakarana ny fomba tokony hanaovana ireo fisavana ireo, andeha hojerentsika ny fizotran'ny fampandrosoana ao Avito.

Izany dia azo aseho amin'ny schematically toy izao:

  • Manoratra kaody amin'ny solosaina findainy ny developer iray. Azonao atao ny manao fisavana fampiraisana eto - na amin'ny alalan'ny commit hook, na manao fisavana fotsiny ao ambadika.
  • Rehefa avy nanosika ny kaody ny developer dia manokatra fangatahana fisintonana izy. Mba hampidirana ny kaody ao amin'ny sampana mivoatra dia ilaina ny mamakivaky ny famerenana code ary manangona ny isan'ny fanamafisana ilaina. Azonao atao ny manara-maso sy manangana eto: mandra-pahombiazan'ny fananganana rehetra dia tsy azo atambatra ny fangatahana fisarihana.
  • Aorian'ny fampifangaroana ny fangatahana fisintonana ary ampidirina amin'ny fampivoarana ny kaody, dia afaka misafidy fotoana mety ianao: ohatra, amin'ny alina, rehefa malalaka ny mpizara rehetra, ary manaova fisavana araka izay tianao.

Tsy misy olona tia manao scan amin'ny solosaina findainy. Rehefa nahavita endri-javatra iray ny developer dia te hanosika azy haingana sy hanokatra fangatahana fisarihana. Raha amin'izao fotoana izao no atomboka ny fisavana lava, dia tsy mahafinaritra fotsiny izany, fa mampiadana ny fampandrosoana ihany koa: raha mijery zavatra ny solosaina, dia tsy azo atao ny miasa ara-dalΓ na.

Tena tianay ny manao fisavana amin'ny alina, satria be ny fotoana sy ny mpizara, afaka mandehandeha ianao. Saingy, indrisy, rehefa mivoatra ny kaody endri-javatra dia tsy dia misy antony manosika loatra ny mpamorona hanamboatra ireo lesoka hitan'ny CI. Nieritreritra tsindraindray aho rehefa nijery ny lesoka rehetra hita tao amin'ny tatitra maraina fa hanamboatra azy ireo aho indray andro any, satria misy asa vaovao mahafinaritra ao Jira izay tiako hatomboka.

Raha manakana ny fangatahana fisintonana ny fanamarinana, dia ampy ny antony manosika, satria mandra-pahatongan'ny fananganana maitso dia tsy hivoatra ny code, izay midika fa tsy ho vita ny asa.

Vokatr'izany dia nisafidy ity tetika manaraka ity izahay: manao ny fanaraha-maso faran'izay azo atao amin'ny alina, ary manomboka ny fanakianana indrindra amin'izy ireo ary, ny tena zava-dehibe, ny haingana indrindra amin'ny fangatahana fisarihana. Saingy tsy mijanona eo izahay-mifanindran-dΓ lana, manatsara ny hafainganam-pandehan'ny fisavana izahay mba hamindrana azy ireo amin'ny fomba alina mba hisintonana fisavana fangatahana.

Tamin'izany fotoana izany dia vita haingana ny fanangananay rehetra, ka nampidirinay tsotra izao ny fananganana ARK, ny fitsapana Junit ary ny kajy fandrakofana kaody ho fanakanana ny fangatahana fisarihana. Nandrehitra azy io izahay, nieritreritra izany, ary nandao ny fandrakofana kaody satria nihevitra izahay fa tsy mila izany.

Naharitra roa andro izahay vao nametraka tanteraka ny CI fototra (manaraka ny tombantombana ny fotoana, ilaina amin'ny maridrefy).

Taorian'izay dia nanomboka nieritreritra bebe kokoa izahay - nanamarina tsara ve isika? Moa ve isika mihazakazaka tsara amin'ny fangatahana fisintonana?

Nanomboka ny fananganana tamin'ny commit farany an'ny sampana izay nanokafana ny fangatahana fisintonana izahay. Saingy ny fitsapana amin'ity commit ity dia afaka mampiseho fa ny code izay nosoratan'ny mpamorona dia miasa. Tsy manaporofo anefa izy ireo fa tsy nandika na inona na inona izy. Raha ny marina, mila manamarina ny toetry ny sampana mivoatra ianao rehefa avy natambatra ny endri-javatra iray.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Mba hanaovana izany dia nanoratra script bash tsotra izahay premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Eto ny fanovana farany rehetra avy amin'ny fampandrosoana dia alaina fotsiny ary atambatra amin'ny sampana ankehitriny. Nampianay ny script premerge.sh ho dingana voalohany amin'ny fananganana rehetra ary nanomboka nanamarina tsara izay tadiavinay, izany hoe fampidirana.

Naharitra telo andro ny fametrahana ny olana, ny fitadiavana vahaolana ary ny fanoratana ity script ity.

Nivoatra ny fampiharana, nitombo hatrany ny asa, nitombo ny ekipa, ary ny premerge.sh indraindray dia nanomboka nandΓ  anay. Ny Develop dia nanana fiovana mifanohitra izay nandrava ny fananganana.

Ohatra iray amin'ny fomba nitrangan'izany:

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Mpamorona roa no miara-miasa amin'ny endri-javatra A sy B. Ny mpamorona ny endri-javatra A dia mahita endri-javatra tsy ampiasaina amin'ny tetikasa answer() ary, toy ny scout zazalahy tsara, dia manala azy. Mandritra izany fotoana izany, ny mpamorona ny endri-javatra B dia manampy antso vaovao amin'ity asa ity ao amin'ny sampana misy azy.

Ny mpamorona dia mamita ny asany ary manokatra fangatahana fisarihana amin'ny fotoana iray ihany. Natomboka ny fananganana, ny premerge.sh dia manamarina ny fangatahana fisarihana roa momba ny fanjakana mandroso farany - maitso ny fisavana rehetra. Aorian'izay dia atambatra ny fangatahana sinton'ny endri-javatra A, natambatra ny fangatahana fisarihana ny endri-javatra B... Boom! Miato ny fampivoarana satria misy antso ho an'ny fiasa tsy misy ny kaody fampandrosoana.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Rehefa tsy mivoatra dia izay loza eo an-toerana. Tsy afaka manangona na inona na inona ny ekipa manontolo ary manolotra izany ho an'ny fitsapana.

Nitranga izany fa matetika aho no niasa tamin'ny asa fotodrafitrasa: analytics, network, databases. Izany hoe, izaho no nanoratra ireo fiasa sy kilasy ampiasain'ny mpamorona hafa. Noho izany, dia nahita toe-javatra mitovy amin'izany matetika aho. Efa nahantona elaela ihany koa ity sary ity.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Koa satria tsy mety aminay izany, dia nanomboka nikaroka safidy momba ny fomba hisorohana izany izahay.

Ahoana no tsy tapaka fampandrosoana

Ny safidy voalohany: avereno amboary ny fangatahana fisintonana rehetra rehefa manavao ny fivoarana. Raha, amin'ny ohatra ataontsika, ny fangatahana fisintonana miaraka amin'ny endri-javatra A no voalohany ampidirina amin'ny fivoarana, dia hamboarina indray ny fangatahan'ny endri-javatra B, ary, araka izany, dia tsy hahomby ny fisavana noho ny fahadisoana fanangonana.

Mba hahatakarana ny faharetan'izany dia diniho ny ohatra iray misy PR roa. Manokatra PR roa izahay: fananganana roa, fisavana roa. Aorian'ny fampifangaroana ny PR voalohany amin'ny fampandrosoana, ny faharoa dia mila amboarina. Raha atambatra, ny PR roa dia mitaky fanamarinana telo: 2 + 1 = 3.

Amin'ny ankapobeny dia tsara izany. Saingy nojerenay ny antontan'isa, ary ny toe-javatra mahazatra ao amin'ny ekipanay dia PR misokatra 10, ary avy eo ny isan'ny fanamarinana dia ny fitambaran'ny fandrosoana: 10 + 9 +... + 1 = 55. Izany hoe manaiky 10. PRs, mila manangana in-55 ianao. Ary izany dia ao anatin'ny toe-javatra mety indrindra, rehefa mandalo voalohany ny fisavana rehetra, rehefa tsy misy manokatra fangatahana fisintonana fanampiny mandritra ireo ampolony ireo.

Alaivo sary an-tsaina ny tenanao ho toy ny mpamorona izay mila voalohany manindry ny bokotra "mitambatra", satria raha misy mpifanolo-bodirindrina manao izany dia tsy maintsy miandry ianao mandra-pahatongan'ny fananganana rehetra indray ... Tsia, tsy mety izany. , tena hampihemotra ny fampandrosoana izany.

Fomba faharoa mety: manangona fangatahana misintona aorian'ny famerenana ny code. Izany hoe, manokatra fangatahana fisintonana ianao, manangona ny isan'ny fankatoavana ilaina avy amin'ny mpiara-miasa, manitsy izay ilaina, ary manomboka ny fananganana. Raha mahomby izy ireo, dia atambatra ho fampandrosoana ny fangatahana fisarihana. Amin'ity tranga ity, tsy misy famerenana fanampiny, fa ny fanehoan-kevitra dia miadana be. Amin'ny maha-mpamorona ahy, rehefa manokatra fangatahana misintona aho, dia te-hijery avy hatrany aho raha handeha izany. Ohatra, raha tsy nahomby ny fitsapana, dia mila manamboatra azy haingana ianao. Amin'ny toe-javatra misy fahatarana ny fananganana dia mihena ny fanehoan-kevitra, ary noho izany ny fampandrosoana manontolo. Tsy nety taminay koa izany.

Vokatr'izany, ny safidy fahatelo sisa tavela - bisikileta. Ny kaodinay rehetra, ny loharanonay rehetra dia voatahiry ao anaty tahiry ao amin'ny mpizara Bitbucket. Noho izany, tsy maintsy namolavola plugin ho an'ny Bitbucket izahay.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Ity plugin ity dia manafoana ny mekanika fanakambanana ny fangatahana. Ny fiandohana dia manara-penitra: misokatra ny PR, manomboka ny fivoriambe rehetra, vita ny famerenana ny code. Saingy rehefa vita ny famerenana ny kaody ary nanapa-kevitra ny mpamorona ny hanindry ny "mitambatra", ny plugin dia manamarina hoe iza no manapa-kevitra momba ny fanamarinana. Raha nohavaozina ny fivoarana taorian'ny fananganana, ny plugin dia tsy hamela ny fangatahana fisintonana toy izany ho tafiditra ao amin'ny sampana lehibe. Hanomboka fotsiny ny fananganana ny fivoarana vao haingana.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Amin'ny ohatra ataontsika miaraka amin'ny fiovana mifanohitra, ny fananganana toy izany dia tsy hahomby noho ny fahadisoana fanangonana. Noho izany, ny mpamorona ny endri-javatra B dia tsy maintsy hanitsy ny kaody, hamerina ny fisavana, avy eo ny plugin dia hampihatra ho azy ny fangatahana misintona.

Talohan'ny nampiharana an'io plugin io dia nanao salan'isa 2,7 izahay isaky ny fangatahana fisarihana. Miaraka amin'ny plugin dia nisy fandefasana 3,6. Mety aminay izany.

Tsara ny manamarika fa manana lesoka ity plugin ity: indray mandeha ihany no mamerina ny fananganana. Izany hoe, mbola misy varavarankely kely ahafahan'ny fiovana mifanipaka mivoatra. Saingy kely ny mety hitranga amin'izany, ary nataonay io fifampiraharahana teo amin'ny isan'ny fanombohana sy ny mety tsy fahombiazana. Tao anatin’ny roa taona dia indray mandeha ihany no nitifitra, ka tsy very maina angamba izany.

Naharitra roa herinandro ny nanoratanay ny dikan-teny voalohany amin'ny plugin Bitbucket.

Fanamarinana vaovao

Nandritra izany fotoana izany dia nitombo hatrany ny ekipanay. Nisy fisavana vaovao nampiana.

Nieritreritra izahay hoe: maninona no manao fahadisoana raha azo sorohina? Ary izay no nahatonga azy ireo nampihatra famakafakana kaody static. Nanomboka tamin'ny lint izahay, izay tafiditra ao amin'ny Android SDK. Saingy tamin'izany fotoana izany dia tsy hainy mihitsy ny miasa amin'ny kaody Kotlin, ary efa manana ny 75% amin'ny fampiharana voasoratra ao amin'ny Kotlin izahay. Noho izany, nampidirina ao anaty lint ireo naorina Android Studio fanamarinana.

Mba hanaovana izany dia tsy maintsy nanao zavatra maro be izahay: maka ny Android Studio, ampidiro ao amin'ny Docker ary amboary amin'ny CI miaraka amin'ny monitor virtoaly, mba hiheverana fa mandeha amin'ny solosaina tena izy. Nahomby anefa izany.

Nandritra io fotoana io ihany koa no nanomboka nanoratra betsaka fitsapana fitaovana ary ampiharina fitiliana pikantsary. Izany dia rehefa misy pikantsary fanondroana avoaka ho an'ny fijery kely misaraka, ary ny fitsapana dia ny fakana pikantsary avy amin'ny fijery ary ny fampitahana azy amin'ny fenitra mivantana pixel isaky ny piksel. Raha misy tsy fitovian-kevitra dia midika izany fa diso ny fisehon'ny toerana na misy tsy mety amin'ny fomba.

Fa ny fitsapana fitaovana sy ny fitiliana pikantsary dia mila atao amin'ny fitaovana: amin'ny emulators na amin'ny fitaovana tena izy. Raha jerena fa be dia be ny andrana ary atao matetika dia ilaina ny fambolena iray manontolo. Mitaky asa be loatra ny fanombohana ny toeram-piompianao manokana, ka nahita safidy efa vita izahay - Firebase Test Lab.

Firebase Test Lab

Nofidiana izy io satria vokatra Google ny Firebase, midika izany fa tokony ho azo ianteherana ary tsy ho faty mihitsy. Ara-drariny ny vidiny: $5 isaky ny ora fiasan'ny fitaovana tena izy, 1 $ isaky ny ora fiasan'ny emulator.

Naharitra telo herinandro teo ho eo ny fampiharana ny Firebase Test Lab ao amin'ny CI.

Saingy nitohy nitombo ny ekipa, ary indrisy, nanomboka nandΓ  anay i Firebase. Tamin'izany fotoana izany dia tsy nanana SLA izy. Indraindray ny Firebase dia nahatonga anay hiandry mandra-pahafahana ny isan'ny fitaovana ilaina hanaovana andrana, ary tsy nanomboka nanatanteraka azy ireo avy hatrany, araka izay tadiavinay. Naharitra antsasak’adiny ny fiandrasana nilahatra, izay fotoana lava be. Ny fitsapana fitaovana dia natao isaky ny PR, ny fahatarana dia tena nampihena ny fivoarana, ary avy eo ny volavolan-dalΓ na isam-bolana dia tonga niaraka tamin'ny vola boribory. Amin'ny ankapobeny, nanapa-kevitra ny handao ny Firebase ary hiasa ao an-trano, satria efa nitombo ny ekipa.

Docker + Python + bash

Noraisinay i Docker, nampiditra emulators ao anatiny, nanoratra programa tsotra amin'ny Python, izay amin'ny fotoana mety dia mitondra ny isan'ny emulator ilaina amin'ny dikan-teny ilaina ary manakana azy ireo rehefa ilaina izany. Ary mazava ho azy, script bash roa - aiza ho aiza isika raha tsy misy azy ireo?

Naharitra dimy herinandro ny famoronana tontolo fitsapana anay manokana.

Vokatr'izany, ho an'ny fangatahana fisarihana rehetra dia nisy lisitry ny fisakanana mitambatra:

  • fivoriambe ARK;
  • fitsapana Junit;
  • Lint;
  • Fanamarinana Android Studio;
  • Fitsapana fitaovana;
  • Fitsapana pikantsary.

Izany dia nisoroka ny mety ho fahapotehana maro. Ara-teknika dia niasa avokoa ny zava-drehetra, saingy nitaraina ireo mpamorona fa lava loatra ny fiandrasana vokatra.

Hafiriana no ela loatra? Nandefa angona avy amin'ny Bitbucket sy TeamCity tao amin'ny rafitra fanadihadiana izahay ary nahatsapa izany eo ho eo ny fotoana fiandrasana 45 minitra. Izany hoe, ny developer, rehefa manokatra fangatahana misintona, dia miandry 45 minitra eo ho eo amin'ny valin'ny fananganana. Raha ny hevitro dia betsaka izany, ary tsy afaka miasa toy izany ianao.

Mazava ho azy fa nanapa-kevitra ny hanafaingana ny fanamboarana rehetra izahay.

Andao hanafaingana

Rehefa mahita fa mijoro matetika amin'ny filaharana ny fananganana, ny zavatra voalohany ataontsika dia nividy fitaovana bebe kokoa - fampandrosoana mivelatra no tsotra indrindra. Nitsahatra ny filaharana ny trano, saingy nihena kely fotsiny ny fotoana fiandrasana, satria naharitra ela ny fisavana sasany.

Esory ny fisavana izay maharitra loatra

Ny fampifangaroanay mitohy dia mety hahazo ireo karazana lesoka sy olana ireo.

  • Tsy handeha. Ny CI dia afaka mahazo hadisoana fanangonana rehefa misy zavatra tsy mitsangana noho ny fiovana mifanohitra. Araka ny efa nolazaiko, dia tsy misy afaka manangona na inona na inona, mijanona ny fampandrosoana, ary mitebiteby ny rehetra.
  • Bug amin'ny fitondran-tena. Ohatra, rehefa natsangana ny fampiharana, fa midona rehefa manindry bokotra iray, na tsy voatsindry mihitsy ny bokotra. Ratsy izany satria mety hahatratra ny mpampiasa ny bibikely toy izany.
  • Bug ao amin'ny layout. Ohatra, bokotra iray no kitihina, fa nafindra 10 pixels miankavia.
  • Mitombo ny trosa ara-teknika.

Rehefa avy nijery ity lisitra ity izahay dia nahatsapa fa ny teboka roa voalohany ihany no manakiana. Te-hisambotra ny olana toy izany aloha izahay. Ny bibikely ao amin'ny layout dia hita eo amin'ny dingan'ny famerenana ny famolavolana ary azo ahitsy mora foana avy eo. Ny fiatrehana ny trosa ara-teknika dia mitaky dingana sy drafitra manokana, noho izany dia nanapa-kevitra izahay fa tsy hitsapa izany amin'ny fangatahana fisintonana.

Mifototra amin'io fanasokajiana io, dia nanozongozona ny lisitry ny fanamarinana manontolo izahay. Niampita an'i Lint ary nanemotra ny fandefasana azy indray alina: mba hamoahana tatitra momba ny habetsahan'ny olana tao amin'ilay tetikasa. Nanaiky hiasa misaraka amin'ny trosa ara-teknika izahay, ary Navela tanteraka ny fisavana Android Studio. Ny Android Studio ao amin'ny Docker amin'ny fanaovana fisafoana dia toa mahaliana, saingy miteraka olana be amin'ny fanohanana. Ny fanavaozana rehetra amin'ny dikan-teny Android Studio dia midika hoe ady amin'ny bibikely tsy takatry ny saina. Sarotra ihany koa ny nanohana ny andrana pikantsary, satria tsy dia milamina loatra ny tranomboky ary nisy ny valiny diso. Nesorina tao amin'ny lisitry ny fanamarinana ny andrana pikantsary.

Vokatr'izany dia navela taminay izahay:

  • fivoriambe ARK;
  • fitsapana Junit;
  • Fitsapana fitaovana.

Gradle cache lavitra

Tsy nisy fisavana mavesatra, nihatsara ny zava-drehetra. Tsy misy fetra anefa ny fahalavorariana!

Ny fampiharana anay dia efa nizara ho modules gradle 150 eo ho eo. Ny cache lavitra Gradle matetika dia miasa tsara amin'ity tranga ity, ka nanapa-kevitra ny hanandrana izany izahay.

Gradle remote cache dia serivisy afaka manamboatra artifacts ho an'ny asa tsirairay ao amin'ny maody tsirairay. Gradle, raha tokony hanangona ny kaody, dia mampiasa HTTP handondona ny cache lavitra ary anontanio raha misy olona efa nahavita io asa io. Raha eny, dia misintona fotsiny ny valiny.

Mora ny mihazakazaka cache lavitra Gradle satria manome sary Docker i Gradle. Vitanay tao anatin’ny adiny telo izany.

Ny hany tsy maintsy ataonao dia ny manomboka Docker ary manoratra andalana iray ao amin'ny tetikasa. Saingy na dia azo atomboka haingana aza izy io, dia mila fotoana be vao mandeha tsara ny zava-drehetra.

Ity ambany ity ny grafika tsy ampy cache.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Tany am-piandohana, ny isan-jaton'ny tsy fahampian'ny cache dia tokony ho 65. Taorian'ny telo herinandro dia nahavita nampitombo izany sanda izany ho 20%. Hita fa ny asa angonin'ny fampiharana Android dia manana fiankinan-doha hafahafa hafahafa, noho ny tsy fahampian'i Gradle ny cache.

Tamin'ny fampifandraisana ny cache dia nanafaingana be ny fananganana. Fa ankoatry ny fivoriambe dia misy ihany koa ny fitsapana fitaovana, ary maharitra ela izy ireo. Angamba tsy ny fitsapana rehetra no mila atao isaky ny fangatahana fisarihana. Mba hamantarana izany dia mampiasa famakafakana ny fiantraikany izahay.

Famakafakana ny fiantraikany

Amin'ny fangatahana fisintonana, manangona git diff izahay ary mahita ny maody Gradle novaina.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Tsy misy dikany ny manao fitiliana fitaovana izay manamarina ireo maody niova sy ireo maody rehetra miankina amin'izy ireo. Tsy misy dikany ny manao fitsapana ho an'ny modules manodidina: tsy niova ny code ary tsy misy na inona na inona mety ho tapaka.

Tsy dia tsotra loatra ny fitsapana fitaovana, satria tsy maintsy hita ao amin'ny mody fampiharana ambony indrindra izy ireo. Nampiasa heuristics miaraka amin'ny famakafakana bytecode izahay mba hahatakarana hoe inona ny maodely misy ny fitsapana tsirairay.

Naharitra valo herinandro teo ho eo ny fanavaozana ny fiasan'ny andrana fitaovam-pitaovana mba hitsapana ireo mΓ΄dΓ΄l tafiditra amin'izany.

Nahomby ny fepetra hanafainganana ny fisafoana. Nanomboka tamin'ny 45 minitra dia niakatra ho any amin'ny 15. Efa mahazatra ny miandry ampahefatry ny adiny iray hanaovana fanorenana.

Saingy nanomboka nitaraina ireo mpamorona fa tsy azony hoe inona no fananganana atomboka, aiza no hahitana ny log, nahoana no mena ny fananganana, inona no tsy nahomby, sns.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Ny olana amin'ny fanehoan-kevitra dia mampiadana ny fivoarana, ka niezaka nanome fanazavana mazava sy amin'ny antsipiriany momba ny PR tsirairay sy ny fananganana araka izay azo atao. Nanomboka tamin'ny fanehoan-kevitra tao amin'ny Bitbucket ho an'ny PR izahay, manondro hoe iza no tsy nahomby ary nahoana, ary nanoratra hafatra nokendrena tao amin'ny Slack. Tamin'ny farany, namorona dashboard PR ho an'ny pejy izahay miaraka amin'ny lisitry ny fananganana rehetra izay mandeha amin'izao fotoana izao sy ny satany: nilahatra, mihazakazaka, nianjera na vita. Azonao atao ny manindry ny fananganana ary miditra ao amin'ny diariny.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Enina herinandro no lany tamin'ny fanehoan-kevitra amin'ny antsipiriany.

Plans

Andao hiroso amin’ny tantara vao haingana. Rehefa voavaha ny olana momba ny tamberina, dia nahatratra ambaratonga vaovao izahay - nanapa-kevitra ny hanangana toeram-piompiana emulator manokana izahay. Rehefa misy fitsapana sy emulators maro dia sarotra ny mitantana azy ireo. Vokatr'izany dia nifindra tany amin'ny k8s ny emulators rehetra miaraka amin'ny fitantanana ny loharanon-karena mora.

Ankoatra izany, misy drafitra hafa.

  • Return Lint (sy ny fanadihadiana static hafa). Efa miasa amin'io lalana io izahay.
  • Ampandehano ny zava-drehetra amin'ny fanakanana PR fitsapana faran'izay haingana amin'ny dikan-teny SDK rehetra.

Noho izany, nandinika ny tantaran'ny fivoaran'ny Integration Continuous tao Avito izahay. Te-hanome torohevitra avy amin'ny fomba fijery za-draharaha aho izao.

Tips

Raha afaka manome torohevitra iray fotsiny aho dia izao:

Mitandrema amin'ny script shell!

Bash dia fitaovana malefaka sy mahery vaika, tena mety sy haingana ny fanoratana script. Saingy afaka latsaka ao anaty fandrika miaraka aminy ianao, ary, indrisy, latsaka tao izahay.

Izany rehetra izany dia nanomboka tamin'ny script tsotra izay nihazakazaka tamin'ny milina fanamboarana:

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

Saingy, araka ny fantatrao, ny zava-drehetra dia mivoatra ary mihasarotra kokoa rehefa mandeha ny fotoana - andao isika hihazakazaka script iray avy amin'ny iray hafa, andao isika handalo ny masontsivana sasany - amin'ny farany dia tsy maintsy nanoratra asa iray izay mamaritra ny haavon'ny bash nesting isika izao. ampidiro ny teny nalaina ilaina, mba hanombohana azy rehetra.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Azonao alaina sary an-tsaina ny vidin'ny asa ho an'ny famolavolana script toy izany. Manoro hevitra anao aho mba tsy ho latsaka amin'io fandrika io.

Inona no azo soloina?

  • Na inona na inona fiteny fanoratana. Manorata amin'ny Python na Kotlin Script mety kokoa satria fandaharana io fa tsy script.
  • Na farito ny lojika fananganana rehetra amin'ny endrika Asa gradle manokana ho an'ny tetikasanao.

Nanapa-kevitra ny hisafidy ny safidy faharoa izahay, ary ankehitriny dia mamafa ny script bash rehetra izahay ary manoratra asa gradle mahazatra.

Soso-kevitra #2: Tehirizo ny fotodrafitrasa ao anaty code.

Mety tsara rehefa voatahiry tsy ao amin'ny interface interface an'ny Jenkins na TeamCity, sns., fa amin'ny endrika rakitra an-tsoratra mivantana ao amin'ny fitehirizam-bokin'ny tetikasa ny fikandrana Continuous Integration. Izany dia manome versionability. Tsy ho sarotra ny mamerina na manamboatra ny kaody amin'ny sampana hafa.

Azo tehirizina ao anaty tetikasa ny script. Inona no atao amin'ny tontolo iainana?

Soso-kevitra #3: Docker dia afaka manampy amin'ny tontolo iainana.

Tena hanampy ireo mpamorona Android izany; Indrisy anefa fa tsy manana iray ny iOS.

Ity dia ohatra iray amin'ny rakitra docker tsotra izay misy jdk sy 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

Rehefa avy nanoratra ity rakitra Docker ity aho (hilaza aminao tsiambaratelo aho, tsy mila manoratra azy ianao, fa alao fotsiny avy amin'ny GitHub efa vonona) ary nanangona ny sary, dia mahazo milina virtoaly ahafahanao manamboatra ny fampiharana. ary manao fitsapana Junit.

Ny antony roa lehibe mahatonga izany dia ny scalability sy ny famerenana. Amin'ny fampiasana docker, azonao atao ny manangana mpiasan'ny fananganana am-polony izay hanana tontolo mitovy amin'ny teo aloha. Manamora ny fiainan'ny injeniera CI izany. Mora ny manosika ny android-sdk ho ​​ao anaty docker, fa amin'ny emulators dia sarotra kokoa izany: mila miasa mafy kokoa ianao (na misintona ny vita avy amin'ny GitHub indray).

Soso-kevitra 4: aza adino fa ny fisafoana dia tsy natao ho an'ny fitsirihana fa ho an'ny olona.

Ny valiny haingana sy, indrindra indrindra, dia tena zava-dehibe ho an'ny mpamorona: inona no tapaka, inona no fitsapana tsy nahomby, aiza no ahitako ny buildlog.

Soso-kevitra #5: Aoka ianao ho pragmatika rehefa mamolavola Integration Continuous.

Fantaro tsara hoe inona ny karazana lesoka tianao hosorana, ohatrinona ny loharanon-karena, ny fotoana ary ny fotoanan'ny solosaina tianao holaniana. Ny fisavana maharitra loatra, ohatra, dia mety hahemotra mandritra ny alina. Ary ireo izay mahazo fahadisoana tsy dia lehibe loatra dia tokony hafoy tanteraka.

Soso-kevitra #6: MampiasΓ  fitaovana efa vita.

Misy orinasa maro ankehitriny manome cloud CI.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Vahaolana tsara ho an'ny ekipa kely izany. Tsy mila manohana na inona na inona ianao, mandoa vola kely fotsiny, manangana ny fampiharana anao ary manao fitsapana fitaovana mihitsy aza.

Soso-kevitra #7: Amin'ny ekipa lehibe, ny vahaolana ao an-trano dia mahasoa kokoa.

Saingy na ho ela na ho haingana, rehefa mitombo ny ekipa, dia ho lasa tombony bebe kokoa ny vahaolana ao an-trano. Misy olana iray amin'ireo fanapahan-kevitra ireo. Misy ny lalΓ na momba ny fihenan'ny tamberim-bidy amin'ny toe-karena: amin'ny tetikasa rehetra, ny fanatsarana manaraka dia mihasarotra ary mitaky fampiasam-bola bebe kokoa.

Ny toekarena dia mamaritra ny fiainantsika manontolo, anisan'izany ny Continuous Integration. Nanangana fandaharam-potoana momba ny saran'ny asa ho an'ny dingana tsirairay amin'ny fampandrosoana ny Integration Continuous.

Ny fivoaran'ny CI ao amin'ny ekipa fampandrosoana finday

Mazava fa mihasarotra ny fanatsarana rehetra. Raha jerena ity grafika ity dia azonao atao ny mahatakatra fa ny Integration Continuous dia mila mivoatra mifanaraka amin'ny fitomboan'ny haben'ny ekipa. Ho an'ny ekipa misy olona roa, ny mandany 50 andro amin'ny famolavolana toeram-piompiana emulator anatiny dia hevitra mahazatra. Saingy amin'ny fotoana iray ihany, ho an'ny ekipa lehibe, ny tsy fanaovana Continuous Integration mihitsy dia hevitra ratsy ihany koa, satria ny olana amin'ny fampidirana, ny fanamboarana ny fifandraisana, sns. mbola mila fotoana bebe kokoa izany.

Nanomboka tamin'ny hevitra izahay fa ilaina ny automation satria lafo ny olona, ​​manao fahadisoana ary kamo. Fa ny olona koa dia mandeha ho azy. Noho izany, mihatra amin'ny automatique ny olana mitovy.

  • Lafo ny automatique. Tsarovy ny fandaharam-potoanan'ny asa.
  • Raha resaka automatique dia manao fahadisoana ny olona.
  • Indraindray dia tena kamo ny manao automatique, satria miasa toy izany ny zava-drehetra. Nahoana no manatsara ny zavatra hafa, nahoana izany rehetra izany Integration Continuous?

Saingy manana antontan'isa aho: ny 20% amin'ny fivoriambe dia misy ny fahadisoana. Ary izany dia tsy noho ny fanoratra kaody ratsy ny mpamorona anay. Izany dia satria ny developer dia matoky fa raha manao fahadisoana izy ireo, dia tsy hiafara amin'ny fivoarana, ho tratra amin'ny fisavana mandeha ho azy. Noho izany, afaka mandany fotoana bebe kokoa hanoratana kaody sy zavatra mahaliana ny mpamorona, fa tsy mihazakazaka sy manandrana zavatra eo an-toerana.

Manaova fampiraisana mitohy. Fa amin'ny antonony.

Teny an-dalana, Nikolai Nesterov tsy manome tatitra lehibe ny tenany, fa koa ny mpikambana ao amin'ny komity fandaharana AppsConf ary manampy ny hafa hanomana lahateny manan-danja ho anao. Ny fahafenoana sy ny maha-zava-dehibe ny fandaharam-pivoriana manaraka dia azo tombanana amin'ny lohahevitra ao fandaharam-potoana. Ary raha mila fanazavana fanampiny, tongava ato amin'ny Infospace ny 22-23 aprily.

Source: www.habr.com

Add a comment