Ebolusyon sa CI sa mobile development team

Karon, kadaghanan sa mga produkto sa software gihimo sa mga grupo. Ang mga kondisyon alang sa malampuson nga pag-uswag sa team mahimong irepresentar sa porma sa usa ka yano nga diagram.

Ebolusyon sa CI sa mobile development team

Kung nasulat na nimo ang imong code, kinahanglan nimo nga sigurohon kini:

  1. Nagtrabaho.
  2. Wala kini makaguba sa bisan unsa, lakip ang code nga gisulat sa imong mga kauban.

Kung ang duha nga mga kondisyon matuman, nan ikaw anaa sa dalan sa kalampusan. Aron dali nga masusi kini nga mga kondisyon ug dili motipas gikan sa mapuslanon nga agianan, naghimo kami sa Padayon nga Paghiusa.

Ang CI usa ka workflow diin imong i-integrate ang imong code sa kinatibuk-ang code sa produkto kutob sa mahimo. Ug dili ka lang mag-integrate, apan kanunay usab nga susihon nga ang tanan nagtrabaho. Tungod kay kinahanglan nimo nga susihon kanunay ug kanunay, angay nga hunahunaon ang bahin sa automation. Mahimo nimong susihon ang tanan nga mano-mano, apan dili nimo kinahanglan, ug ania kung ngano.

  • Minahal nga mga tawo. Ang usa ka oras nga pagtrabaho sa bisan unsang programmer mas mahal kaysa usa ka oras nga pagtrabaho sa bisan unsang server.
  • Ang mga tawo masayop. Busa, mahimong motumaw ang mga sitwasyon kung ang mga pagsulay gipadagan sa sayup nga sanga o ang sayup nga pasalig giipon alang sa mga pagsulay.
  • Tapolan ang mga tawo. Matag karon ug unya, sa dihang mahuman nako ang usa ka buluhaton, ang hunahuna motungha: β€œUnsa may angayng susihon? Gisulat nako ang duha ka linya - ang tanan nagtrabaho! Sa akong hunahuna ang uban kaninyo usab usahay adunay ingon nga mga hunahuna. Apan kinahanglan nimo nga susihon kanunay.

Giunsa ang Pagpadayon nga Paghiusa gipatuman ug gipalambo sa Avito mobile development team, kung giunsa nila pag-adto gikan sa 0 hangtod 450 nga mga pagtukod matag adlaw, ug ang paghimo sa mga makina nga nagtigum 200 ka oras sa usa ka adlaw, ingon ni Nikolai Nesterov (nnesterov) kay partisipante sa tanang ebolusyonaryong kausaban sa CI/CD Android application.

Ang istorya gibase sa pananglitan sa usa ka Android command, apan kadaghanan sa mga pamaagi magamit usab sa iOS.


Kaniadto, usa ka tawo ang nagtrabaho sa Avito Android team. Pinaagi sa kahulugan, wala siya magkinahanglan bisan unsa gikan sa Padayon nga Paghiusa: wala’y usa nga maapil.

Apan ang aplikasyon mitubo, nagkadaghang bag-ong mga buluhaton ang mitungha, ug ang team mitubo sumala niana. Sa pila ka punto, panahon na nga mas pormal nga magtukod usa ka proseso sa paghiusa sa code. Nakahukom nga gamiton ang Git flow.

Ebolusyon sa CI sa mobile development team

Ang konsepto sa Git flow kay ilado kaayo: ang usa ka proyekto adunay usa ka komon nga develop branch, ug alang sa matag bag-ong feature, ang mga developers moputol ug lain nga branch, mopasalig niini, moduso, ug kung gusto nilang i-merge ang ilang code ngadto sa develop branch, ablihi ang usa ka hangyo sa pagbitad. Aron ipaambit ang kahibalo ug hisgutan ang mga pamaagi, among gipaila ang pagrepaso sa code, nga mao, ang mga kauban kinahanglan magsusi ug magkumpirma sa code sa usag usa.

Mga tseke

Ang pagtan-aw sa code gamit ang imong mga mata cool, apan dili igo. Busa, ang mga awtomatik nga pagsusi gipaila.

  • Una sa tanan, atong susihon ARK nga asembliya.
  • Daghan Mga pagsulay ni Junit.
  • Gikonsiderar namon ang pagsakup sa code, tungod kay nagdagan kami mga pagsulay.

Aron masabtan kung giunsa kini nga mga tseke pagdagan, atong tan-awon ang proseso sa pag-uswag sa Avito.

