Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Namuhla, imikhiqizo eminingi yesofthiwe ithuthukiswa ngamaqembu. Izimo zokuthuthukiswa kweqembu ngempumelelo zingamelwa ngendlela yomdwebo olula.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Uma usuyibhalile ikhodi yakho, udinga ukuqiniseka ukuthi:

  1. Iyasebenza.
  2. Akwephuli lutho, okuhlanganisa nekhodi eyabhalwa ozakwenu.

Uma zombili lezi zimo zifeziwe, kusho ukuthi usendleleni eya empumelelweni. Ukuze sihlole kalula lezi zimo futhi singaphambuki endleleni enenzuzo, siqhamuke ne-Continuous Integration.

I-CI wukugeleza komsebenzi lapho uhlanganisa khona ikhodi yakho kukhodi yomkhiqizo wonke kaningi ngangokunokwenzeka. Futhi awugcini nje ukuhlanganisa, kodwa futhi hlola njalo ukuthi konke kuyasebenza. Njengoba udinga ukuhlola okuningi futhi kaningi, kufanelekile ukucabanga ngokuzenzakalelayo. Ungahlola yonke into ngesandla, kodwa akufanele, futhi nakhu ukuthi kungani.

  • Bantu abathandekayo. Ihora lomsebenzi wanoma yimuphi umklami libiza kakhulu kunehora lomsebenzi wanoma iyiphi iseva.
  • Abantu bayawenza amaphutha. Ngakho-ke, izimo zingase ziphakame lapho ukuhlolwa kwenziwa egatsheni elingalungile noma isivumelwano esingalungile sihlanganiselwa abahloli.
  • Abantu bayavilapha. Ngezikhathi ezithile, lapho ngiqeda umsebenzi othile, kufika umcabango othi: β€œYini okufanele ihlolwe? Ngabhala imigqa emibili - konke kuyasebenza! Ngicabanga ukuthi abanye benu nabo ngezinye izikhathi banemicabango enjalo. Kodwa kufanele uhlole njalo.

Ukuthi Ukuhlanganiswa Okuqhubekayo kwaqaliswa kanjani futhi kwathuthukiswa kanjani eqenjini lokuthuthukiswa kweselula le-Avito, ukuthi bahamba kanjani kusukela ku-0 kuya ku-450 ukwakha ngosuku, nokuthi imishini yokwakha ihlanganisa amahora angu-200 ngosuku, kusho u-Nikolai Nesterov (i-nesterov) ungumhlanganyeli kuzo zonke izinguquko zokuziphendukela kwemvelo kohlelo lokusebenza lwe-Android lwe-CI/CD.

Indaba isuselwe esibonelweni somyalo we-Android, kodwa izindlela eziningi ziyasebenza naku-iOS.


Ngesinye isikhathi, umuntu oyedwa wasebenza eqenjini le-Avito Android. Ngencazelo, wayengadingi lutho oluvela ku-Continuous Integration: kwakungekho muntu ozohlanganisa naye.

Kodwa isicelo sakhula, yanda imisebenzi emisha, futhi iqembu lakhula ngokufanele. Kwesinye isikhathi, sekuyisikhathi sokusungula ngokusemthethweni inqubo yokuhlanganisa ikhodi. Kunqunywe ukusebenzisa ukugeleza kwe-Git.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Umqondo wokugeleza kwe-Git waziwa kahle: iphrojekthi inegatsha elilodwa elivamile lokuthuthukisa, futhi isici esisha ngasinye, abathuthukisi basika igatsha elihlukile, bazibophezele kulo, baphushe, futhi lapho befuna ukuhlanganisa ikhodi yabo egatsheni lokuthuthukisa, bavule isicelo sokudonsa. Ukwabelana ngolwazi nokuxoxisana nezindlela, sethule ukubuyekezwa kwekhodi, okungukuthi, ozakwethu kufanele bahlole futhi baqinisekise ikhodi yomunye nomunye.

Amasheke

Ukubona ikhodi ngamehlo kuhle, kodwa akwanele. Ngakho-ke, ukuhlola okuzenzakalelayo kuyethulwa.

  • Okokuqala, sihlola Umhlangano we-ARK.
  • Kakhulu Ukuhlolwa kweJunit.
  • Sibheka ukumbozwa kwekhodi, njengoba senza izivivinyo.

Ukuze uqonde ukuthi lokhu kuhlola kufanele kwenziwe kanjani, ake sibheke inqubo yokuthuthukiswa ku-Avito.

