Evolution yeCI muchikwata chekusimudzira nhare

Nhasi, zvigadzirwa zvakawanda zvesoftware zvinogadzirwa muzvikwata. Mamiriro ekubudirira kwechikwata chekubudirira anogona kumiririrwa nenzira yedhiyagiramu iri nyore.

Evolution yeCI muchikwata chekusimudzira nhare

Kana uchinge wanyora kodhi yako, unofanirwa kuve nechokwadi kuti:

  1. Kushanda.
  2. Izvo hazvina kutyora chero chinhu, kusanganisira iyo kodhi yakanyorwa nevamwe vako.

Kana mamiriro ese ari maviri asangana, saka iwe uri munzira yekubudirira. Kuti titarise zviri nyore aya mamiriro uye kusatsauka kubva munzira ine pundutso, isu takauya neKuenderera Kubatanidzwa.

CI kufambiswa kwebasa kwaunobatanidza kodhi yako mune yakazara chigadzirwa kodhi kakawanda sezvinobvira. Uye haungosanganisi chete, asiwo gara uchitarisa kuti zvese zviri kushanda. Sezvo iwe uchifanira kutarisa zvakanyanya uye kazhinji, zvakakodzera kufunga nezve otomatiki. Iwe unogona kutarisa zvese nemaoko, asi haufanirwe, uye heino chikonzero.

  • Vanhu vanodikanwa. Awa yebasa yechero programmer inodhura kupfuura awa yebasa chero server.
  • Vanhu vanokanganisa. Naizvozvo, mamiriro anogona kumuka apo bvunzo dzakaitwa pabazi risiri iro kana kuti chisungo chisiri icho chakagadzirirwa kuyedza.
  • Vanhu vane nungo. Nguva nenguva, pandinopedza basa, pfungwa inomuka: β€œChii chiripo chekutarisa? Ndakanyora mitsara miviri - zvose zvinoshanda! Ndinofunga kuti vamwe venyuwo dzimwe nguva mune pfungwa dzakadaro. Asi unofanira kugara uchiongorora.

Kuenderera mberi Kubatanidzwa kwakaitwa uye kwakagadziridzwa muchikwata cheAvito chekusimudzira mafoni, mafambiro avakaita kubva ku0 kusvika ku450 kuvaka pazuva, uye iyo inovaka michina inounganidza maawa e200 pazuva, anodaro Nikolai Nesterov (nnesterov) ari kutora chikamu mukushanduka kwese kweCI/CD Android application.

Iyo nyaya yakavakirwa pamuenzaniso wemirairo yeAroid, asi nzira zhinji dzinoshanda paIOS zvakare.


Pane imwe nguva, munhu mumwe akashanda muAvito Android timu. Netsanangudzo, aisada chero chinhu kubva kuContinuous Integration: pakanga pasina munhu wekubatanidza naye.

Asi iyo application yakawedzera, mamwe mabasa matsva akaonekwa, uye timu yakakura saizvozvo. Pane imwe nguva, inguva yekuwedzera zviri pamutemo kodhi yekubatanidza maitiro. Zvakasarudzwa kushandisa Git kuyerera.

Evolution yeCI muchikwata chekusimudzira nhare

Pfungwa yekuyerera kweGit inonyanyozivikanwa: purojekiti ine rimwe rakajairika kusimudzira bazi, uye kune chimwe nechimwe chinhu chitsva, vanogadzira vanocheka bazi rakasiyana, kuzvipira kwariri, kusunda, uye kana vachida kubatanidza kodhi yavo mubazi rekuvandudza, vhura a. dhonza chikumbiro. Kuti tigovane ruzivo uye kukurukura nzira, takaunza ongororo yekodhi, ndiko kuti, vatinoshanda navo vanofanirwa kutarisa nekusimbisa kodhi yemumwe nemumwe.

Checks

Kuona kodhi nemeso ako kunotonhorera, asi hakuna kukwana. Naizvozvo, macheki otomatiki ari kuunzwa.

  • Chokutanga pane zvose, tinotarisa ARK musangano.
  • Zvakawanda Junit miedzo.
  • Isu tinofunga nezvekuvhara kwekodhi, sezvo tiri kumhanya bvunzo.

Kuti tinzwisise kuti macheki aya anofanira kuitwa sei, ngatitarisei maitiro ekuvandudza muAvito.