Mahimo kini nga girepresentar sa eskematiko sama niini:

  • Usa ka developer nagsulat og code sa iyang laptop. Mahimo nimong ipadagan ang mga pagsusi sa panagsama dinhi mismo - bisan sa usa ka commit hook, o yano nga magpadagan sa mga tseke sa background.
  • Pagkahuman nga giduso sa developer ang code, giablihan niya ang usa ka hangyo sa pagbitad. Aron ang code niini maapil sa develop branch, gikinahanglan nga moagi sa code review ug kolektahon ang gikinahanglang gidaghanon sa mga kumpirmasyon. Mahimo nimong palihokon ang mga tseke ug pagtukod dinhi: hangtod nga malampuson ang tanan nga pagtukod, ang hangyo sa pagbitad dili mahiusa.
  • Human mahiusa ang hangyo sa pagbitad ug ang code gilakip sa pag-uswag, makapili ka usa ka kombenyente nga oras: pananglitan, sa gabii, kung libre ang tanan nga mga server, ug pagdagan ang daghang mga tseke nga gusto nimo.

Walay usa nga ganahan nga mag-scan sa ilang laptop. Kung nahuman na sa usa ka developer ang usa ka bahin, gusto niya nga iduso dayon kini ug ablihan ang usa ka hangyo sa pagbitad. Kung niining higayona ang pipila ka taas nga mga pagsusi gilunsad, kini dili lamang dili kaayo makapahimuot, apan nagpahinay usab sa pag-uswag: samtang ang laptop nagsusi sa usa ka butang, imposible nga magtrabaho nga normal niini.

Ganahan kaayo mi sa pagpadagan sa mga tseke sa gabii, tungod kay adunay daghang oras ug mga server, mahimo kang maglibot-libot. Apan, sa kasubo, kung ang feature code naugmad, ang developer adunay gamay nga kadasig sa pag-ayo sa mga sayup nga nakit-an sa CI. Matag karon ug unya nasakpan nako ang akong kaugalingon nga naghunahuna kung gitan-aw nako ang tanan nga mga sayup nga nakit-an sa report sa buntag nga ayohon nako kini sa ulahi, tungod kay karon adunay usa ka bag-ong buluhaton sa Jira nga gusto ko lang magsugod sa pagbuhat.

Kung gibabagan sa mga tseke ang usa ka hangyo sa pagbitad, nan adunay igo nga kadasig, tungod kay hangtod nga ang mga pagtukod mahimong berde, ang code dili ma-develop, nga nagpasabut nga ang buluhaton dili mahuman.

Ingon nga resulta, gipili namo ang mosunod nga estratehiya: gipadagan namo ang pinakataas nga posible nga set sa mga tseke sa gabii, ug gilunsad ang labing kritikal niini ug, labing importante, ang pinakapaspas sa usa ka hangyo sa pagbitad. Apan dili kami mohunong didto-sa susama, among gi-optimize ang katulin sa mga tseke aron mabalhin sila gikan sa night mode aron makuha ang mga tseke sa hangyo.

Nianang panahona, ang tanan namong mga pagtukod dali nga nahuman, mao nga among gilakip ang pagtukod sa ARK, mga pagsulay sa Junit ug mga kalkulasyon sa coverage sa code isip usa ka blocker alang sa hangyo sa pagbitad. Among gi-on kini, gihuna-huna kini, ug giabandonar ang coverage sa code tungod kay abi namo nga wala namo kini kinahanglana.

Nagkinahanglan kami og duha ka adlaw aron hingpit nga mapahimutang ang batakang CI (pagkahuman niini ang banabana sa oras kay gibanabana, gikinahanglan alang sa sukod).

Pagkahuman niana, nagsugod kami sa paghunahuna og dugang - nagsusi pa ba kami sa husto? Nagdagan ba kami nga nagtukod sa mga hangyo sa pagbitad sa husto?

Gisugdan namo ang pagtukod sa katapusang commit sa branch diin giablihan ang pull request. Apan ang mga pagsulay niini nga pasalig mahimo lamang magpakita nga ang code nga gisulat sa developer nagtrabaho. Pero wa silay pamatuod nga wala siyay nabuak. Sa tinuud, kinahanglan nimo nga susihon ang kahimtang sa naugmad nga sanga pagkahuman gisagol ang usa ka bahin niini.

Ebolusyon sa CI sa mobile development team

Aron mahimo kini, nagsulat kami usa ka yano nga script sa bash premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Dinhi ang tanan nga labing bag-o nga mga pagbag-o gikan sa pagpalambo yano nga gibira ug gihiusa sa karon nga sanga. Among gidugang ang premerge.sh nga script isip unang lakang sa tanan nga mga pagtukod ug nagsugod sa pagsusi kon unsa gayud ang among gusto, kana panaghiusa.

Nagkinahanglan og tulo ka adlaw aron ma-localize ang problema, mangita og solusyon, ug isulat kini nga script.

Ang aplikasyon naugmad, nagkadaghang mga buluhaton ang mitungha, ang team mitubo, ug ang premerge.sh usahay nagsugod sa pagpaluya kanamo. Ang Develop adunay nagkasumpaki nga mga pagbag-o nga nakaguba sa pagtukod.

Usa ka pananglitan kung giunsa kini mahitabo:

Ebolusyon sa CI sa mobile development team