Ingamelwa ngohlelo kanje:

  • Unjiniyela ubhala ikhodi kukhompuyutha yakhe ephathekayo. Ungahlola ukuhlanganisa khona lapha - kungaba ngehuku lokuzibophezela, noma umane wenze ukuhlola ngemuva.
  • Ngemuva kokuthi umthuthukisi ephushe ikhodi, uvula isicelo sokudonsa. Ukuze ikhodi yayo ifakwe egatsheni lokuthuthukisa, kuyadingeka ukuthi udlule ekubuyekezweni kwekhodi futhi uqoqe inombolo edingekayo yokuqinisekisa. Ungavumela ukuhlola nokwakha lapha: kuze kube yilapho konke ukwakhiwa kuphumelele, isicelo sokudonsa asikwazi ukuhlanganiswa.
  • Ngemuva kokuthi isicelo sokudonsa sihlanganisiwe futhi ikhodi ifakiwe ekuthuthukiseni, ungakhetha isikhathi esikahle: isibonelo, ebusuku, lapho wonke amaseva ekhululekile, futhi ugijime amasheke amaningi ngendlela othanda ngayo.

Akekho owayethanda ukusebenzisa izikena kukhompuyutha yakhe ephathekayo. Uma unjiniyela eseqedile isici, ufuna ukusiphusha ngokushesha futhi avule isicelo sokudonsa. Uma kulo mzuzwana kwethulwa amasheke amade, lokhu akugcini nje ngokujabulisayo, kodwa futhi kunciphisa intuthuko: ngenkathi i-laptop ihlola okuthile, akunakwenzeka ukusebenza ngokujwayelekile kuyo.

Besikuthanda kakhulu ukwenza amasheke ebusuku, ngoba kunesikhathi esiningi namaseva, ungazulazula. Kodwa, ngeshwa, lapho ikhodi yesici iqala ukukhula, unjiniyela unogqozi oluncane kakhulu lokulungisa amaphutha atholwe yi-CI. Ngezinye izikhathi ngangizithola ngicabanga lapho ngibheka wonke amaphutha atholakala embikweni wasekuseni engangizowalungisa ngolunye usuku kamuva, ngoba manje kunomsebenzi omusha opholile eJira engifuna ukuwuqala.

Uma amasheke evimba isicelo sokudonsa, khona-ke kukhona ugqozi olwanele, ngoba kuze kube yilapho izakhiwo ziphenduka zibe luhlaza, ikhodi ngeke ingene ekuthuthukiseni, okusho ukuthi umsebenzi ngeke uqedwe.

Njengomphumela, sikhethe isu elilandelayo: sisebenzisa isethi yokuhlola enkulu kakhulu engenzeka ebusuku, futhi sethule abucayi kakhulu kuwo futhi, okubaluleke kakhulu, ashesha kakhulu esicelweni sokudonsa. Kodwa asigcini laphoβ€”ngokuhambisanayo, sikhulisa isivinini sokuhlola ukuze siwadlulise ukusuka kumodi yasebusuku ukuze sidonse amasheke esicelo.

Ngaleso sikhathi, zonke izakhiwo zethu zaqedwa ngokushesha okukhulu, ngakho-ke samane safaka ukwakhiwa kwe-ARK, ukuhlolwa kweJunit kanye nezibalo zokufakwa kwekhodi njengesivimbeli sesicelo sokudonsa. Sayivula, sacabanga ngayo, futhi sayeka ukumbozwa ngekhodi ngoba sasicabanga ukuthi asiyidingi.

Kusithathe izinsuku ezimbili ukusetha ngokuphelele i-CI eyisisekelo (ngemuva kwalokhu isilinganiso sesikhathi siyahlawumbisela, sidingeka esikalini).

Ngemva kwalokho, saqala ukucabanga okwengeziwe - ingabe sihlola kahle? Ingabe siqhuba ukwakha phezu kwezicelo zokudonsa ngendlela efanele?

Saqala ukwakha esivumelwaneni sokugcina segatsha okwavulwa kulo isicelo sokudonsa. Kodwa ukuhlolwa kwalokhu kuzibophezela kungabonisa kuphela ukuthi ikhodi eyabhalwa unjiniyela iyasebenza. Kodwa azikhombisi ukuthi akaphulanga lutho. Eqinisweni, udinga ukuhlola isimo segatsha lokuthuthukisa ngemva kokuba isici sihlanganiswe kuso.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Ukwenza lokhu, sibhale umbhalo we-bash olula premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Lapha zonke izinguquko zakamuva ezivela ekuthuthukisweni zivele zidonswe futhi zihlanganiswe negatsha lamanje. Sengeze iskripthi se-premerge.sh njengesinyathelo sokuqala kukho konke ukwakha futhi saqala ukuhlola ukuthi yini esiyifunayo, okungukuthi ukuhlanganiswa.

Kuthathe izinsuku ezintathu ukwenza inkinga ibe ngokwendawo, uthole isixazululo, futhi ubhale lesi script.

Isicelo sithuthukisiwe, imisebenzi eminingi yavela, iqembu lakhula, futhi i-premerge.sh ngezinye izikhathi yaqala ukusehlisa. Ukuthuthukisa kube nezinguquko ezingqubuzanayo eziphule isakhiwo.