Inogona kumiririrwa schematically seizvi:

  • Mugadziri anonyora kodhi palaptop yake. Iwe unogona kumhanya yekubatanidza macheki pano - kungave nekuita hoku, kana kungomhanyisa cheki kumashure.
  • Mushure mekunge mugadziri asundidzira kodhi, anovhura chikumbiro chekudhonza. Kuti kodhi yayo ibatanidzwe mubazi rekuvandudza, zvinodikanwa kuti uende kuburikidza nekuongorora kodhi uye kuunganidza nhamba inodiwa yekusimbisa. Unogona kugonesa cheki uye kuvaka pano: kudzamara zvese zvinovaka zvabudirira, chikumbiro chekudhonza hachigone kubatanidzwa.
  • Mushure mekunge chikumbiro chekudhonza chabatanidzwa uye kodhi inosanganisirwa mukukudziridza, unogona kusarudza nguva yakakodzera: semuenzaniso, husiku, kana maseva ese akasununguka, uye mhanyisa macheki akawanda sezvaunoda.

Hapana aifarira kumhanyisa scan palaptop yavo. Kana mugadziri apedza chimiro, anoda kukurumidza kusunda uye kuvhura chikumbiro chekudhonza. Kana panguva ino mamwe macheki akareba akatangwa, izvi hazvisi izvo chete zvisingafadzi, asi zvakare zvinononoka kusimudzira: nepo laptop iri kutarisa chimwe chinhu, hazvibviri kushanda zvakajairika pairi.

Isu taida chaizvo kumhanya macheki husiku, nekuti pane yakawanda nguva uye maseva, unogona kutenderera. Asi, zvinosuruvarisa, kana iyo kodhi kodhi ikapinda mukuvandudza, mugadziri ane zvishoma zvekukurudzira kugadzirisa zvikanganiso zvakawanikwa neCI. Ini nguva nenguva ndaizvibata ndichifunga pandakatarisa zvikanganiso zvese zvakawanikwa mushumo wemangwanani kuti ndaizozvigadzirisa rimwe zuva gare gare, nekuti ikozvino kune basa idzva rinotonhorera muJira randinongoda kutanga kuita.

Kana cheki ichivharira chikumbiro chekudhonza, saka pane zvakakwana zvinokurudzira, nekuti kusvika izvo zvinovaka zvachinja girini, iyo kodhi haizopinda mukukudziridza, izvo zvinoreva kuti basa harizopedzwa.

Nekuda kweizvozvo, isu takasarudza iyo inotevera zano: isu tinomhanyisa iyo yakanyanya kugoneka seti yecheki husiku, uye totanga iyo inonyanya kutsoropodza yavo uye, zvakanyanya kukosha, inokurumidza pane chikumbiro chekudhonza. Asi isu hatimire ipapo-pamwe chete, tinokwidziridza kumhanya kwecheki kuitira kuti tivatamise kubva kuhusiku modhi kuti vadhonze macheki ekukumbira.

Panguva iyoyo, zvese zvatinovaka zvakapedzwa nekukasira, saka isu takangobatanidza iyo ARK kuvaka, Junit bvunzo uye kodhi yekuvhara maverengero sevhavha yechikumbiro chekudhonza. Takaibatidza, tikafunga nezvazvo, uye tikasiya kuvharwa kwekodhi nekuti taifunga kuti hatiide.

Zvakatitorera mazuva maviri kumisikidza zvizere CI yekutanga (zvino nguva yekufungidzira inofungidzirwa, inodiwa pachiyero).

Mushure meizvozvo, takatanga kufunga zvakare - isu tiri kutarisa nemazvo here? Tiri kumhanya kuvaka pane zvikumbiro zvekudhonza nemazvo?

Takatanga kuvaka pane yekupedzisira kuzvipira kwebazi kwakabva chikumbiro chekudhonza chakavhurwa. Asi bvunzo dzekuita uku dzinongoratidza chete kuti kodhi yakanyorwa nemugadziri inoshanda. Asi hazviratidzi kuti hapana chaatyora. Muchokwadi, iwe unofanirwa kutarisa mamiriro ebazi rekuvandudza mushure mekunge chimiro chabatanidzwa mairi.

Evolution yeCI muchikwata chekusimudzira nhare

Kuti tiite izvi, takanyora nyore bash script premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Pano shanduko dzese dzichangoburwa kubva kubudiriro dzinongodhonzwa nekubatanidzwa mubazi razvino. Isu takawedzera iyo premerge.sh script sedanho rekutanga mune zvese zvinovaka uye takatanga kutarisa chaizvo zvatinoda, ndiko. kubatanidzwa.

Zvakatora mazuva matatu kugadzirisa dambudziko, kutsvaga mhinduro, uye kunyora script iyi.

Chishandiso chakagadziridzwa, mabasa mazhinji akaonekwa, timu yakakura, uye premerge.sh dzimwe nguva yakatanga kutiregedza. Kugadzira kwaive nekuchinja kunopokana kwakaputsa chivakwa.