Duha ka developer ang dungan nga nagsugod sa pagtrabaho sa mga feature A ug B. Ang developer sa feature A nakadiskubre og wala magamit nga feature sa proyekto answer() ug, sama sa usa ka maayong boy scout, tangtangon kini. Sa samang higayon, ang developer sa feature B nagdugang og bag-ong tawag niini nga function sa iyang branch.

Gitapos sa mga developer ang ilang trabaho ug dungan nga nagbukas sa hangyo sa pagbitad. Gilunsad ang mga pagtukod, gisusi sa premerge.sh ang mga hangyo sa pagbitad bahin sa labing bag-o nga estado sa pag-uswag - berde ang tanan nga mga tseke. Human niana, ang pull request sa feature A gihiusa, ang pull request sa feature B gihiusa... Boom! Pag-develop sa mga break tungod kay ang developer code adunay usa ka tawag sa usa ka wala nga function.

Ebolusyon sa CI sa mobile development team

Kung dili kini molambo, kini lokal nga katalagman. Ang tibuok team dili makakolekta ug bisan unsa ug isumite kini para sa pagsulay.

Nahitabo kini nga kanunay kong nagtrabaho sa mga buluhaton sa imprastraktura: analytics, network, database. Sa ato pa, ako ang nagsulat sa mga gimbuhaton ug klase nga gigamit sa ubang mga developer. Tungod niini, nakit-an nako ang akong kaugalingon sa parehas nga mga sitwasyon kanunay. Gibitay pa gani nako kini nga hulagway sa makadiyot.

Ebolusyon sa CI sa mobile development team

Tungod kay dili kini angay kanamo, nagsugod kami sa pagsuhid sa mga kapilian kung unsaon pagpugong niini.

Giunsa nga dili mabungkag ang pag-uswag

Ang una nga kapilian: pagtukod pag-usab sa tanan nga mga hangyo sa pagbitad kung ang pag-update naugmad. Kung, sa among panig-ingnan, ang hangyo sa pagbitad nga adunay bahin A mao ang una nga gilakip sa pag-uswag, ang hangyo sa pagbitad sa bahin B matukod pag-usab, ug, sa ingon, ang mga tseke mapakyas tungod sa usa ka sayup sa pag-compile.

Aron masabtan kung unsa kadugay kini, tagda ang usa ka pananglitan nga adunay duha ka PR. Gibuksan namo ang duha ka PR: duha ka pagtukod, duha ka dagan sa mga tseke. Human mahiusa ang unang PR ngadto sa pagpalambo, ang ikaduha kinahanglan nga matukod pag-usab. Sa kinatibuk-an, duha ka PR ang nanginahanglan og tulo ka dagan sa mga tseke: 2 + 1 = 3.

Sa prinsipyo, kini maayo. Apan among gitan-aw ang mga estadistika, ug ang kasagaran nga sitwasyon sa among team mao ang 10 ka bukas nga PRs, ug unya ang gidaghanon sa mga tseke mao ang sumada sa pag-uswag: 10 + 9 +... + 1 = 55. Sa ato pa, ang pagdawat sa 10 Mga PR, kinahanglan nimo nga tukuron pag-usab ang 55 ka beses. Ug kini naa sa usa ka sulundon nga kahimtang, kung ang tanan nga mga tseke moagi sa una nga higayon, kung wala’y usa nga nagbukas sa usa ka dugang nga hangyo sa pagbitad samtang kini nga dosena giproseso.

Hunahunaa ang imong kaugalingon ingon usa ka developer nga kinahanglan nga una nga mag-klik sa buton nga "paghiusa", tungod kay kung buhaton kini sa usa ka silingan, kinahanglan ka maghulat hangtod ang tanan nga mga pagtukod moagi pag-usab ... Dili, kana dili molihok , kini seryoso nga mohinay sa kalamboan.

Ikaduha nga posible nga paagi: pagkolekta sa mga hangyo sa pagbitad pagkahuman sa pagrepaso sa code. Kana mao, imong giablihan ang usa ka hangyo sa pagbitad, pagkolekta sa gikinahanglan nga gidaghanon sa mga pag-apruba gikan sa mga kauban, pagtul-id kung unsa ang gikinahanglan, ug dayon ilunsad ang mga pagtukod. Kung magmalampuson sila, ang hangyo sa pagbitad gihiusa sa pag-uswag. Sa kini nga kaso, wala’y dugang nga pag-restart, apan ang feedback hinay kaayo. Isip usa ka developer, sa dihang mag-abli ko og pull request, gusto dayon nakong tan-awon kon mogana ba kini. Pananglitan, kung ang usa ka pagsulay mapakyas, kinahanglan nimo kini dali nga ayohon. Sa kaso sa usa ka nalangan nga pagtukod, ang feedback hinayhinay, ug busa ang tibuuk nga pag-uswag. Dili usab kini angay kanamo.