Isibonelo sokuthi lokhu kwenzeka kanjani:

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Onjiniyela ababili ngesikhathi esisodwa baqala ukusebenza ezicini A no-B. Umthuthukisi wesici A uthola isici esingasetshenzisiwe kuphrojekthi answer() futhi, njengenhloli yomfana omuhle, uyayisusa. Ngesikhathi esifanayo, umthuthukisi wesici B wengeza ucingo olusha kulo msebenzi egatsheni lakhe.

Onjiniyela baqeda umsebenzi wabo futhi bavula isicelo sokudonsa ngesikhathi esifanayo. Ukwakhiwa kuyethulwa, i-premerge.sh ihlola zombili izicelo zokudonsa mayelana nesimo sakamuva sokuthuthukisa - wonke amasheke aluhlaza. Ngemva kwalokho, isicelo sokudonsa sesici A siyahlanganiswa, isicelo sokudonsa sesici B siyahlanganiswa... Boom! Yakha amakhefu ngoba ikhodi yokuthuthukisa iqukethe ucingo oluya kumsebenzi ongekho.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Lapho ngeke ukuthuthukisa, kuba inhlekelele yendawo. Ithimba lonke alikwazi ukuqoqa noma yini futhi liyithumele ukuze ihlolwe.

Kwenzeka ukuthi ngivame ukusebenza emisebenzini yengqalasizinda: ukuhlaziya, inethiwekhi, imininingwane yolwazi. Okusho ukuthi, yimina owabhala leyo misebenzi namakilasi asetshenziswa abanye abathuthukisi. Ngenxa yalokhu, ngazithola ngisesimweni esifanayo kaningi. Ngize ngaba nalesi sithombe silenga isikhashana.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Njengoba lokhu kungahambisani nathi, saqala ukuhlola izinketho zokuthi singakuvimbela kanjani lokhu.

Ungaphuli kanjani ukuthuthukisa

Inketho yokuqala: yakha kabusha zonke izicelo zokudonsa lapho kuthuthukiswa ukuthuthukisa. Uma, esibonelweni sethu, isicelo sokudonsa esinesici A singesokuqala ukufakwa ekuthuthukisweni, isicelo sokudonsa sesici B sizokwakhiwa kabusha, futhi, ngokufanele, amasheke azohluleka ngenxa yephutha lokuhlanganiswa.

Ukuze uqonde ukuthi lokhu kuzothatha isikhathi esingakanani, cabanga ngesibonelo esinama-PR amabili. Sivula ama-PR amabili: ukwakha okubili, ukugijima okubili kokuhlola. Ngemuva kokuthi i-PR yokuqala ihlanganiswe ekuthuthukisweni, eyesibili idinga ukwakhiwa kabusha. Sekukonke, ama-PR amabili adinga amasheke ama-run amathathu: 2 + 1 = 3.

Empeleni, kuhle. Kodwa sibheke izibalo, futhi isimo esijwayelekile eqenjini lethu bekungama-PR avuliwe ayi-10, bese inani lamasheke liyisamba sokuqhubeka: 10 + 9 +... + 1 = 55. Okusho ukuthi, ukwamukela i-10 PRs, udinga ukwakha kabusha izikhathi ezingama-55. Futhi lokhu kusesimweni esihle, lapho wonke amasheke edlula okokuqala, lapho kungekho muntu ovula isicelo esengeziwe sokudonsa ngenkathi lawa mbalwa asacutshungulwa.

Zicabange ungumthuthukisi odinga ukuba ngowokuqala ukuchofoza inkinobho ethi "hlanganisa", ngoba uma umakhelwane enza lokhu, kuzodingeka ulinde kuze kube yilapho zonke izakhiwo zidlula futhi ... Cha, lokho ngeke kusebenze. , izonciphisa kakhulu intuthuko.

Indlela yesibili engenzeka: qoqa izicelo zokudonsa ngemuva kokubuyekezwa kwekhodi. Okusho ukuthi, uvula isicelo sokudonsa, uqoqe inombolo edingekayo yokugunyazwa kozakwethu, ulungise okudingekayo, bese uqala ukwakha. Uma ziphumelele, isicelo sokudonsa sihlanganiswa sithuthukiswe. Kulokhu, akukho ukuqalisa kabusha okwengeziwe, kodwa impendulo yehliswa kakhulu. Njengonjiniyela, lapho ngivula isicelo sokudonsa, ngokushesha ngifuna ukubona ukuthi sizosebenza yini. Isibonelo, uma ukuhlola kuhluleka, udinga ukukulungisa ngokushesha. Endabeni yokwakhiwa okubambezelekile, impendulo iyancipha, ngakho-ke yonke intuthuko. Nathi lokhu akusifanelanga.