Muenzaniso wekuti izvi zvinoitika sei:

Evolution yeCI muchikwata chekusimudzira nhare

Vagadziri vaviri panguva imwe chete vanotanga kushanda pazvinhu A uye B. Mugadziri wechikamu A anowana chinhu chisina kushandiswa mupurojekiti. answer() uye, semukomana akanaka scout, anoibvisa. Panguva imwecheteyo, mugadziri wechinhu B anowedzera runhare rutsva kune iri basa mubazi rake.

Vagadziri vanopedza basa ravo uye vovhura chikumbiro chekudhonza panguva imwe chete. Iwo anovaka anotangwa, premerge.sh inotarisa zvese zviri zviviri kudhonza zvikumbiro zvine chekuita neazvino kusimudzira mamiriro - ese macheki akasvibira. Mushure meizvozvo, chikumbiro chekudhonza chechimiro A chinosanganiswa, chikumbiro chekudhonza chechimiro B chinosanganiswa... Boom! Gadzira mabreak nekuti kodhi yekuvandudza ine kufona kune isiripo basa.

Evolution yeCI muchikwata chekusimudzira nhare

Kana isiri kuzokura, ndizvo njodzi yomunzvimbomo. Chikwata chese hachikwanisi kuunganidza chero chinhu vochiendesa kunoongororwa.

Zvakaitika kuti ini ndaiwanzoshanda pamabasa ezvivakwa: analytics, network, database. Ndiko kuti, ndini ndakanyora mabasa iwayo uye makirasi anoshandiswa nevamwe vanogadzira. Nekuda kweizvi, ndakazviwana ndiri mumamiriro ezvinhu akafanana kakawanda. Ndakatombotora mufananidzo uyu kwenguva yakati rebei.

Evolution yeCI muchikwata chekusimudzira nhare

Sezvo izvi zvisina kuenderana nesu, takatanga kutsvaga sarudzo dzekudzivirira izvi.

Nzira yekusaputsika sei

Chokutanga: kuvakazve zvese zvikumbiro zvekudhonza kana uchigadziridza uchikura. Kana, mumuenzaniso wedu, chikumbiro chekudhonza chine chimiro A chiri chekutanga kuverengerwa mukuvandudza, chikumbiro chekudhonza chechimiro B chichavakwa patsva, uye, saizvozvo, cheki ichakundikana nekuda kwekukanganisa kwekuunganidza.

Kuti unzwisise kuti izvi zvichatora nguva yakareba sei, funga muenzaniso une maPR maviri. Isu tinovhura maPR maviri: maviri anovaka, maviri anomhanya echeki. Mushure mekunge yekutanga PR yabatanidzwa mukuvandudza, yechipiri inoda kuvakwa patsva. Pakazara, maviri PRs anoda matatu kumhanya kwecheki: 2 + 1 = 3.

In musimboti, zvakanaka. Asi isu takatarisa nhamba, uye mamiriro akajairika muchikwata chedu aive gumi akavhurika PRs, uyezve nhamba yecheki ndiyo nhamba yekuenderera mberi: 10 + 10 +... + 9 = 1. Kureva, kugamuchira gumi. PRs, iwe unofanirwa kuvaka patsva makumi mashanu neshanu. Uye izvi zviri mumamiriro akanaka, kana cheki dzese dzichipfuura kekutanga, kana pasina munhu anovhura imwe yekudhonza chikumbiro apo aya gumi nemaviri ari kugadziriswa.

Fungidzira iwe semugadziri anofanirwa kuve wekutanga kudzvanya bhatani re "kubatanidza", nekuti kana muvakidzani akaita izvi, ipapo iwe uchafanirwa kumirira kusvikira zvese zvinovaka zvichipfuura zvakare ... Kwete, izvo hazvishande. , zvichanyatso kudzikisa budiriro.

Nzira yechipiri inogoneka: unganidza zvikumbiro zvekudhonza mushure mekuongorora kodhi. Ndokunge, iwe unovhura chikumbiro chekudhonza, tora iyo inodiwa nhamba yemvumo kubva kune vaunoshanda navo, gadzirisa izvo zvinodiwa, uye wobva watanga kuvaka. Kana vakabudirira, chikumbiro chekudhonza chinobatanidzwa mukuvandudza. Muchiitiko ichi, hapana mamwe ekutangazve, asi mhinduro inodzikiswa zvakanyanya. Semugadziri, pandinovhura chikumbiro chekudhonza, ini ndinobva ndada kuona kana ichizoshanda. Semuenzaniso, kana bvunzo ikakundikana, unofanirwa kukurumidza kuigadzirisa. Panyaya yekuvaka kunonoka, mhinduro inononoka, uye naizvozvo kukura kwese. Izvi zvaisatikodzerawo.