Ingon usa ka sangputanan, ang ikatulo nga kapilian lamang ang nahabilin - pagbisikleta. Ang tanan namon nga code, tanan namon nga gigikanan gitipigan sa usa ka repository sa Bitbucket server. Tungod niini, kinahanglan namon nga maghimo usa ka plugin alang sa Bitbucket.

Ebolusyon sa CI sa mobile development team

Kini nga plugin nag-override sa pull request sa paghiusa nga mekanismo. Ang sinugdanan mao ang sumbanan: ang PR nagbukas, ang tanan nga mga asembliya gilunsad, ang pagrepaso sa code nahuman. Apan human makompleto ang pagrepaso sa code ug ang developer nakahukom sa pag-klik sa "merge", ang plugin nagsusi kung diin ang pagpalambo sa estado ang mga tseke gipadagan. Kung gi-update ang pag-uswag pagkahuman sa mga pagtukod, dili tugutan sa plugin ang ingon nga hangyo sa pagbitad nga mahiusa sa panguna nga sanga. I-restart ra ang mga pagtukod sa usa ka bag-o nga pag-uswag.

Ebolusyon sa CI sa mobile development team

Sa among pananglitan nga adunay nagkasumpaki nga mga pagbag-o, ang ingon nga mga pagtukod mapakyas tungod sa usa ka sayup sa pag-compile. Tungod niini, ang nag-develop sa feature B kinahanglan nga magtul-id sa code, i-restart ang mga tseke, unya ang plugin awtomatikong mag-apply sa pull request.

Sa wala pa ipatuman kini nga plugin, nag-average kami og 2,7 nga pagrepaso sa matag hangyo sa pagbitad. Uban sa plugin adunay 3,6 nga paglansad. Kini haum kanato.

Angay nga matikdan nga kini nga plugin adunay usa ka disbentaha: kini gi-restart lamang ang pagtukod sa makausa. Sa ato pa, aduna pay gamay nga bintana diin ang magkasumpaki nga mga pagbag-o mahimong molambo. Apan gamay ra ang posibilidad niini, ug gihimo namon kini nga pagbinayloay tali sa gidaghanon sa pagsugod ug ang posibilidad nga mapakyas. Sulod sa duha ka tuig kausa ra kini nagpabuto, mao nga dili tingali kini makawang.

Nagkinahanglan kami og duha ka semana sa pagsulat sa unang bersyon sa Bitbucket plugin.

Bag-ong mga tseke

Sa kasamtangan, ang among team nagpadayon sa pagtubo. Gidugang ang bag-ong mga tseke.

Naghunahuna kami: nganong masayop kung kini mapugngan? Ug mao nga ilang gipatuman static nga pagtuki sa code. Nagsugod kami sa lint, nga gilakip sa Android SDK. Apan niadtong panahona wala siya kahibalo kung unsaon pagtrabaho sa Kotlin code, ug aduna na kami 75% sa aplikasyon nga gisulat sa Kotlin. Busa, ang mga built-in gidugang sa lint Mga pagsusi sa Android Studio.

Aron mahimo kini, kinahanglan namon nga buhaton ang daghang mga pagtuis: kuhaa ang Android Studio, i-package kini sa Docker ug ipadagan kini sa CI gamit ang usa ka virtual monitor, aron kini maghunahuna nga kini nagdagan sa usa ka tinuud nga laptop. Apan kini nagtrabaho.

Niini usab nga panahon nagsugod kami sa pagsulat og daghan mga pagsulay sa instrumento ug gipatuman pagsulay sa screenshot. Kini kung ang usa ka pakisayran nga screenshot gihimo alang sa usa ka lahi nga gamay nga pagtan-aw, ug ang pagsulay naglangkob sa pagkuha sa usa ka screenshot gikan sa pagtan-aw ug pagtandi niini sa sukaranan nga direkta nga pixel sa pixel. Kung adunay usa ka kalainan, kini nagpasabut nga ang layout nasayup sa usa ka lugar o adunay sayup sa mga istilo.

Apan ang mga pagsulay sa instrumento ug mga pagsulay sa screenshot kinahanglan nga ipadagan sa mga aparato: sa mga emulator o sa tinuud nga mga aparato. Sa pagkonsiderar nga adunay daghang mga pagsulay ug kini kanunay nga gipadagan, usa ka tibuuk nga umahan ang gikinahanglan. Ang pagsugod sa imong kaugalingon nga uma hilabihan ka kusog sa pagtrabaho, mao nga nakakita kami usa ka andam nga kapilian - Firebase Test Lab.

Firebase Test Lab

Gipili kini tungod kay ang Firebase usa ka produkto sa Google, nagpasabut nga kini kinahanglan nga kasaligan ug dili tingali mamatay. Ang mga presyo makatarunganon: $5 kada oras nga operasyon sa usa ka tinuod nga device, 1 $ kada oras nga operasyon sa usa ka emulator.

Gibana-bana nga tulo ka semana ang pag-implementar sa Firebase Test Lab sa among CI.