Ngenxa yalokho, kwasala kuphela inketho yesithathu - ukuhamba ngebhayisikili. Yonke ikhodi yethu, yonke imithombo yethu igcinwe endaweni yokugcina kuseva ye-Bitbucket. Ngakho-ke, bekufanele sakhe i-plugin ye-Bitbucket.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Le plugin ikhipha indlela yokuhlanganisa isicelo sokudonsa. Isiqalo sijwayelekile: i-PR iyavula, yonke imihlangano yethulwa, ukubuyekezwa kwekhodi kuqediwe. Kodwa ngemva kokuqedwa kokubuyekezwa kwekhodi futhi umthuthukisi enquma ukuchofoza "hlanganisa", ama-plugin ahlola lapho kuthuthukiswa khona isimo lapho ukuhlola kwenziwe khona. Uma ukuthuthukisa kubuyekeziwe ngemva kokwakhiwa, i-plugin ngeke ivumele isicelo esinjalo sokudonsa ukuthi sihlanganiswe negatsha elikhulu. Izovele iqale kabusha ukwakhiwa kokuthuthukiswa kwakamuva.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Esibonelweni sethu esinezinguquko ezingqubuzanayo, ukwakhiwa okunjalo kuzohluleka ngenxa yephutha lokuhlanganisa. Ngokufanelekile, umthuthukisi wesici B kuzodingeka alungise ikhodi, aqale kabusha amasheke, bese i-plugin izosebenzisa ngokuzenzakalelayo isicelo sokudonsa.

Ngaphambi kokusebenzisa le plugin, senze isilinganiso sokubuyekezwa okungu-2,7 ngesicelo ngasinye sokudonsa. Nge-plugin kube nokwethulwa okungu-3,6. Lokhu kwasifanela.

Kubalulekile ukuqaphela ukuthi le plugin ine-drawback: iqala kabusha ukwakha kanye kuphela. Okusho ukuthi, kusekhona iwindi elincane lapho izinguquko ezingqubuzanayo zingangena khona ukuthuthukisa. Kodwa amathuba alokhu aphansi, futhi senze lokhu kuhwebelana phakathi kwenani leziqalo kanye nethuba lokwehluleka. Eminyakeni emibili ladubula kanye kuphela, ngakho cishe akuzange kube yize.

Kwasithatha amasonto amabili ukubhala inguqulo yokuqala ye-plugin ye-Bitbucket.

Amasheke amasha

Khonamanjalo, iqembu lethu laqhubeka nokukhula. Amasheke amasha engeziwe.

Sacabanga: kungani enze amaphutha uma engavinjelwa? Futhi yingakho basebenzise ukuhlaziya ikhodi emile. Siqale nge-lint, efakwe ku-Android SDK. Kodwa ngaleso sikhathi wayengazi ukuthi angasebenza kanjani ngekhodi ye-Kotlin nhlobo, futhi sase sine-75% yesicelo esibhalwe e-Kotlin. Ngakho-ke, ezakhelwe ngaphakathi zengezwa ku-lint I-Android Studio iyahlola.

Ukuze senze lokhu, bekufanele senze okuningi okuphendukezela: thatha i-Android Studio, siyipakishe ku-Docker futhi siyiqhube ku-CI nge-monitor ebonakalayo, ukuze icabange ukuthi isebenza kwi-laptop yangempela. Kodwa kwasebenza.

Kungalesi sikhathi futhi lapho saqala khona ukubhala kakhulu ukuhlolwa kwezinsimbi futhi senziwe ukuhlolwa kwesithombe-skrini. Kulapho isithombe-skrini esiyisethenjwa senziwa khona ukuze kubonakale kancane okuhlukile, futhi ukuhlola kuhlanganisa ukuthatha isithombe-skrini esibukweni bese usiqhathanisa nephikseli elijwayelekile eliqondile ngephikseli. Uma kukhona ukuphambana, kusho ukuthi ukwakheka konakele ndawana thize noma kukhona okungalungile ezitayela.

Kodwa ukuhlolwa kwezinsimbi nokuhlolwa kwesithombe-skrini kudinga ukwenziwa kumadivayisi: kuma-emulators noma kumadivayisi angempela. Uma kubhekwa ukuthi ziningi izivivinyo futhi zenziwa njalo, kudingeka ipulazi lonke. Ukuqala ipulazi lakho kufuna umsebenzi omningi, ngakho-ke sithole inketho eseyenziwe ngomumo - Ilebhu Yokuhlola I-Firebase.

Ilebhu yokuhlola ye-Firebase

Ikhethwe ngenxa yokuthi i-Firebase iwumkhiqizo we-Google, okusho ukuthi kufanele ithembeke futhi kungenzeki ukuba iphinde ife. Izintengo zinengqondo: $5 ngehora lokusebenza kwedivayisi yangempela, i-1 $ ngehora lokusebenza kwe-emulator.

Kuthathe cishe amasonto amathathu ukusebenzisa i-Firebase Test Lab ku-CI yethu.