Nekuda kweizvozvo, sarudzo yechitatu chete yakasara - bhasikoro. Yese kodhi yedu, zvese zvinyorwa zvedu zvakachengetwa mune repository pane Bitbucket server. Saizvozvo, taifanira kugadzira plugin yeBitbucket.

Evolution yeCI muchikwata chekusimudzira nhare

Iyi plugin inodarika iyo yekudhonza chikumbiro chekubatanidza michina. Kutanga kwakajairika: iyo PR inovhura, magungano ese anotangwa, ongororo yekodhi inopedzwa. Asi mushure mekuongorora kwekodhi kwapera uye mugadziri afunga kudzvanya pa "kubatanidza", iyo plugin inotarisa iyo inosimudzira iyo macheki akaitwa. Kana budiriro yakagadziridzwa mushure mekuvaka, iyo plugin haitenderi chikumbiro chakadaro chekudhonza kuti chibatanidzwe mubazi guru. Iyo inongotangazve zvivakwa zvechizvino kugadzirwa.

Evolution yeCI muchikwata chekusimudzira nhare

Mumuenzaniso wedu nekuchinja kunopokana, zvivakwa zvakadaro zvinotadza nekuda kwekukanganisa kwekuunganidza. Saizvozvo, mugadziri wechikamu B achafanirwa kugadzirisa kodhi, kutangazve macheki, ipapo plugin inozoisa otomatiki chikumbiro chekudhonza.

Tisati tashandisa iyi plugin, isu takaverengera 2,7 ongororo inomhanya pane yekudhonza chikumbiro. Ne plugin pakanga paine 3,6 kutangwa. Izvi zvakatikodzera.

Zvakakosha kucherechedza kuti iyi plugin ine drawback: inongotangazve kuvaka kamwe chete. Ndiko kuti, kuchine hwindo diki kuburikidza naro shanduko dzinopesana dzinogona kupinda mukukudziridza. Asi mukana weizvi wakaderera, uye isu takaita kutengeserana uku pakati pehuwandu hwekutanga uye mukana wekukundikana. Mumakore maviri yakangopfura kamwe chete, saka pamwe yaisava pasina.

Zvakatitorera mavhiki maviri kuti tinyore vhezheni yekutanga yeBitbucket plugin.

Macheki matsva

Zvichakadaro, timu yedu yakaramba ichikura. Macheki matsva awedzerwa.

Takafunga: sei kuita zvikanganiso kana zvichigona kudzivirirwa? Uye ndosaka vakashandisa static code analysis. Takatanga ne lint, iyo inosanganisirwa mu Android SDK. Asi panguva iyoyo akanga asingazivi nzira yekushanda neKotlin code zvachose, uye isu tatova ne75% yechikumbiro chakanyorwa muKotlin. Naizvozvo, akavakirwa-mukati akawedzerwa kune lint Android Studio inotarisa.

Kuti tiite izvi, taifanira kuita kwakawanda kutsveyamisa: tora Android Studio, rongedza muDocker uye uimhanye paCI ine chaiyo yekutarisa, kuti ifunge kuti iri kushanda palaptop chaiyo. Asi zvakashanda.

Panguva iyi ndipo patakatanga kunyora zvakawanda instrumentation miedzo uye yakaitwa screenshot test. Apa ndipo apo referensi screenshot inogadzirwa kune yakaparadzana diki maonero, uye bvunzo inosanganisira kutora skrini kubva pakuona uye kuienzanisa neyakajairwa yakananga pixel nepixel. Kana pane kupesana, zvinoreva kuti marongerwo akanganisa pane imwe nzvimbo kana chimwe chinhu chisina kumira zvakanaka mumataera.

Asi bvunzo dzezviridzwa uye screenshot bvunzo dzinofanirwa kuitiswa pamidziyo: pama emulators kana pamidziyo chaiyo. Tichifunga kuti kune bvunzo dzakawanda uye dzinoitwa nguva nenguva, purazi rose rinodiwa. Kutanga purazi rako pachako kwakanyanya kushanda nesimba, saka takawana yakagadzirira-yakagadzirwa sarudzo - Firebase Test Lab.

Firebase Test Lab

Yakasarudzwa nekuti Firebase chigadzirwa cheGoogle, zvichireva kuti chinofanira kuvimbika uye chisingambofa chakafa. Mitengo yacho inonzwisisika: $5 paawa yekushanda kwechigadzirwa chaicho, 1 $ paawa yekushanda kweemulator.