Apan ang team nagpadayon sa pag-uswag, ug ang Firebase, sa walay palad, nagsugod sa pagpakyas kanamo. Niadtong panahona, wala siyay SLA. Usahay ang Firebase nagpahulat kanamo hangtod nga ang gikinahanglan nga gidaghanon sa mga aparato libre alang sa mga pagsulay, ug wala magsugod sa pagpatuman niini dayon, sumala sa among gusto. Ang paghulat sa linya mikabat ug tunga sa oras, nga usa ka taas nga oras. Ang mga pagsulay sa instrumento gipadagan sa matag PR, ang mga paglangan nagpahinay gyud sa pag-uswag, ug dayon ang binulan nga bayranan moabut nga adunay usa ka lingin nga kantidad. Sa kinatibuk-an, nakahukom nga biyaan ang Firebase ug magtrabaho sa balay, tungod kay ang team igo na nga mitubo.

Docker + Python + bash

Gikuha namo ang Docker, giputos ang mga emulator niini, nagsulat og usa ka yano nga programa sa Python, nga sa husto nga higayon nagdala sa gikinahanglan nga gidaghanon sa mga emulator sa gikinahanglan nga bersyon ug gipahunong kini kung gikinahanglan. Ug, siyempre, usa ka magtiayon nga mga script sa bash - asa man kita kung wala sila?

Nagkinahanglan og lima ka semana sa paghimo sa among kaugalingon nga palibot sa pagsulay.

Ingon usa ka sangputanan, alang sa matag hangyo sa pagbitad adunay usa ka halapad nga lista sa mga tseke nga nagbabag sa panagsama:

  • ARK nga asembliya;
  • Mga pagsulay sa Junit;
  • Lint;
  • Mga pagsusi sa Android Studio;
  • Mga pagsulay sa instrumento;
  • Mga pagsulay sa screenshot.

Gipugngan niini ang daghang posibleng pagkaguba. Sa teknikal nga paagi ang tanan nagtrabaho, apan ang mga developer nagreklamo nga ang paghulat alang sa mga resulta dugay kaayo.

Unsa ka dugay ang taas kaayo? Among gi-upload ang datos gikan sa Bitbucket ug TeamCity ngadto sa sistema sa pagtuki ug nakaamgo niana average nga oras sa paghulat 45 minuto. Kana mao, ang usa ka developer, kung nagbukas sa usa ka hangyo sa pagbitad, naghulat sa aberids nga 45 minuto alang sa mga resulta sa pagtukod. Sa akong opinyon, kini daghan, ug dili ka makatrabaho nga ingon niana.

Siyempre, nakahukom kami sa pagpadali sa tanan namong mga pagtukod.

Paspas ta

Ang pagtan-aw nga ang mga pagtukod kanunay nga nagbarug sa usa ka pila, ang una namon nga buhaton mao nakapalit ug dugang hardware β€” halapad nga kalamboan mao ang pinakayano. Ang mga pagtukod mihunong sa pagpila, apan ang oras sa paghulat mikunhod lang gamay, tungod kay ang pipila nga mga tseke sa ilang kaugalingon dugay kaayo.

Pagtangtang sa mga tseke nga dugay kaayo

Ang Atong Padayon nga Paghiusa mahimong makadakop niining mga matang sa mga kasaypanan ug mga problema.

  • Dili moadto. Makuha sa CI ang usa ka sayup sa pag-compile kung adunay dili matukod tungod sa nagkasumpaki nga mga pagbag-o. Sama sa giingon ko na, unya wala’y makatipon bisan unsa, mohunong ang pag-uswag, ug ang tanan gikulbaan.
  • Bug sa pamatasan. Pananglitan, kung ang aplikasyon gitukod, apan nahagsa kung imong gipugos ang usa ka buton, o ang buton wala gyud gipugos. Kini dili maayo tungod kay ang ingon nga usa ka bug makaabot sa tiggamit.
  • Bug sa layout. Pananglitan, ang usa ka buton gi-klik, apan gibalhin ang 10 ka pixel sa wala.
  • Pagdugang sa teknikal nga utang.

Human sa pagtan-aw niini nga lista, among naamgohan nga ang unang duha ka punto lamang ang kritikal. Gusto namon nga madakpan una ang ingon nga mga problema. Ang mga bug sa layout nakit-an sa yugto sa pagrepaso sa disenyo ug dali nga matul-id unya. Ang pag-atubang sa teknikal nga utang nanginahanglan usa ka lahi nga proseso ug pagplano, mao nga nakahukom kami nga dili sulayan kini sa usa ka hangyo sa pagbitad.