Kodwa iqembu laqhubeka nokukhula, futhi iFirebase, ngeshwa, yaqala ukusehlisa. Ngaleso sikhathi, wayengenayo i-SLA. Kwesinye isikhathi i-Firebase yayisenza silinde kuze kube yilapho inombolo edingekayo yamadivayisi imahhala ukuze ihlolwe, futhi ayizange iqale ukuwasebenzisa ngokushesha, njengoba besifuna. Ukulinda kulayini kuthathe isigamu sehora, okuyisikhathi eside kakhulu. Ukuhlolwa kwezinsimbi kwenziwa kuwo wonke ama-PR, ukubambezeleka kwayibambezela ngempela intuthuko, kwase kuthi umthethosivivinywa wanyanga zonke weza nesamba esiyindilinga. Ngokuvamile, kwanqunywa ukushiya i-Firebase nokusebenza endlini, ngoba iqembu lase likhule ngokwanele.

I-Docker + Python + bash

Sithathe i-Docker, safaka ama-emulators kuwo, sabhala uhlelo olulula ku-Python, okuthi ngesikhathi esifanele ilethe inombolo edingekayo yama-emulators enguqulweni edingekayo futhi ibamise lapho kudingeka. Futhi, kunjalo, imibhalo embalwa ye-bash - besiyoba kuphi ngaphandle kwayo?

Kuthathe amaviki amahlanu ukudala indawo yethu yokuhlola.

Ngenxa yalokho, kuso sonke isicelo sokudonsa kube nohlu olubanzi lokuvimbela ukuhlanganisa lokuhlola:

  • Umhlangano we-ARK;
  • Ukuhlolwa kweJunit;
  • I-Lint;
  • Amasheke e-Android Studio;
  • Ukuhlolwa kwezinsimbi;
  • Ukuhlolwa kwesithombe-skrini.

Lokhu kuvimbele ukuqhekeka okuningi okungenzeka. Ngobuchwepheshe yonke into yasebenza, kodwa abathuthukisi bakhala ngokuthi ukulinda imiphumela kude kakhulu.

Yinde kangakanani? Silayishe idatha esuka ku-Bitbucket ne-TeamCity ohlelweni lokuhlaziya futhi sakubona lokho isilinganiso sokulinda imizuzu engama-45. Okusho ukuthi, umthuthukisi, lapho evula isicelo sokudonsa, ulinda ngokwesilinganiso imizuzu engama-45 ukuthola imiphumela yokwakha. Ngokubona kwami, lokhu kuningi, futhi awukwazi ukusebenza kanjalo.

Yebo, sinqume ukusheshisa zonke izakhiwo zethu.

Asisheshise

Ukubona ukuthi izakhiwo zivame ukuma kulayini, into yokuqala esiyenzayo uthenge i-hardware eyengeziwe - ukuthuthukiswa okubanzi kulula kakhulu. Amabhilidi ayeka ujenga, kodwa isikhathi sokulinda sehle kancane, ngoba amanye amasheke ngokwawo athatha isikhathi eside kakhulu.

Ukukhipha amasheke athatha isikhathi eside kakhulu

Ukuhlanganiswa Kwethu Okuqhubekayo kungase kubambe lezi zinhlobo zamaphutha nezinkinga.

  • Ngeke. I-CI ingabamba iphutha lokuhlanganisa lapho okuthile kungakhi ngenxa yezinguquko ezingqubuzanayo. Njengoba sengishilo, akekho ongahlanganisa noma yini, intuthuko iyama, futhi wonke umuntu uyathuthumela.
  • Isiphazamisi ekuziphatheni. Isibonelo, uma uhlelo lwakhiwe, kodwa luyaphahlazeka uma ucindezela inkinobho, noma inkinobho ayicindezelwa nhlobo. Lokhu kubi ngoba iphutha elinjalo lingafinyelela kumsebenzisi.
  • Isiphazamisi esakhiweni. Isibonelo, inkinobho iyachofozwa, kodwa ihambise amaphikseli angu-10 kwesokunxele.
  • Ukwenyuka kwezikweletu zobuchwepheshe.

Ngemva kokubheka lolu hlu, saqaphela ukuthi amaphuzu amabili okuqala kuphela abalulekile. Sifuna ukubamba izinkinga ezinjalo kuqala. Iziphazamisi esakhiweni zitholwa esigabeni sokubuyekeza umklamo futhi zingalungiswa kalula ngaleso sikhathi. Ukubhekana nesikweletu sobuchwepheshe kudinga inqubo ehlukile nokuhlela, ngakho-ke sinqume ukungasihloli ngesicelo sokudonsa.

Ngokusekelwe kulokhu kuhlukaniswa, sinyakazise lonke uhlu lwamasheke. Weqa uLint futhi yahlehlisa ukwethulwa kwayo ngobusuku obubodwa: ukuze nje izokhipha umbiko wokuthi zingaki izinkinga ezibe khona kuphrojekthi. Savumelana ukusebenza ngokwehlukana nesikweletu sobuchwepheshe, futhi Ukuhlolwa kwe-Android Studio kuyekwe ngokuphelele. I-Android Studio ku-Docker yokuhlola ukuhlola izwakala ijabulisa, kodwa idala izinkinga eziningi ekusekelweni. Noma isiphi isibuyekezo sezinguqulo ze-Android Studio sisho ukulwa neziphazamisi ezingaqondakali. Kwakunzima futhi ukusekela ukuhlolwa kwesithombe-skrini, ngoba umtapo wolwazi wawungazinzile kakhulu futhi kwakukhona amanga. Ukuhlolwa kwesithombe-skrini kususiwe ohlwini lokuhlola.