Zvakatora angangoita mavhiki matatu kuita Firebase Test Lab muCI yedu.

Asi timu yakaramba ichikura, uye Firebase, zvinosuruvarisa, yakatanga kutideredza. Panguva iyoyo, akanga asina chero SLA. Dzimwe nguva Firebase yakaita kuti timirire kusvika nhamba yaidiwa yemidziyo yave yemahara yebvunzo, uye haina kutanga kuiuraya nekukasira, sezvataida. Kumira mumutsetse kwakatora kusvika hafu yeawa, inova nguva refu kwazvo. Miedzo yezviridzwa yakaitwa paPR yega yega, kunonoka kwakanyatso kudzika budiriro, uyezve bhiri repamwedzi rakauya nemari yakatenderera. Kazhinji, zvakasarudzwa kusiya Firebase uye kushanda mumba, sezvo timu yakura zvakakwana.

Docker + Python + bash

Isu takatora Docker, takaisa emulators mairi, takanyora chirongwa chakareruka muPython, iyo panguva chaiyo inounza iyo inodiwa nhamba yeemulators mushanduro inodiwa uye inomisa kana zvichidikanwa. Uye, hongu, akati wandei bash script - taizovepi pasina iwo?

Zvakatora mavhiki mashanu kuti tigadzire nharaunda yedu yekuyedza.

Nekuda kweizvozvo, pachikumbiro chega chega chekudhonza pakanga paine yakakura yekubatanidza-yekuvhara runyorwa rwecheki:

  • ARK musangano;
  • Junit miedzo;
  • Lint;
  • Android Studio inotarisa;
  • Instrumentation miedzo;
  • Screenshot bvunzo.

Izvi zvakadzivirira kuputsika kwakawanda kunobvira. Nehunyanzvi zvese zvakashanda, asi vanogadzira vakanyunyuta kuti kumirira mhinduro kwaive kwakareba.

Yakareba sei? Isu takarodha data kubva kuBitbucket neTeamCity mune yekuongorora system uye takaona izvozvo avhareji yekumirira nguva 45 maminitsi. Ndokunge, mugadziri, kana achivhura chikumbiro chekudhonza, anomirira paavhareji 45 maminetsi emhedzisiro yekuvaka. Mukuona kwangu, izvi zvakawanda, uye haugone kushanda saizvozvo.

Zvechokwadi, takasarudza kukurumidzira zvose zvatinovaka.

Ngatikurumidze

Kuona izvo zvinovaka kazhinji zvinomira mumutsara, chinhu chekutanga chatinoita akatenga zvimwe hardware - budiriro yakakura ndiyo iri nyore. Zvivakwa zvakamira kumitsetse, asi nguva yekumirira yakadzikira zvishoma, nekuti mamwe macheki pachawo akatora nguva yakareba kwazvo.

Kubvisa cheki dzinotora nguva yakareba

Yedu Inoenderera Kubatanidzwa inogona kubata aya marudzi ezvikanganiso nematambudziko.

  • Kwete kuenda. CI inogona kubata chikanganiso chekubatanidza kana chimwe chinhu chisingavake nekuda kwekupokana kwekuchinja. Sezvandambotaura, saka hapana anogona kuunganidza chero chinhu, budiriro inomira, uye munhu wese anotya.
  • Bug in behavior. Semuyenzaniso, kana application ikavakwa, asi ichiputsika kana ukadzvanya bhatani, kana bhatani harina kudzvanywa zvachose. Izvi zvakaipa nekuti bug rakadaro rinogona kusvika kumushandisi.
  • Bug in marongerwo. Semuenzaniso, bhatani rinodzvanywa, asi rafambisa mapikisi gumi kuruboshwe.
  • Kuwedzera kwechikwereti chehunyanzvi.

Mushure mekutarisa rondedzero iyi, takaona kuti mapoinzi maviri ekutanga chete ndiwo akakosha. Tinoda kubata matambudziko akadai kutanga. Mabhugi mune dhizaini anowanikwa padanho rekuongorora-dhizaini uye anogona kugadziriswa nyore ipapo. Kuita nechikwereti chehunyanzvi kunoda nzira yakaparadzana uye kuronga, saka takasarudza kusazviyedza pachikumbiro chekudhonza.