Pinasukad sa kini nga klasipikasyon, giuyog namon ang tibuuk nga lista sa mga tseke. Gitabok si Lint ug gi-postpone ang paglusad niini sa tibuok gabii: aron lang makapagawas kini og report kung pila ka problema ang naa sa proyekto. Kami miuyon sa pagtrabaho nga bulag uban sa teknikal nga utang, ug Ang mga pagsusi sa Android Studio hingpit nga gibiyaan. Ang Android Studio sa Docker alang sa pagpadagan sa mga inspeksyon daw makapaikag, apan hinungdan sa daghang problema sa suporta. Ang bisan unsang pag-update sa mga bersyon sa Android Studio nagpasabut nga usa ka pakigbisog sa dili masabtan nga mga bug. Lisud usab ang pagsuporta sa mga pagsulay sa screenshot, tungod kay ang librarya dili kaayo lig-on ug adunay mga sayup nga positibo. Ang mga pagsulay sa screenshot gikuha gikan sa listahan sa tseke.

Ingon usa ka sangputanan, nahabilin kami sa:

  • ARK nga asembliya;
  • Mga pagsulay sa Junit;
  • Mga pagsulay sa instrumento.

Gradle hilit nga cache

Kung walay bug-at nga pagsusi, ang tanan nahimong mas maayo. Apan walay limitasyon sa kahingpitan!

Ang among aplikasyon nabahin na sa mga 150 ka gradle modules. Ang Gradle hilit nga cache kasagarang maayo sa kini nga kaso, mao nga nakahukom kami nga sulayan kini.

Ang Gradle remote cache usa ka serbisyo nga makahimo sa cache sa paghimo og mga artifact alang sa indibidwal nga mga buluhaton sa indibidwal nga mga module. Ang Gradle, imbes nga aktuwal nga mag-compile sa code, naggamit sa HTTP sa pagtuktok sa hilit nga cache ug pangutan-a kung adunay usa nga nakahimo na niini nga buluhaton. Kung oo, i-download lang niini ang resulta.

Ang pagpadagan sa Gradle hilit nga cache dali tungod kay ang Gradle naghatag usa ka imahe sa Docker. Nahimo namo kini sulod sa tulo ka oras.

Ang kinahanglan nimong buhaton mao ang paglansad sa Docker ug pagsulat usa ka linya sa proyekto. Apan bisan kung mahimo kini nga ilunsad sa madali, magkinahanglan kini og daghang oras aron molihok ang tanan.

Sa ubos mao ang cache misses graph.

Ebolusyon sa CI sa mobile development team

Sa sinugdanan pa lang, ang porsiyento sa cache misses mga 65. Human sa tulo ka semana, nakahimo kami sa pagdugang niini nga bili ngadto sa 20%. Nahibal-an nga ang mga buluhaton nga gikolekta sa aplikasyon sa Android adunay katingad-an nga mga pagsalig sa transitive, tungod kay wala’y nakuha si Gradle sa cache.

Pinaagi sa pagkonektar sa cache, gipadali namo pag-ayo ang pagtukod. Apan dugang pa sa asembliya, adunay usab mga pagsulay sa instrumento, ug dugay kini. Tingali dili tanan nga mga pagsulay kinahanglan nga ipadagan alang sa matag hangyo sa pagbitad. Aron mahibal-an, gigamit namon ang pagtuki sa epekto.

Pagtuki sa epekto

Sa usa ka pull request, among gikolekta ang git diff ug pangitaon ang giusab nga Gradle modules.

Ebolusyon sa CI sa mobile development team

Makataronganon nga magpadagan lang sa mga pagsulay sa instrumentasyon nga magsusi sa nabag-o nga mga module ug sa tanan nga mga module nga nagdepende niini. Walay kapuslanan ang pagpadagan sa mga pagsulay alang sa silingang mga module: ang code didto wala mausab ug walay bisan unsa nga makaguba.

Ang mga pagsulay sa instrumento dili kaayo yano, tungod kay kini kinahanglan nga nahimutang sa top-level nga module sa Application. Gigamit namo ang heuristics nga adunay bytecode analysis aron masabtan kung asa nga module ang matag pagsulay iya.

Ang pag-upgrade sa operasyon sa mga pagsulay sa instrumento aron masulayan ra nila ang mga module nga nahilambigit nilungtad mga walo ka semana.

Ang mga lakang aron mapadali ang mga inspeksyon malampuson nga nagtrabaho. Gikan sa 45 nga mga minuto misaka kami ngadto sa mga 15. Normal na nga maghulat usa ka quarter sa usa ka oras alang sa usa ka pagtukod.

Apan karon ang mga nag-develop nagsugod na sa pagreklamo nga wala nila mahibal-an kung unsang mga pagtukod ang gilunsad, diin makita ang log, ngano nga pula ang pagtukod, kung unsang pagsulay ang napakyas, ug uban pa.

Ebolusyon sa CI sa mobile development team

Ang mga problema sa feedback nagpahinay sa pag-uswag, mao nga gisulayan namon ang paghatag ingon klaro ug detalyado nga kasayuran bahin sa matag PR ug pagtukod kutob sa mahimo. Nagsugod kami sa mga komento sa Bitbucket ngadto sa PR, nga nagpakita kung unsang pagtukod ang napakyas ug ngano, ug nagsulat sa mga target nga mensahe sa Slack. Sa katapusan, naghimo kami usa ka dashboard sa PR para sa panid nga adunay lista sa tanan nga mga pagtukod nga karon nagdagan ug ang ilang kahimtang: nagpila, nagdagan, nahagsa o ​​nahuman. Mahimo nimong i-klik ang pagtukod ug makuha ang log niini.