Ngenxa yalokho, sashiywa nalezi:

  • Umhlangano we-ARK;
  • Ukuhlolwa kweJunit;
  • Ukuhlolwa kwezinsimbi.

I-Gradle inqolobane yesilawuli kude

Ngaphandle kokuhlolwa kanzima, konke kwaba ngcono. Kodwa akukho mkhawulo ekupheleleni!

Uhlelo lwethu lokusebenza bese luvele luhlukaniswe lwaba amamojula we-gradle angaba ngu-150. Isilondolozi esikude se-Gradle ngokuvamile sisebenza kahle kuleli cala, ngakho-ke sinqume ukuyizama.

I-Gradle cache iyisevisi engagcina inqolobane yokwakha ama-artifact emisebenzi ngayinye kumamojula angawodwana. I-Gradle, esikhundleni sokuhlanganisa ikhodi empeleni, isebenzisa i-HTTP ukuze ingqongqoze kunqolobane yesilawuli kude futhi ibuze ukuthi ingabe kukhona umuntu osewenzile yini lo msebenzi. Uma kunjalo, ivele ilande umphumela.

Ukugijima i-Gradle cache ekude kulula ngoba i-Gradle inikeza isithombe se-Docker. Sikwazile ukukwenza lokhu ngamahora amathathu.

Okwakufanele ukwenze ukwethula i-Docker bese ubhala umugqa owodwa kuphrojekthi. Kodwa nakuba ingase yethulwe ngokushesha, kuzothatha isikhathi esiningi ukuze yonke into isebenze kahle.

Ngezansi inqolobane igeja igrafu.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Ekuqaleni, iphesenti lokuphuthelwa kwenqolobane lalicishe libe ngu-65. Ngemva kwamasonto amathathu, sikwazile ukukhuphula leli nani laya ku-20%. Kuvele ukuthi imisebenzi eqoqwa uhlelo lwe-Android inokuncika okuxakayo okuxakayo, ngenxa yokuthi u-Gradle ugeje inqolobane.

Ngokuxhuma i-cache, sisheshise kakhulu ukwakha. Kodwa ngaphezu kokuhlanganisa, kukhona nokuhlolwa kwezinsimbi, futhi kuthatha isikhathi eside. Mhlawumbe akuzona zonke izivivinyo ezidinga ukwenziwa kuzo zonke izicelo zokudonsa. Ukuze sithole, sisebenzisa ukuhlaziywa komthelela.

Ukuhlaziywa komthelela

Esicelweni sokudonsa, siqoqa i-git diff futhi sithole amamojula e-Gradle alungisiwe.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Kunengqondo ukwenza kuphela izivivinyo zezinsimbi ezihlola amamojula ashintshiwe nawo wonke amamojula ancike kuwo. Asikho isidingo sokusebenzisa izivivinyo zamamojula angomakhelwane: ikhodi lapho ayikashintshi futhi akukho okungaphuka.

Ukuhlolwa kwezinsimbi akulula kangako, ngoba kufanele kubekwe kumojula yohlelo lokusebenza yezinga eliphezulu. Sisebenzise i-heuristics ngokuhlaziywa kwe-bytecode ukuze siqonde ukuthi iyiphi imojula yokuhlola ngakunye.

Ukuthuthukisa ukusebenza kokuhlolwa kwezinsimbi ukuze kuhlolwe kuphela amamojula ahilelekile kuthathe cishe amasonto ayisishiyagalombili.

Izinyathelo zokusheshisa ukuhlolwa zisebenze ngempumelelo. Kusukela kumaminithi we-45 sikhuphukele cishe ku-15. Sekuvele kujwayelekile ukulinda ingxenye yesine yehora ukuze kwakhiwe.

Kodwa manje abathuthukisi sebeqalile ukukhononda ngokuthi abaqondi ukuthi yiziphi izakhiwo eziqaliswayo, lapho ungabona khona ugodo, kungani ukwakhiwa kubomvu, yikuphi ukuhlolwa okuhlulekile, njll.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Izinkinga ngempendulo zibambezela ukuthuthukiswa, ngakho-ke sizame ukunikeza imininingwane ecacile nenemininingwane mayelana ne-PR ngayinye futhi sakhe ngangokunokwenzeka. Saqala ngamazwana ku-Bitbucket kuya ku-PR, okubonisa ukuthi yikuphi ukwakha okuhlulekile futhi kungani, futhi sabhala imilayezo ehlosiwe ku-Slack. Ekugcineni, sidale ideshibhodi ye-PR yekhasi enohlu lwazo zonke izakhiwo ezisebenzayo nezimo zazo: ezikulayini, ezisebenzayo, eziphahlazekile noma eziqediwe. Ungachofoza ekwakheni bese ufika kulogi yayo.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Kwachithwa amasonto ayisithupha ekuphenduleni okuningiliziwe.