Zvichienderana nechikamu ichi, takazunza rondedzero yese yemacheki. Akayambuka Lint uye yakamisikidza kutanga kwayo husiku: kuti ingoburitsa mushumo wekuti mangani matambudziko aive muprojekiti. Takabvumirana kushanda zvakasiyana nechikwereti chehunyanzvi, uye Android Studio cheki dzakasiiwa zvachose. Android Studio muDocker yekumhanyisa ongororo inonzwika inonakidza, asi inokonzeresa dambudziko rakawanda mukutsigira. Chero update kune Android Studio shanduro zvinoreva kunetsana asinganzwisise tsikidzi. Zvakanga zvakaomawo kutsigira screenshot bvunzo, nekuti raibhurari yakanga isina kugadzikana uye pakanga paine manyepo. Screenshot bvunzo dzabviswa kubva pane cheki list.

Nekuda kweizvozvo, takasiiwa ne:

  • ARK musangano;
  • Junit miedzo;
  • Miedzo yezviridzwa.

Gradle kure cache

Pasina macheki anorema, zvese zvakava nani. Asi hapana muganhu pakukwana!

Yedu application yanga yatopatsanurwa kuita angangoita 150 gradle modules. Gradle kure cache inowanzo shanda mushe mune iyi kesi, saka takafunga kuiedza.

Gradle kure cache ibasa rinogona cache kuvaka zvigadzirwa zvemunhu ega ega mamodule. Gradle, panzvimbo yekunyatso nyora kodhi, inoshandisa HTTP kugogodza pane iri kure cache uye kubvunza kana mumwe munhu atoita basa iri. Kana hongu, inongodhawunirodha mhedzisiro.

Kumhanya Gradle kure cache kuri nyore nekuti Gradle inopa Docker mufananidzo. Takakwanisa kuita izvi mumaawa matatu.

Zvese zvawaifanira kuita kuvhura Docker uye kunyora mutsara mumwe mupurojekiti. Asi kunyangwe ichigona kutangwa nekukurumidza, zvinotora nguva yakawanda kuti zvese zvishande nemazvo.

Pazasi pane cache inopotsa girafu.

Evolution yeCI muchikwata chekusimudzira nhare

Pakutanga, chikamu chekupotsa cache chaive chinenge 65. Mushure memavhiki matatu, takakwanisa kuwedzera kukosha uku kusvika ku20%. Zvakazoitika kuti mabasa anounganidzwa neAroid application ane zvisinganzwisisike zvinotenderera, nekuda kwekuti Gradle akapotsa cache.

Nekubatanidza cache, isu takamhanyisa zvakanyanya kuvaka. Asi pamusoro pekusangana, kune zvakare bvunzo dzezviridzwa, uye zvinotora nguva yakareba. Pamwe haisi yese bvunzo inoda kumhanyiswa kune yega yekudhonza chikumbiro. Kuti tizive, tinoshandisa maitiro ekuongorora.

Impact analysis

Pachikumbiro chekudhonza, tinounganidza git diff uye tinowana akagadziridzwa Gradle modules.

Evolution yeCI muchikwata chekusimudzira nhare

Zvine musoro kungomhanyisa bvunzo dzezviridzwa zvinotarisa akachinja mamodule uye ese mamodule anoenderana nawo. Iko hakuna chikonzero chekumhanyisa bvunzo dzevavakidzani mamodule: iyo kodhi ipapo haina kuchinja uye hapana chinogona kutyora.

Miedzo yezviridzwa haisi nyore, nekuti inofanirwa kunge iri mune yepamusoro-level Chikumbiro module. Isu takashandisa heuristics nebytecode ongororo kuti tinzwisise kuti bvunzo yega yega ndeyapi module.

Kuvandudza mashandiro ezviridzwa bvunzo kuitira kuti vangoyedza mamodule anobatanidzwa akatora anenge mavhiki masere.

Matanho ekumhanyisa kuongorora akashanda zvinobudirira. Kubva pamaminitsi 45 takakwira kusvika ku15. Zvatove zvakajairika kumirira kota yeawa yekuvaka.

Asi ikozvino vagadziri vatanga kugunun'una kuti havanzwisise kuti ndezvipi zvinovaka zviri kutangwa, kupi kuona irogi, nei kuvaka kuri kutsvuka, bvunzo yakakundikana, nezvimwe.

Evolution yeCI muchikwata chekusimudzira nhare

Matambudziko nemhinduro anononoka kusimudzira, saka takaedza kupa ruzivo rwakajeka uye rwakadzama nezve PR yega yega uye kuvaka sezvinobvira. Takatanga nemashoko muBitbucket kune PR, zvichiratidza kuti ndechipi chivakwa chakanga chakundikana uye nei, uye takanyora mameseji akanangwa muSlack. Mukupedzisira, isu takagadzira PR dashboard yepeji ine runyorwa rwezvese zvivakwa zviri kushanda parizvino uye chimiro chazvo: mutsara, kumhanya, kupunzika kana kupera. Iwe unogona kudzvanya pane kuvaka uye kusvika kune yayo log.