Ebolusyon sa CI sa mobile development team

Unom ka semana ang gigugol sa detalyado nga feedback.

Mga plano

Mopadayon ta sa bag-ong kasaysayan. Nasulbad ang isyu sa feedback, nakaabot kami sa usa ka bag-ong lebel - nakahukom kami nga magtukod sa among kaugalingon nga umahan sa emulator. Kung adunay daghang mga pagsulay ug mga emulator, lisud sila pagdumala. Ingon usa ka sangputanan, ang tanan namong mga emulator mibalhin sa k8s cluster nga adunay flexible nga pagdumala sa kapanguhaan.

Dugang pa, adunay uban nga mga plano.

  • Ibalik si Lint (ug uban pang static analysis). Nagtrabaho na kami niini nga direksyon.
  • Pagdalagan ang tanan sa usa ka PR blocker end-to-end nga mga pagsulay sa tanang bersyon sa SDK.

Mao nga, among gisubay ang kasaysayan sa pag-uswag sa Padayon nga Paghiusa sa Avito. Karon gusto kong mohatag og pipila ka tambag gikan sa usa ka eksperyensiyado nga punto sa panglantaw.

Mga tip

Kung makahatag lang ko ug usa ka tambag mao ni:

Palihug pag-amping sa mga script sa shell!

Ang Bash usa ka kaayo nga flexible ug gamhanan nga himan, kini sayon ​​​​kaayo ug paspas sa pagsulat sa mga script. Apan mahimo ka mahulog sa usa ka lit-ag uban niini, ug, sa kasubo, nahulog kami niini.

Nagsugod ang tanan sa yano nga mga script nga nagdagan sa among mga makina sa pagtukod:

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

Apan, sama sa imong nahibal-an, ang tanan nag-uswag ug nahimong mas komplikado sa paglabay sa panahon - atong padaganon ang usa ka script gikan sa lain, ipasa nato ang pipila ka mga parameter didto - sa katapusan kinahanglan namong isulat ang usa ka function nga nagtino sa unsa nga lebel sa bash nesting nga naa kami karon sa han-ay aron isulod ang gikinahanglan nga mga kinutlo, aron masugdan ang tanan.

Ebolusyon sa CI sa mobile development team

Mahimo nimong mahanduraw ang gasto sa pagtrabaho alang sa pagpalambo sa ingon nga mga script. Gitambagan ko ikaw nga dili mahulog sa kini nga lit-ag.

Unsay pwede ilisan?

  • Bisan unsang scripting language. Isulat sa Python o Kotlin Script mas sayon ​​tungod kay kini programming, dili mga script.
  • O ihulagway ang tanan nga lohika sa pagtukod sa porma Pasadya nga mga buluhaton sa gradle alang sa imong proyekto.

Nakahukom kami nga pilion ang ikaduha nga kapilian, ug karon sistematikong gitangtang namon ang tanan nga mga script sa bash ug nagsulat og daghang mga naandan nga buluhaton sa gradle.

Tip #2: Tipigi ang imprastraktura sa code.

Kombenyente kung ang Continuous Integration setting gitipigan dili sa interface sa UI sa Jenkins o TeamCity, ug uban pa, apan sa porma sa mga text file nga direkta sa repositoryo sa proyekto. Naghatag kini og versionability. Dili lisud ang pag-rollback o paghimo sa code sa laing branch.

Ang mga script mahimong tipigan sa usa ka proyekto. Unsa ang buhaton sa palibot?

Tip #3: Makatabang ang Docker sa palibot.

Makatabang gyud kini sa mga developer sa Android; Ang iOS wala pa, sa kasubo.

Kini usa ka pananglitan sa usa ka yano nga docker file nga adunay jdk ug 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

Sa pagsulat niini nga Docker file (Isulti ko kanimo ang usa ka sekreto, dili nimo kinahanglan nga isulat kini, apan kuhaa lang kini nga andam gikan sa GitHub) ug gitigum ang imahe, nakakuha ka usa ka virtual nga makina diin mahimo nimo matukod ang aplikasyon ug pagdagan sa mga pagsulay sa Junit.

Ang duha ka nag-unang rason ngano nga kini makatarunganon mao ang scalability ug repeatability. Gamit ang docker, mahimo nimo nga dali nga mapataas ang usa ka dosena nga mga ahente sa pagtukod nga adunay parehas nga palibot sama sa kaniadto. Gipadali niini ang kinabuhi sa mga inhenyero sa CI. Sayon ra ang pagduso sa android-sdk ngadto sa docker, apan sa mga emulator mas lisud kini: kinahanglan ka nga magtrabaho og gamay (o i-download ang nahuman gikan sa GitHub pag-usab).