Izinhlelo

Asiqhubekele emlandweni wakamuva. Ngemva kokuxazulula inkinga yempendulo, sifinyelele izinga elisha - sanquma ukwakha ipulazi lethu lokulingisa. Uma kunezivivinyo eziningi nama-emulators, kunzima ukuphatha. Ngenxa yalokho, wonke ama-emulators ethu athuthele ku-k8s cluster enokuphathwa kwezinsiza ezivumelana nezimo.

Ngaphezu kwalokho, kunezinye izinhlelo.

  • Buyisa I-Lint (nokunye ukuhlaziya okumile). Sesivele sisebenzela kule ndlela.
  • Sebenzisa yonke into ku-PR blocker ukuhlolwa kokuphela-to-ekupheleni kuzo zonke izinguqulo ze-SDK.

Ngakho-ke, silandele umlando wokuthuthukiswa Kokuhlanganiswa Okuqhubekayo ku-Avito. Manje ngifuna ukunikeza iseluleko ngombono onolwazi.

Amathiphu

Uma nginganikeza iseluleko esisodwa nje kungaba yilesi:

Sicela uqaphele imibhalo yegobolondo!

I-Bash iyithuluzi elivumelana nezimo kakhulu futhi elinamandla, kulula kakhulu futhi kuyashesha ukubhala imibhalo. Kodwa ungawela ogibeni nayo, futhi, ngeshwa, sawela kukho.

Konke kwaqala ngemibhalo elula esebenza emishinini yethu yokwakha:

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

Kepha, njengoba wazi, yonke into iyathuthuka futhi iba yinkimbinkimbi ngokuhamba kwesikhathi - ake sisebenzise iskripthi esisodwa kwesinye, sidlule amapharamitha lapho - ekugcineni bekufanele sibhale umsebenzi onquma ukuthi sikuliphi izinga le-bash nesting manje ukuze ukufaka izingcaphuno ezidingekayo, ukuze uqalise konke.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Ungacabanga izindleko zabasebenzi zokuthuthukiswa kwemibhalo enjalo. Ngikweluleka ukuthi ungangeni kulolu gibe.

Yini engashintshwa?

  • Noma yiluphi ulimi lokubhala. Bhala ku I-Python noma i-Kotlin Script kulula kakhulu ngoba iwuhlelo, hhayi imibhalo.
  • Noma chaza yonke ingqondo yokwakha efomini Imisebenzi ye-gradled yangokwezifiso kuphrojekthi yakho.

Sinqume ukukhetha inketho yesibili, futhi manje sesisusa ngokuhlelekile zonke izikripthi ze-bash futhi sibhala imisebenzi eminingi ye-gradle yangokwezifiso.

Ithiphu #2: Gcina ingqalasizinda ngekhodi.

Kulula uma isilungiselelo Sokuhlanganisa Okuqhubekayo singagcinwa kusixhumi esibonakalayo se-UI se-Jenkins noma i-TeamCity, njll., kodwa ngendlela yamafayela ombhalo ngqo endaweni yokugcina iphrojekthi. Lokhu kunikeza inguqulo. Ngeke kube nzima ukuhlehlisa noma ukwakha ikhodi kwelinye igatsha.

Imibhalo ingagcinwa kuphrojekthi. Yini okufanele uyenze ngemvelo?

Ithiphu #3: I-Docker ingasiza ngemvelo.

Izosiza abathuthukisi be-Android nakanjani; i-iOS ayinayo okwamanje, ngeshwa.

Lesi isibonelo sefayela le-docker elilula eliqukethe i-jdk ne-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

Ngemva kokubhala leli fayela le-Docker (ngizokutshela imfihlo, akudingeki ukuthi ulibhale, kodwa vele ulidonse selilungile lenziwe kwa-GitHub) futhi uhlanganise isithombe, uthola umshini obonakalayo ongakha kuwo uhlelo lokusebenza. bese uqhuba izivivinyo zikaJunit.

Izizathu ezimbili eziyinhloko zokuthi kungani lokhu kunengqondo ukulinganisa nokuphindaphinda. Usebenzisa i-docker, ungakwazi ukukhulisa ngokushesha ama-ejenti okwakha ayishumi nambili azoba nendawo efanayo ncamashi neyangaphambili. Lokhu kwenza impilo yonjiniyela be-CI ibe lula kakhulu. Kulula kakhulu ukusunduza i-android-sdk kudocker, kodwa ngama-emulators kuba nzima kakhudlwana: kuzodingeka usebenze kakhudlwana (noma ulande eqediwe ku-GitHub futhi).