Evolution yeCI muchikwata chekusimudzira nhare

Vhiki nhanhatu dzakapedzwa pamhinduro dzakakwana.

Zvirongwa

Ngatienderere mberi kunhoroondo yazvino. Mushure mekunge tagadzirisa nyaya yemhinduro, takasvika padanho idzva - takafunga kuvaka purazi redu rekutevedzera. Kana paine akawanda bvunzo uye emulators, iwo akaoma kubata. Nekuda kweizvozvo, ese edu emulators akatamira kune k8s cluster ine inoshanduka sisitimu manejimendi.

Mukuwedzera, kune zvimwe zvirongwa.

  • Return Lint (uye imwe static analysis). Tiri kutoshanda takananga uku.
  • Mhanya zvese pane PR blocker bvunzo dzekupedzisira pane ese SDK shanduro.

Saka, takatsvaga nhoroondo yekuvandudzwa kweKuenderera mberi Kubatanidzwa muAvito. Iye zvino ndinoda kupa mamwe mazano kubva kune ane ruzivo maonero.

Mazano

Dai ndaigona kupa zano rimwe chete ringava iri:

Ndapota chenjerera nemagwaro e shell!

Bash chishandiso chinochinjika uye chine simba, chiri nyore uye nekukurumidza kunyora zvinyorwa. Asi iwe unogona kuwira mumusungo nazvo, uye, zvinosuruvarisa, isu takawira mairi.

Izvo zvese zvakatanga nemanyorero akareruka aimhanya pamashini edu ekuvaka:

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

Asi, sezvamunoziva, zvese zvinokura uye zvinova zvakanyanya kuomarara nekufamba kwenguva - ngatimhanyei imwe script kubva kune imwe, ngatipfuure mamwe maparamita ipapo - mukupedzisira taifanira kunyora basa rinotarisa kuti nderipi nhanho ye bash nesting isu tave takarongeka. kuisa zvinyorwa zvinodiwa, kuti zvitange zvese.

Evolution yeCI muchikwata chekusimudzira nhare

Iwe unogona kufungidzira mari yebasa yekugadzirwa kwezvinyorwa zvakadaro. Ndinokupa zano kuti usawira mumusungo uyu.

Chii chinogona kutsiviwa?

  • Chero mutauro wekunyora. Nyora ku Python kana Kotlin Script zviri nyore nekuti ndeyekuronga, kwete zvinyorwa.
  • Kana kuti tsanangura zvese zvekuvaka logic mufomu Custom gradle mabasa kune purojekiti yako.

Isu takasarudza kusarudza yechipiri sarudzo, uye ikozvino tiri kudzima zvese zvinyorwa zvebash uye kunyora akawanda etsika gradle mabasa.

Zano #2: Chengetedza zvivakwa mukodhi.

Izvo zviri nyore kana iyo Inoenderera Kubatanidza kuseta yakachengetwa kwete muUI interface yeJenkins kana TeamCity, nezvimwewo, asi muchimiro chemavara mafaera zvakananga mupurojekiti repository. Izvi zvinopa shanduro. Hazvizove zvakaoma kudzosera kumashure kana kuvaka kodhi pane rimwe bazi.

Zvinyorwa zvinogona kuchengetwa mupurojekiti. Chii chekuita nemhoteredzo?

Zano #3: Docker inogona kubatsira nenharaunda.

Izvo zvichabatsira Android Developers; iOS haisati yave neimwe, zvinosiririsa.

Uyu muenzaniso wefaira rakareruka docker rine jdk uye 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

Wanyora iyi Docker faira (ini ndichakuudza chakavanzika, haufanirwe kuinyora, asi ingoidhonza yakagadzirira-yakagadzirwa kubva kuGitHub) uye wakaunganidza mufananidzo, unowana chaiwo muchina waunogona kuvaka application. uye mhanyisa Junit bvunzo.

Zvikonzero zviviri zvikuru nei izvi zvine musoro ndeye scalability uye kudzokorora. Uchishandisa docker, unogona kukurumidza kusimudza gumi nevaviri kuvaka vamiririri vanozove nemamiriro akafanana neakapfuura. Izvi zvinoita kuti hupenyu hweCI mainjiniya huve nyore. Zviri nyore kusundira iyo android-sdk mudocker, asi nemaemulators zvakatonyanya kuoma: uchafanirwa kushanda zvishoma (kana kurodha yakapedzwa kubva kuGitHub zvakare).