Tip No. 4: ayaw kalimti nga ang mga inspeksyon wala gihimo alang sa mga inspeksyon, apan alang sa mga tawo.

Ang dali ug, labing importante, ang tin-aw nga feedback importante kaayo alang sa mga developers: unsa ang nabuak, unsa nga pagsulay ang napakyas, asa nako makita ang buildlog.

Tip #5: Magmapraktiko sa paghimo sa Padayon nga Paghiusa.

Tin-aw nga sabton kung unsa nga mga matang sa mga sayup ang gusto nimong mapugngan, pila ka mga kapanguhaan, oras, ug oras sa kompyuter ang andam nimong igugol. Ang mga tseke nga dugay kaayo mahimo, pananglitan, ma-postpone sa tibuok gabii. Ug kadtong nakakuha sa dili kaayo hinungdanon nga mga sayup kinahanglan nga hingpit nga biyaan.

Tip #6: Gamita ang mga gamit nga andam na.

Adunay daghang mga kompanya karon nga naghatag cloud CI.

Ebolusyon sa CI sa mobile development team

Kini usa ka maayong solusyon alang sa gagmay nga mga grupo. Dili nimo kinahanglan nga suportahan ang bisan unsang butang, pagbayad lang og gamay nga salapi, paghimo sa imong aplikasyon ug bisan pagdagan ang mga pagsulay sa instrumento.

Tip #7: Sa usa ka dako nga team, ang mga in-house nga solusyon mas mapuslanon.

Apan sa madugay o sa madali, samtang ang team motubo, ang in-house nga mga solusyon mahimong mas mapuslanon. Adunay usa ka problema sa kini nga mga desisyon. Adunay usa ka balaod sa pagkunhod sa pagbalik sa ekonomiya: sa bisan unsang proyekto, ang matag sunod nga pag-uswag labi ka lisud ug nanginahanglan labi pa nga pagpamuhunan.

Ang ekonomiya naghulagway sa atong tibuok kinabuhi, lakip ang Padayon nga Paghiusa. Naghimo ako og usa ka iskedyul sa mga gasto sa pagtrabaho alang sa matag yugto sa pagpalambo sa atong Padayon nga Paghiusa.

Ebolusyon sa CI sa mobile development team

Klaro nga ang bisan unsang pag-uswag nahimong labi ka lisud. Sa pagtan-aw sa kini nga graph, imong masabtan nga ang Padayon nga Paghiusa kinahanglan nga pauswagon subay sa pagtubo sa gidak-on sa team. Alang sa usa ka team sa duha ka tawo, ang paggugol ug 50 ka adlaw sa pagpalambo sa usa ka internal nga emulator farm usa ka kasarangan nga ideya. Apan sa samang higayon, alang sa usa ka dako nga team, ang dili pagbuhat sa Padayon nga Paghiusa sa tanan usa usab ka dili maayo nga ideya, tungod kay ang mga problema sa panagsama, pag-ayo sa komunikasyon, ug uban pa. magkinahanglan pa kini og dugang nga panahon.

Nagsugod kami sa ideya nga kinahanglan ang automation tungod kay ang mga tawo mahal, masayop sila ug tapulan. Apan ang mga tawo usab nag-automate. Busa, ang tanan nga parehas nga mga problema magamit sa automation.

  • Mahal ang automation. Hinumdomi ang eskedyul sa pagtrabaho.
  • Kung bahin sa automation, ang mga tawo masayop.
  • Usahay tapolan kaayo ang pag-automate, tungod kay ang tanan molihok sa ingon. Ngano nga pauswagon ang bisan unsa pa, ngano nga kining tanan nga Padayon nga Paghiusa?

Apan ako adunay mga estadistika: ang mga kasaypanan nakuha sa 20% sa mga asembliya. Ug kini dili tungod kay ang among mga developers nagsulat sa code nga dili maayo. Kini tungod kay ang mga developers masaligon nga kon sila makahimo sa pipila ka mga sayop, kini dili matapos sa pagpalambo, kini madakpan pinaagi sa automated checks. Tungod niini, ang mga developers makagugol ug mas daghang oras sa pagsulat sa code ug makapaikag nga mga butang, kay sa pagdagan ug pagsulay sa usa ka butang sa lokal.

Pagpraktis sa Padayon nga Paghiusa. Apan sa kasarangan.

Pinaagi sa dalan, si Nikolai Nesterov dili lamang naghatag ug dagkong mga taho sa iyang kaugalingon, apan usa usab ka miyembro sa komite sa programa AppsConf ug nagtabang sa uban sa pag-andam og makahuluganon nga mga pakigpulong alang kanimo. Ang pagkakompleto ug kapuslanan sa sunod nga programa sa komperensya mahimong masusi pinaagi sa mga hilisgutan sa eskedyul. Ug para sa mga detalye, adto sa Infospace karong Abril 22-23.

Source: www.habr.com

Idugang sa usa ka comment