Ithiphu No. 4: ungakhohlwa ukuthi ukuhlolwa akwenziwa ngenjongo yokuhlolwa, kodwa kwenziwa abantu.

Ngokushesha futhi, okubaluleke kakhulu, impendulo ecacile ibaluleke kakhulu kubathuthukisi: yini ephukile, yikuphi ukuhlolwa okuhlulekile, ngingayibona kuphi i-buildlog.

Ithiphu #5: Yiba ne-pragmatic lapho uthuthukisa Ukuhlanganisa Okuqhubekayo.

Qonda ngokusobala ukuthi yiziphi izinhlobo zamaphutha ofuna ukuwavimba, zingakanani izinsiza, isikhathi, nesikhathi sekhompyutha ozimisele ukusichitha. Amasheke athatha isikhathi eside kakhulu, ngokwesibonelo, angahlehliswa ngobusuku. Futhi labo ababamba amaphutha angabalulekile kakhulu kufanele bashiywe ngokuphelele.

Ithiphu #6: Sebenzisa amathuluzi asevele enziwe.

Kunezinkampani eziningi manje ezihlinzeka ngamafu CI.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Lesi yisixazululo esihle samaqembu amancane. Awudingi ukweseka noma yini, vele ukhokhe imali encane, yakha uhlelo lwakho lokusebenza futhi wenze nokuhlolwa kwezinsimbi.

Ithiphu #7: Eqenjini elikhulu, izixazululo zasendlini zinenzuzo enkulu.

Kodwa ngokushesha noma kamuva, njengoba iqembu likhula, izixazululo zasendlini zizoba nenzuzo eyengeziwe. Kunenkinga eyodwa ngalezi zinqumo. Kunomthetho wokunciphisa imbuyiselo kwezomnotho: kunoma iyiphi iphrojekthi, ukuthuthukiswa ngakunye okulandelayo kuba nzima kakhulu futhi kudinga ukutshalwa kwezimali okwengeziwe.

I-Economics ichaza impilo yethu yonke, okuhlanganisa nokuhlanganisa okuqhubekayo. Ngakha ishejuli yezindleko zabasebenzi esigabeni ngasinye sokuthuthukiswa Kokuhlanganiswa kwethu Okuqhubekayo.

Ukuvela kwe-CI eqenjini lokuthuthukisa iselula

Kuyacaca ukuthi noma yikuphi ukuthuthukiswa kuya kuba nzima nakakhulu. Uma ubheka le grafu, ungaqonda ukuthi Ukuhlanganiswa Okuqhubekayo kudinga ukuthuthukiswa ngokuhambisana nokukhula kosayizi weqembu. Eqenjini labantu ababili, ukuchitha izinsuku ezingu-50 ukwakha ipulazi lokulingisa langaphakathi kuwumbono ongemuhle. Kodwa ngesikhathi esifanayo, eqenjini elikhulu, ukungenzi Ukuhlanganisa Okuqhubekayo nhlobo nakho kuwumqondo omubi, ngoba izinkinga zokuhlanganisa, ukulungisa ukuxhumana, njll. kuzothatha isikhathi esengeziwe.

Siqale ngombono wokuthi i-automation iyadingeka ngoba abantu bayabiza, bayawenza amaphutha futhi bayavilapha. Kodwa abantu futhi bayazenzakalela. Ngakho-ke, zonke izinkinga ezifanayo zisebenza ku-automation.

  • Okuzenzakalelayo kuyabiza. Khumbula isimiso somsebenzi.
  • Uma kukhulunywa nge-automation, abantu bayawenza amaphutha.
  • Kwesinye isikhathi kuvilapha kakhulu ukuzenzela, ngoba konke kusebenza ngaleyo ndlela. Kungani uthuthukisa noma yini enye, kungani konke lokhu Kudidiyelwa Okuqhubekayo?

Kodwa nginezibalo: amaphutha abanjwe ku-20% wemihlangano. Futhi lokhu akubangelwa ukuthi abathuthukisi bethu babhala ikhodi kabi. Lokhu kungenxa yokuthi abathuthukisi bayaqiniseka ukuthi uma benza iphutha, ngeke ligcine selithuthukile, lizobanjwa amasheke azenzakalelayo. Ngokufanelekile, abathuthukisi bangachitha isikhathi esiningi bebhala ikhodi nezinto ezithokozisayo, kunokugijima nokuhlola okuthile endaweni.

Prakthiza Ukuhlanganisa Okuqhubekayo. Kodwa ngokulinganisela.

Ngendlela, u-Nikolai Nesterov akagcini nje ngokunikeza imibiko emihle, kodwa futhi uyilungu lekomidi lohlelo I-AppsConf futhi isiza abanye bakulungiselele izinkulumo eziphusile. Ukuphelela nokuba wusizo kohlelo lwengqungquthela elandelayo kungahlolwa ngezihloko eziku uhlelo. Futhi ngemininingwane, woza ku-Infospace ngo-Ephreli 22-23.

Source: www.habr.com

Engeza amazwana