Zano Nha. 4: usakanganwa kuti kuongorora hakuna kuitwa nekuda kwekuongorora, asi kune vanhu.

Kurumidza uye, zvinonyanya kukosha, mhinduro yakajeka yakakosha kune vanogadzira: chii chakaputsika, ndeipi bvunzo yakakundikana, pandinogona kuona iyo buildlog.

Zano #5: Iva pragmatic paunenge uchigadzira Kuenderera Kubatanidzwa.

Nyatsonzwisisa kuti ndedzipi mhando dzezvikanganiso zvaunoda kudzivirira, ingani zviwanikwa, nguva, uye komputa nguva yaunoda kushandisa. Cheki dzinotora nguva yakareba dzinogona, semuenzaniso, kumiswa kwehusiku humwe. Uye avo avo vanobata zvisiri izvo zvakakosha zvikanganiso zvinofanirwa kusiiwa zvachose.

Zano #6: Shandisa maturusi akagadzirira.

Kune makambani mazhinji zvino anopa gore CI.

Evolution yeCI muchikwata chekusimudzira nhare

Iyi imhinduro yakanaka yezvikwata zvidiki. Iwe haufanire kutsigira chero chinhu, ingobhadhara mari shoma, kuvaka yako application uye mhanyisa bvunzo dzezviridzwa.

Zano #7: Muchikwata chikuru, mhinduro dzemumba dzine pundutso.

Asi nekukurumidza kana kuti gare gare, sezvo boka rinokura, mukati-mumba mhinduro dzinova nepurofiti. Pane dambudziko rimwe chete nemasarudzo aya. Pane mutemo wekuderera kwekudzoka mune zvehupfumi: mune chero chirongwa, imwe neimwe inotevera kuvandudzwa kunowedzera kuoma uye kunoda kuwedzera uye kuwedzera mari.

Economics inotsanangura hupenyu hwedu hwese, kusanganisira Continuous Integration. Ini ndakavaka hurongwa hwemitengo yevashandi kune yega yega nhanho yekuvandudza yedu Inoenderera Kubatanidzwa.

Evolution yeCI muchikwata chekusimudzira nhare

Zviri pachena kuti chero kuvandudzika kuri kuramba kuchiwedzera kuoma. Uchitarisa iyi girafu, unogona kunzwisisa kuti Kuenderera Kubatanidzwa kunoda kuvandudzwa maererano nekukura kwehukuru hwechikwata. Kune boka revanhu vaviri, kupedza mazuva makumi mashanu kugadzira purazi remukati emulator ipfungwa yepakati. Asi panguva imwe chete, kune boka guru, kusaita Kuenderera Kubatanidza zvachose ipfungwa yakaipa, nokuti matambudziko ekubatanidza, kugadzirisa kutaurirana, nezvimwewo. zvichatora nguva yakawanda.

Takatanga nepfungwa yekuti automation inodiwa nekuti vanhu vanodhura, vanokanganisa uye vane nungo. Asi vanhu vanogadzirawo otomatiki. Naizvozvo, matambudziko ese akafanana anoshanda kune otomatiki.

  • Automation inodhura. Rangarira rudungwe rwebasa.
  • Kana zvasvika kune otomatiki, vanhu vanokanganisa.
  • Dzimwe nguva zvine usimbe kuita otomatiki, nekuti zvese zvinoshanda saizvozvo. Nei uchinatsiridza chero chimwe chinhu, nei zvese izvi Kuenderera Kubatanidzwa?

Asi ndine nhamba: zvikanganiso zvinobatwa mu20% yemagungano. Uye izvi hazvisi nekuti vagadziri vedu vanonyora kodhi zvisina kunaka. Izvi zvinodaro nekuti vanogadzira vane chivimbo chekuti kana vakakanganisa, haizopedzisire pakuvandudza, inobatwa nemacheki otomatiki. Saizvozvo, vanogadzira vanogona kupedza nguva yakawanda vachinyora kodhi uye zvinhu zvinonakidza, pane kumhanya uye kuyedza chimwe chinhu munharaunda.

Dzidzira Kuenderera Kubatanidza. Asi zvine mwero.

Nenzira, Nikolai Nesterov haasi kungopa mishumo yakakura pachake, asiwo inhengo yekomiti yepurogiramu AppsConf uye inobatsira vamwe kukugadzirirai hurukuro dzine musoro. Kukwana uye kubatsira kwechirongwa chemusangano chinotevera chinogona kuongororwa nemisoro mu schedule. Uye kune ruzivo, huya kuInfospace muna Kubvumbi 22-23.

Source: www.habr.com

Voeg