Éabhlóid CI san fhoireann forbartha soghluaiste

Sa lá atá inniu ann, déantar an chuid is mó de na táirgí bogearraí a fhorbairt i bhfoirne. Is féidir na coinníollacha maidir le forbairt foirne rathúil a léiriú i bhfoirm léaráide simplí.

Éabhlóid CI san fhoireann forbartha soghluaiste

Nuair a bheidh do chód scríofa agat, ní mór duit deimhin a dhéanamh de:

  1. Работает.
  2. Ní bhriseann sé tada, an cód a scríobh do chomhghleacaithe san áireamh.

Má chomhlíontar an dá choinníoll, ansin tá tú ar an mbealach chun rath. Chun na coinníollacha seo a sheiceáil go héasca agus gan imeacht ón gcosán brabúsach, tháinig muid suas le Comhtháthú Leanúnach.

Is sreabhadh oibre é CI ina ndéanann tú do chód a chomhtháthú isteach sa chód táirge iomlán chomh minic agus is féidir. Agus ní hamháin go gcomhtháthaíonn tú, ach freisin seiceann tú i gcónaí go bhfuil gach rud ag obair. Ós rud é go gcaithfidh tú a sheiceáil go minic agus go minic, is fiú smaoineamh ar uathoibriú. Is féidir leat gach rud a sheiceáil de láimh, ach níor cheart duit, agus seo an fáth.

  • Daoine a chara. Tá uair an chloig oibre aon ríomhchláraitheoir níos daoire ná uair an chloig d'obair aon fhreastalaí.
  • Déanann daoine botúin. Mar sin, d’fhéadfadh cásanna teacht chun cinn nuair a reáchtáladh tástálacha ar an mbrainse mícheart nó nuair a cuireadh an gealltanas mícheart le chéile do thástálaithe.
  • Tá daoine leisciúil. Ó am go chéile, nuair a chríochnaím tasc, tagann an smaoineamh chun cinn: “Cad atá le seiceáil? Scríobh mé dhá líne - oibríonn gach rud! Sílim go mbíonn a leithéid de smaointe ag cuid agaibh uaireanta freisin. Ach ba cheart duit seiceáil i gcónaí.

Mar a cuireadh Comhtháthú Leanúnach i bhfeidhm agus a forbraíodh i bhfoireann forbartha soghluaiste Avito, conas a chuaigh siad ó 0 go 450 tógáil in aghaidh an lae, agus a chruinníonn meaisíní tógála 200 uair sa lá, a deir Nikolai Nesterov (nnesterov) ina rannpháirtí i ngach athrú éabhlóideach ar an bhfeidhmchlár CI/CD Android.

Tá an scéal bunaithe ar shampla ordú Android, ach tá an chuid is mó de na cineálacha cur chuige infheidhme ar iOS freisin.


Uair amháin, d'oibrigh duine amháin san fhoireann Avito Android. De réir sainmhínithe, ní raibh aon rud ag teastáil uaidh ó Chomhtháthú Leanúnach: ní raibh aon duine ann le comhtháthú leis.

Ach d'fhás an t-iarratas, bhí níos mó agus níos mó tascanna nua le feiceáil, agus d'fhás an fhoireann dá réir sin. Ag pointe éigin, tá sé in am próiseas comhtháthaithe cód a bhunú ar bhealach níos foirmeálta. Socraíodh sreabhadh Git a úsáid.

Éabhlóid CI san fhoireann forbartha soghluaiste

Tá coincheap sreabhadh Git ar eolas go maith: tá brainse forbartha coitianta amháin ag tionscadal, agus le haghaidh gach gné nua, gearrann na forbróirí brainse ar leith, gealltanas a thabhairt dó, a bhrú, agus nuair is mian leo a gcód a chumasc isteach sa bhrainse a fhorbairt, a oscailt. iarraidh tarraingt. Chun eolas a roinnt agus cuir chuige a phlé, thugamar isteach athbhreithniú cód, is é sin, ní mór do chomhghleacaithe cód a chéile a sheiceáil agus a dhearbhú.

Seiceálacha

Is iontach an rud é cód a fheiceáil le do shúile, ach ní leor é. Mar sin, tá seiceálacha uathoibríocha á dtabhairt isteach.

  • Gcéad dul síos, déanaimid seiceáil Tionól ARK.
  • A lán Tástálacha Junit.
  • Breithnímid clúdach cód, ós rud é go bhfuil tástálacha á reáchtáil againn.

Chun tuiscint a fháil ar conas ba cheart na seiceálacha seo a reáchtáil, déanaimis féachaint ar an bpróiseas forbartha in Avito.

Is féidir é a léiriú go scéimreach mar seo:

  • Scríobhann forbróir cód ar a ríomhaire glúine. Is féidir leat seiceálacha comhtháthaithe a reáchtáil ar dheis anseo - bíodh sé le duán tiomanta, nó go simplí seiceálacha a reáchtáil sa chúlra.
  • Tar éis don fhorbróir an cód a bhrú, osclaíonn sé iarratas tarraingt. Chun a chód a chur san áireamh sa bhrainse forbartha, is gá dul trí athbhreithniú cód agus an líon riachtanach deimhnithe a bhailiú. Is féidir leat seiceálacha agus tógáil a chumasú anseo: go dtí go n-éireoidh le gach tógáil, ní féidir an t-iarratas tarraingt a chumasc.
  • Tar éis an t-iarratas tarraingt a chumasc agus an cód a chur san áireamh i bhforbairt, is féidir leat am áisiúil a roghnú: mar shampla, san oíche, nuair a bhíonn na freastalaithe go léir saor in aisce, agus an oiread seiceálacha is mian leat a reáchtáil.

Níor thaitin le duine ar bith scanadh a reáchtáil ar a ríomhaire glúine. Nuair a bhíonn gné críochnaithe ag forbróir, tá sé ag iarraidh é a bhrú go tapa agus iarratas tarraingt a oscailt. Más rud é ag an nóiméad seo seoltar roinnt seiceálacha fada, ní hamháin go bhfuil sé seo an-taitneamhach, ach cuireann sé moill ar fhorbairt freisin: cé go bhfuil an ríomhaire glúine ag seiceáil rud éigin, ní féidir oibriú air de ghnáth.

Thaitin sé go mór linn seiceálacha a reáchtáil ar an oíche, toisc go bhfuil go leor ama agus freastalaithe ann, is féidir leat fánaíocht a dhéanamh timpeall. Ach, ar an drochuair, nuair a thagann an cód gné chun cinn, tá i bhfad níos lú spreagadh ag an bhforbróir na hearráidí a d'aimsigh CI a shocrú. Ghlac mé mé féin ag smaoineamh go tréimhsiúil nuair a d'fhéach mé ar na hearráidí go léir a fuarthas i dtuarascáil na maidine a d'fhéadfainn iad a shocrú lá éigin ina dhiaidh sin, mar anois tá tasc fionnuar nua i Jira nach dteastaíonn uaim ach tosú ag déanamh.

Má chuireann seiceálacha bac ar iarratas tarraingt, tá go leor spreagadh ann, mar go dtí go n-iompaíonn na foirgnimh glas, ní rachaidh an cód i bhfeidhm, rud a chiallaíonn nach mbeidh an tasc críochnaithe.

Mar thoradh air sin, roghnaigh muid an straitéis seo a leanas: reáchtáilimid an t-uasmhéid seiceálacha is féidir ar an oíche, agus seolann muid an ceann is tábhachtaí díobh agus, is tábhachtaí, na cinn is tapúla ar iarratas tarraingt. Ach ní stopaimid ansin - ag an am céanna, bainimid an leas is fearr as luas na seiceálacha chun iad a aistriú ó mhodh oíche chun seiceálacha iarratais a tharraingt.

Ag an am sin, críochnaíodh ár dtógálacha go léir go tapa go leor, agus mar sin níor áiríomar ach tógáil ARK, tástálacha Junit agus ríomhanna clúdaigh cód mar bhac don iarratas tarraingt. Chuireamar ar siúl é, smaoiníomar air, agus thréigeamar clúdach cód mar cheapamar nach raibh sé ag teastáil uainn.

Thóg sé dhá lá orainn an CI bunúsach a chur ar bun go hiomlán (dá ngairfear meastachán ama anseo feasta, is gá don scála).

Ina dhiaidh sin, thosaigh muid ag smaoineamh níos faide - an bhfuil muid ag seiceáil i gceart fiú? An bhfuil iarratais tógála á reáchtáil againn i gceart?

Chuireamar tús leis an tógáil ar ghealltanas deireanach an bhrainse ónar osclaíodh an t-iarratas tarraingt. Ach ní féidir le tástálacha den ghealltanas seo ach a thaispeáint go n-oibríonn an cód a scríobh an forbróir. Ach ní chruthaíonn siad nár bhris sé faic. Go deimhin, ní mór duit staid an bhrainse forbartha a sheiceáil tar éis gné a chumasc isteach ann.

Éabhlóid CI san fhoireann forbartha soghluaiste

Chun seo a dhéanamh, scríobhamar script bash simplí premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Anseo déantar na hathruithe is déanaí go léir ó fhorbairt a tharraingt suas agus a chumasc leis an mbrainse reatha. Chuireamar an script premerge.sh leis mar an chéad chéim i ngach tógáil agus thosaigh muid ag seiceáil go díreach cad ba mhaith linn, is é sin comhtháthú.

Thóg sé trí lá chun an fhadhb a logánú, teacht ar réiteach, agus an script seo a scríobh.

D'fhorbair an t-iarratas, bhí tascanna níos mó agus níos mó le feiceáil, d'fhás an fhoireann, agus uaireanta thosaigh premerge.sh ag ligean dúinn síos. Athruithe coinbhleachta threáitear forbairt agus bhris an tógáil.

Sampla de conas a tharlaíonn sé seo:

Éabhlóid CI san fhoireann forbartha soghluaiste

Tosaíonn beirt fhorbróirí ag obair ag an am céanna ar ghnéithe A agus B. Faigheann forbróir ghné A amach gné nár úsáideadh sa tionscadal answer() agus, ar nós scout maith buachaill, baintear é. Ag an am céanna, cuireann forbróir ghné B glaoch nua leis an bhfeidhm seo ina bhrainse.

Críochnaíonn forbróirí a gcuid oibre agus osclaíonn siad iarratas tarraingt ag an am céanna. Seoltar na foirgnimh, seiceálann premerge.sh an dá iarratas tarraingt maidir leis an stát forbartha is déanaí - tá gach seiceáil glas. Ina dhiaidh sin, déantar an t-iarratas tarraingt ar ghné A a chumasc, déantar an t-iarratas tarraingt ar ghné B a chumasc... Boom! Forbair sosanna toisc go bhfuil glao ar fheidhm nach bhfuil ann sa chód forbartha.

Éabhlóid CI san fhoireann forbartha soghluaiste

Nuair nach bhfuil sé ag dul a fhorbairt, tá sé tubaiste áitiúil. Ní féidir leis an bhfoireann iomlán aon rud a bhailiú agus é a chur isteach le haghaidh tástála.

Так получилось, что я чаще всего занимался инфраструктурными задачами: аналитика, сеть, базы данных. То есть именно я писал те функции и классы, которые используют другие разработчики. Из-за этого я очень часто попадал в подобные ситуации. У меня даже одно время висела такая картинка.

Éabhlóid CI san fhoireann forbartha soghluaiste

Ós rud é nach raibh sé seo oiriúnach dúinn, thosaigh muid ag iniúchadh roghanna maidir le conas é seo a chosc.

Conas gan briseadh a fhorbairt

An chéad rogha: gach iarratas tarraingt a atógáil nuair a nuashonraítear forbairt. Más rud é, inár sampla, gurb é an t-iarratas tarraingt le gné A an chéad cheann a bheidh le cur san áireamh i bhforbairt, déanfar an t-iarratas tarraingt ar ghné B a atógáil, agus, dá réir sin, teipfidh na seiceálacha mar gheall ar earráid tiomsaithe.

Chun a thuiscint cé chomh fada a thógfaidh sé seo, smaoinigh ar shampla le dhá PR. Osclaímid dhá PR: dhá thógáil, dhá shraith de sheiceálacha. Tar éis an chéad PR a chumasc le forbairt, is gá an dara ceann a atógáil. San iomlán, tá trí sheiceálacha de dhíth ar dhá PR: 2 + 1 = 3.

I bprionsabal, tá sé breá. Ach d'fhéachamar ar na staitisticí, agus ba é an staid tipiciúil inár bhfoireann ná 10 PR oscailte, agus ansin is é líon na seiceálacha suim an dul chun cinn: 10 + 9 +... + 1 = 55. Is é sin, glacadh le 10 PR, ní mór duit a atógáil 55 uair. Agus tá sé seo i staid idéalach, nuair a théann gach seiceáil an chéad uair, nuair nach n-osclaíonn aon duine iarratas tarraingt breise agus na dosaen sin á bpróiseáil.

Samhlaigh tú féin mar fhorbróir a chaithfidh a bheith ar an gcéad duine a chliceáil ar an gcnaipe “cumaisc”, mar má dhéanann comharsa é seo, beidh ort fanacht go dtí go rachaidh na foirgnimh go léir tríd arís... Ní bheidh, ní éireoidh leis sin. , cuirfidh sé moill mhór ar fhorbairt.

An dara bealach féideartha: iarratais tarraingt a bhailiú tar éis athbhreithniú an chóid. Is é sin, osclaíonn tú iarratas tarraingt, bailíonn tú an líon riachtanach formheasanna ó chomhghleacaithe, ceartaigh an méid is gá, agus ansin seolann tú na tógálacha. Má éiríonn leo, déantar an t-iarratas tarraingt a chumasc le forbairt. Sa chás seo, níl aon atosú breise, ach tá an t-aiseolas moilliú go mór. Mar fhorbróir, nuair a osclaíonn mé iarratas tarraingt, ba mhaith liom a fheiceáil láithreach an bhfuil sé chun oibriú. Mar shampla, má theipeann ar thástáil, ní mór duit é a shocrú go tapa. I gcás tógáil moillithe, mhoillíonn aiseolas, agus mar sin an fhorbairt iomlán. Ní raibh sé seo oiriúnach dúinn ach an oiread.

Mar thoradh air sin, níor fhan ach an tríú rogha - rothar. Stóráiltear ár gcód go léir, ár bhfoinsí go léir i stór ar fhreastalaí Bitbucket. Dá réir sin, bhí orainn breiseán a fhorbairt do Bitbucket.

Éabhlóid CI san fhoireann forbartha soghluaiste

Этот плагин переопределяет механизм слияния pull request’ов. Начало стандартное: открывается PR, запускаются все сборки, проходит code review. Но после того, как code review пройден, и разработчик решает нажать на «merge», плагин проверяет, относительно какого состояния develop запускались проверки. Если после билдов develop успел обновиться, плагин не позволит влить такой pull request в основную ветку. Он просто перезапустит билды относительно свежего develop.

Éabhlóid CI san fhoireann forbartha soghluaiste

Inár sampla le hathruithe contrártha, teipfidh ar thógáil den sórt sin mar gheall ar earráid tiomsaithe. Dá réir sin, beidh ar fhorbróir ghné B an cód a cheartú, na seiceálacha a atosú, ansin cuirfidh an breiseán an t-iarratas tarraingt i bhfeidhm go huathoibríoch.

Sular cuireadh an breiseán seo i bhfeidhm, rinneamar 2,7 rith athbhreithnithe ar an meán in aghaidh an iarratais tarraingthe. Leis an mbreiseán bhí 3,6 seoladh. Oireann sé seo dúinn.

Is fiú a thabhairt faoi deara go bhfuil míbhuntáiste ag an mbreiseán seo: ní atosóidh sé ach an tógáil uair amháin. Is é sin le rá, tá fuinneog bheag ann fós trínar féidir athruithe contrártha a fhorbairt. Ach tá an dóchúlacht go dtarlódh sé seo íseal, agus rinneamar an comhbhabhtáil seo idir líon na dtosaithe agus an dóchúlacht go dteipfeadh orthu. I gceann dhá bhliain níor scaoil sé ach uair amháin, mar sin is dócha nach raibh sé in vain.

Thóg sé dhá sheachtain orainn an chéad leagan den bhreiseán Bitbucket a scríobh.

Seiceálacha nua

Idir an dá linn, lean ár bhfoireann ag fás. Tá seiceálacha nua curtha leis.

Shíl muid: cén fáth botúin a dhéanamh más féidir iad a chosc? Agus sin an fáth a chuir siad i bhfeidhm anailís cód statach. Thosaigh muid le lint, atá san áireamh sa SDK Android. Ach ag an am sin ní raibh a fhios aige conas oibriú le cód Kotlin ar chor ar bith, agus bhí 75% den iarratas scríofa againn cheana féin i Kotlin. Dá bhrí sin, cuireadh cinn ionsuite le lint Android Stiúideo seiceálacha.

Chun seo a dhéanamh, bhí orainn go leor perverting a dhéanamh: ghlacadh Android Studio, pacáiste i Docker é agus é a rith ar CI le monatóir fíorúil, ionas go gceapann sé go bhfuil sé ag rith ar ríomhaire glúine fíor. Ach d'oibrigh sé.

Ba i rith an ama seo freisin a thosaigh muid ag scríobh go leor tástálacha ionstraimíochta agus curtha i bhfeidhm скриншотное тестирование. Seo é nuair a ghintear seat tagartha le haghaidh radharc beag ar leith, agus is éard atá sa tástáil ná screenshot a thógáil ón radharc agus é a chur i gcomparáid leis an gcaighdeán díreach picteilín de réir picteilín. Má tá neamhréireacht ann, ciallaíonn sé go bhfuil an leagan amach imithe mícheart áit éigin nó go bhfuil rud éigin mícheart sna stíleanna.

Ach ní mór tástálacha ionstraimíochta agus tástálacha scáileáin a rith ar fheistí: ar aithriseoirí nó ar fhíorfheistí. Ag cur san áireamh go bhfuil go leor tástálacha ann agus go ndéantar iad a reáchtáil go minic, tá gá le feirm iomlán. Is ró-dhian ar shaothar é do fheirm féin a thosú, agus mar sin fuaireamar rogha réidh - Firebase Test Lab.

Saotharlann tástála firebase

Roghnaíodh é toisc gur táirge Google é Firebase, rud a chiallaíonn gur chóir go mbeadh sé iontaofa agus nach dócha go bhfaighidh sé bás. Tá na praghsanna réasúnta: $5 in aghaidh na huaire d'oibriú feiste fíor, 1 $ in aghaidh na huaire d'oibriú aithriseoir.

На внедрение Firebase Test Lab в наш CI ушло примерно три недели.

Ach lean an fhoireann ag fás, agus Firebase, ar an drochuair, thosaigh a ligean síos dúinn. Ag an am sin, ní raibh aon SLA aige. Uaireanta thug Firebase orainn fanacht go dtí go raibh an líon riachtanach feistí saor in aisce le haghaidh tástálacha, agus níor thosaigh sé ag déanamh iad láithreach, mar a theastaigh uainn. Thóg sé suas le leath uair an chloig fanacht i líne, tréimhse an-fhada é sin. Reáchtáladh tástálacha ionstraimíochta ar gach PR, mhoilligh moilleanna an fhorbairt i ndáiríre, agus ansin tháinig an bille míosúil le suim bhabhta. Go ginearálta, socraíodh Firebase a thréigean agus obair intí a dhéanamh, ós rud é go raibh an fhoireann tar éis fás go leor.

Docker + Python + bash

Thógamar Docker, aithriseoirí líonta isteach ann, scríobh clár simplí i Python, a thosaíonn ag an am ceart an líon riachtanach aithriseoir sa leagan ceart agus a stopann iad nuair is gá. Agus, ar ndóigh, cúpla script bash - cá mbeimis gan iad?

Thóg sé cúig seachtaine chun ár dtimpeallacht tástála féin a chruthú.

Mar thoradh air sin, bhí liosta cuimsitheach seiceálacha chun bac a chur le cumasc i gcás gach iarratais tarraingthe:

  • tionól ARK;
  • tástálacha Junit;
  • Lint;
  • Android Studio checks;
  • Tástálacha ionstraimíochta;
  • Tástálacha scáileáin.

Chuir sé seo cosc ​​ar go leor cliseadh féideartha. Go teicniúil d'oibrigh gach rud, ach rinne na forbróirí gearán go raibh an fanacht le haghaidh torthaí ró-fhada.

Cé chomh fada is rófhada? D’uaslódáileamar sonraí ó Bitbucket agus TeamCity isteach sa chóras anailíse agus thuigeamar é sin meán-am feithimh 45 nóiméad. Is é sin, go bhfanann forbróir, agus iarratas tarraingt á oscailt aige, 45 nóiméad ar an meán le haghaidh na dtorthaí tógála. Is é mo thuairim go bhfuil sé seo go leor, agus ní féidir leat oibriú mar sin.

Ar ndóigh, shocraigh muid ár gcuid tógála go léir a bhrostú.

Déanaimis dlús a chur leis

Is é an chéad rud a dhéanaimid a fheiceáil go seasann foirgnimh go minic i scuaine cheannaigh crua-earraí níos mó — forbairt fhairsing an ceann is simplí. Tógann stop scuaine, ach an t-am feithimh laghdú ach beagán, mar gheall ar roinnt seiceálacha thóg iad féin ar feadh tréimhse an-fhada.

Seiceálacha a thógann ró-fhada a bhaint

D’fhéadfadh ár gComhtháthú Leanúnach teacht ar na cineálacha earráidí agus fadhbanna seo.

  • Gan dul go dtí. Is féidir le CI earráid tiomsaithe a aimsiú nuair nach dtógann rud éigin mar gheall ar athruithe contrártha. Mar a dúirt mé cheana, ansin ní féidir le duine ar bith rud ar bith a chur le chéile, stopann an fhorbairt, agus éiríonn gach duine neirbhíseach.
  • Bug san iompar. Mar shampla, nuair a bhíonn an t-iarratas tógtha, ach tuairteanna nuair a bhrúlann tú cnaipe, nó nach bhfuil an cnaipe brúite ar chor ar bith. Tá sé seo go dona mar is féidir le fabht den sórt sin an t-úsáideoir a bhaint amach.
  • Bug sa leagan amach. Например, кнопка нажимается, но съехала на 10 пикселей влево.
  • Méadú ar fhiach teicniúil.

Tar éis dúinn breathnú ar an liosta seo, thuig muid nach bhfuil ach an chéad dá phointe ríthábhachtach. Ba mhaith linn fadhbanna den sórt sin a fháil ar dtús. Faightear fabhtanna sa leagan amach ag an gcéim athbhreithnithe dearaidh agus is féidir iad a cheartú go héasca ansin. Teastaíonn próiseas agus pleanáil ar leith chun déileáil le fiachas teicniúil, mar sin shocraigh muid gan é a thástáil ar iarratas tarraingthe.

Bunaithe ar an aicmiú seo, chroith muid suas an liosta iomlán seiceálacha. Thrasnaigh sé amach Lint agus chuir sé a sheoladh ar athló thar oíche: díreach ionas go ndéanfadh sé tuarascáil ar cé mhéad fadhbanna a bhí sa tionscadal. D'aontaíomar oibriú ar leithligh leis an bhfiach teicniúil, agus Bhí seiceálacha Android Studio tréigthe go hiomlán. Fuaimeann Android Studio in Docker le haghaidh iniúchtaí a reáchtáil suimiúil, ach is cúis le go leor trioblóide mar thacaíocht. Ciallaíonn aon nuashonrú ar leaganacha Android Studio streachailt le fabhtanna dothuigthe. Bhí sé deacair freisin tacú le tástálacha scáileáin, toisc nach raibh an leabharlann an-chobhsaí agus bhí dearfacha bréagacha ann. Baineadh tástálacha scáileáin den seicliosta.

Mar thoradh air sin, fágadh muid le:

  • tionól ARK;
  • tástálacha Junit;
  • Tástálacha ionstraimíochta.

Gradle taisce iargúlta

Gan seiceálacha trom, tháinig gach rud níos fearr. Ach níl aon teorainn le foirfeacht!

Roinneadh ár n-iarratas i thart ar 150 modúl gradle cheana féin. De ghnáth oibríonn taisce iargúlta Gradle go maith sa chás seo, agus mar sin shocraigh muid triail a bhaint as.

Is seirbhís é taisce cianda Gradle a fhéadfaidh déantáin a thógáil le haghaidh tascanna aonair i modúil aonair a thaisceadh. In ionad an cód a thiomsú i ndáiríre, úsáideann Gradle HTTP chun an taisce cianda a bhualadh agus fiafraí de an bhfuil an tasc seo déanta ag duine éigin cheana féin. Má tá, ní gá ach an toradh a íoslódáil.

Tá sé éasca taisce cianda Gradle a rith toisc go soláthraíonn Gradle íomhá Docker. D’éirigh linn é seo a dhéanamh i dtrí uair an chloig.

Всего-то надо было запустить Docker и прописать одну строчку в проекте. Но хотя запустить его можно быстро, чтобы все работало хорошо, потребуется достаточно много времени.

Anseo thíos tá an graf misses taisce.

Éabhlóid CI san fhoireann forbartha soghluaiste

Ag an tús, bhí céatadán na gcaillteanas taisce thart ar 65. Tar éis trí seachtaine, d'éirigh linn an luach seo a mhéadú go 20%. Tharla sé go bhfuil spleáchais aisteacha idirthurais ag baint leis na tascanna a bhailíonn an feidhmchlár Android, agus mar gheall ar sin chaill Gradle an taisce.

Tríd an taisce a nascadh, chuireamar dlús mór leis an tógáil. Ach i dteannta le cóimeáil, tá tástálacha ionstraimíochta ann freisin, agus tógann siad ar feadh i bhfad. B'fhéidir nach gá gach tástáil a rith le haghaidh gach iarratas tarraingthe. Chun a fháil amach, úsáidimid anailís tionchair.

Anailís tionchair

Ar iarratas tarraingt, bailímid git diff agus aimsímid na modúil Gradle modhnaithe.

Éabhlóid CI san fhoireann forbartha soghluaiste

Déanann sé ciall gan ach tástálacha ionstraimíochta a reáchtáil a sheiceálann na modúil athraithe agus na modúil go léir a bhraitheann orthu. Níl aon phointe ann tástálacha a reáchtáil le haghaidh modúil chomharsanachta: níor athraigh an cód ann agus ní féidir aon rud a bhriseadh.

Níl tástálacha ionstraimíochta chomh simplí sin, toisc go gcaithfidh siad a bheith suite sa mhodúl Feidhmchláir barrleibhéil. Bhaineamar úsáid as heuristics le hanailís beart-chóid chun a thuiscint cén modúl lena mbaineann gach tástáil.

Thóg sé thart ar ocht seachtaine oibríocht na dtástálacha ionstraimíochta a uasghrádú ionas nach dtástáil siad ach na modúil a bhí i gceist.

D'éirigh go maith le bearta chun iniúchtaí a bhrostú. Ó 45 nóiméad chuaigh muid suas go dtí thart ar 15. Is gnách cheana féin fanacht ceathrú uaire le haghaidh tógáil.

Ach anois tá forbróirí tosaithe ag gearán nach dtuigeann siad cé na foirgnimh atá á seoladh, cá háit a bhfeiceann siad an logáil, cén fáth go bhfuil an tógáil dearg, cén tástáil ar theip orthu, etc.

Éabhlóid CI san fhoireann forbartha soghluaiste

Cuireann fadhbanna le haiseolas moill ar fhorbairt, agus mar sin rinneamar iarracht faisnéis chomh soiléir agus chomh mionsonraithe a sholáthar faoi gach caidreamh poiblí agus tógáil. Thosaigh muid le tuairimí in Bitbucket don PR, ag tabhairt le fios cén tógáil ar theip air agus cén fáth, agus scríobhamar teachtaireachtaí spriocdhírithe in Slack. Sa deireadh, chruthaíomar painéal PR don leathanach le liosta de na tógálacha go léir atá ar siúl faoi láthair agus a stádas: scuaine, rith, tuairteála nó críochnaithe. Is féidir leat cliceáil ar an tógáil agus a fháil ar a logáil.

Éabhlóid CI san fhoireann forbartha soghluaiste

Caitheadh ​​sé seachtaine ar aiseolas mionsonraithe.

Pleananna

Bogaimis ar aghaidh go dtí an stair le déanaí. Tar éis dúinn an cheist aiseolais a réiteach, shroicheamar leibhéal nua - shocraigh muid ár bhfeirm aithriseoir féin a thógáil. Nuair a bhíonn go leor tástálacha agus aithriseoir, tá siad deacair a bhainistiú. Mar thoradh air sin, bhog ár n-aithriseoirí go léir go braisle k8s le bainistíocht acmhainní solúbtha.

Ina theannta sin, tá pleananna eile.

  • Fill ar ais Lint (agus anailís statach eile). Táimid ag obair sa treo seo cheana féin.
  • Rith gach rud ar choscóir PR tástálacha deireadh go deireadh ar gach leagan SDK.

Итак, мы проследили историю развития Continuous Integration в Авито. Теперь хочу дать несколько советов с точки зрения бывалого.

Советы

Mura bhféadfainn ach píosa amháin comhairle a thabhairt bheadh ​​sé seo:

Bí cúramach le scripteanna sliogáin!

Is uirlis an-solúbtha agus chumhachtach é Bash, tá sé an-áisiúil agus tapa scripteanna a scríobh. Ach is féidir leat titim isteach i gaiste leis, agus, ar an drochuair, thit muid isteach é.

Thosaigh sé ar fad le scripteanna simplí a bhí ar siúl ar ár meaisíní tógála:

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

Ach, mar is eol duit, forbraíonn gach rud agus éiríonn sé níos casta le himeacht ama - déanaimis script amháin a rith ó cheann eile, déanaimis roinnt paraiméadair a phasáil ann - sa deireadh bhí orainn feidhm a scríobh a chinneann cén leibhéal neadaithe bash atáimid in ord anois. chun na comharthaí athfhriotail riachtanacha a chur isteach, chun tús a chur leis.

Éabhlóid CI san fhoireann forbartha soghluaiste

Is féidir leat a shamhlú na costais saothair a bhaineann le forbairt scripteanna den sórt sin. Molaim duit gan titim isteach sa gaiste seo.

Cad is féidir a chur in ionad?

  • Aon teanga scriptithe. Scríobh chuig Script Python nó Kotlin níos áisiúla toisc gur ríomhchlárú atá i gceist, ní scripteanna.
  • Nó déan cur síos ar an loighic tógála ar fad san fhoirm Tascanna gradle saincheaptha do do thionscadal.

Shocraigh muid an dara rogha a roghnú, agus anois táimid ag scriosadh gach script bash go córasach agus ag scríobh go leor tascanna gradle saincheaptha.

Leid #2: Stóráil an bonneagar i gcód.

Tá sé áisiúil nuair a stóráiltear an socrú Comhtháthaithe Leanúnach ní i gcomhéadan UI Jenkins nó TeamCity, etc., ach i bhfoirm comhaid téacs go díreach i stór an tionscadail. Tugann sé seo inleagantacht. Ní bheidh sé deacair an cód a chur ar ais nó a thógáil ar bhrainse eile.

Is féidir scripteanna a stóráil i dtionscadal. Cad atá le déanamh leis an timpeallacht?

Leid #3: Is féidir le Docker cabhrú leis an gcomhshaol.

Cabhróidh sé go cinnte le forbróirí Android; níl ceann ag iOS fós, ar an drochuair.

Seo sampla de chomhad docker simplí ina bhfuil jdk agus 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

Tar éis duit an comhad Docker seo a scríobh ( inseoidh mé rún duit, ní gá duit é a scríobh, ach é a tharraingt réidh ó GitHub) agus an íomhá a chur le chéile, gheobhaidh tú meaisín fíorúil ar féidir leat an feidhmchlár a thógáil agus tástálacha Junit a reáchtáil.

Is iad an dá phríomhchúis a bhfuil ciall leis seo ná inscálaitheacht agus in-atrialltacht. Ag baint úsáide as docker, is féidir leat dosaen gníomhairí tógála a ardú go tapa a mbeidh an timpeallacht chéanna acu leis an gceann roimhe seo. Déanann sé seo saol na n-innealtóirí CI i bhfad níos éasca. Tá sé éasca go leor an android-sdk a bhrú isteach sa docker, ach le aithriseoirí tá sé beagán níos deacra: beidh ort oibriú beagán níos deacra (nó an ceann críochnaithe a íoslódáil ó GitHub arís).

Leid Uimh. 4: ná déan dearmad nach ndéantar iniúchtaí ar mhaithe le hiniúchtaí, ach ar mhaithe le daoine.

Tá aiseolas tapa agus, níos tábhachtaí fós, an-tábhachtach d'fhorbróirí: cad a bhris, cén tástáil ar theip air, cén áit ar féidir liom an logóg a fheiceáil.

Leid #5: Bí pragmatach agus Comhtháthú Leantach á fhorbairt.

A thuiscint go soiléir cad iad na cineálacha earráidí is mian leat a chosc, cé mhéad acmhainní, am agus am ríomhaire atá tú sásta a chaitheamh. Is féidir seiceanna a thógann ró-fhada, mar shampla, a chur siar thar oíche. Agus ba cheart iad siúd acu nach nglacann earráidí an-tábhachtacha a thréigean go hiomlán.

Leid #6: Úsáid uirlisí réamhdhéanta.

Tá go leor cuideachtaí ann anois a sholáthraíonn scamall CI.

Éabhlóid CI san fhoireann forbartha soghluaiste

Is réiteach maith é seo d’fhoirne beaga. Ní gá duit tacú le rud ar bith, níl le déanamh ach beagán airgid a íoc, d'iarratas a thógáil agus fiú tástálacha ionstraimíochta a reáchtáil.

Leid #7: I bhfoireann mhór, tá réitigh intí níos brabúsaí.

Ach luath nó mall, de réir mar a fhásann an fhoireann, beidh réitigh intí níos brabúsaí. Tá fadhb amháin leis na cinntí seo. Tá dlí ann maidir le torthaí laghdaithe san eacnamaíocht: in aon tionscadal, tá gach feabhsú ina dhiaidh sin níos deacra agus níos mó agus éilíonn sé infheistíocht níos mó agus níos mó.

Déanann Eacnamaíocht cur síos ar ár saol iomlán, lena n-áirítear Comhtháthú Leanúnach. Thóg mé sceideal de chostais saothair le haghaidh gach céim d'fhorbairt ár gComhtháthú Leanúnach.

Éabhlóid CI san fhoireann forbartha soghluaiste

Is léir go bhfuil feabhas ar bith ag éirí níos deacra. Ag féachaint ar an ngraf seo, is féidir leat a thuiscint gur gá Comhtháthú Leanúnach a fhorbairt de réir fás méid na foirne. I gcás foireann de bheirt, is smaoineamh measartha é 50 lá a chaitheamh ag forbairt feirm aithrise inmheánaigh. Ach ag an am céanna, d'fhoireann mhór, is droch-smaoineamh é gan Comhtháthú Leanúnach a dhéanamh ar chor ar bith, toisc go bhfuil fadhbanna comhtháthaithe, cumarsáid a shocrú, etc. tógfaidh sé níos mó ama fós.

Thosaigh muid leis an smaoineamh go bhfuil gá le uathoibriú mar go bhfuil daoine costasach, go ndéanann siad botúin agus go bhfuil siad leisciúil. Ach déanann daoine uathoibriú freisin. Dá bhrí sin, baineann na fadhbanna céanna go léir le uathoibriú.

  • Tá uathoibriú costasach. Cuimhnigh ar an sceideal saothair.
  • Nuair a thagann sé chun uathoibriú, déanann daoine botúin.
  • Uaireanta bíonn sé an-leisciúil uathoibriú, toisc go n-oibríonn gach rud mar sin. Cén fáth rud ar bith eile a fheabhsú, cén fáth an Comhtháthú Leanúnach seo go léir?

Ach tá staitisticí agam: gabhtar earráidí i 20% de na tionóil. Agus ní hé seo toisc go scríobhann ár bhforbróirí cód go dona. Tá sé seo amhlaidh toisc go bhfuil forbróirí muiníneach, má dhéanann siad roinnt botún, nach mbeidh sé ag forbairt go deireadh, beidh sé gafa ag seiceálacha uathoibrithe. Dá réir sin, is féidir le forbróirí níos mó ama a chaitheamh ag scríobh cód agus rudaí suimiúla, seachas rud éigin a reáchtáil agus a thástáil go háitiúil.

Cleachtadh Comhtháthú Leanúnach. Ach go measartha.

Dála an scéil, ní hamháin go dtugann Nikolai Nesterov tuarascálacha iontach dó féin, ach tá sé ina bhall de choiste an chláir freisin AppsConf agus cabhraíonn sé le daoine eile óráidí brí a ullmhú duit. Is féidir iomláine agus úsáideacht an chéad chlár comhdhála eile a mheas de réir topaicí i sceideal. Agus le haghaidh sonraí, tar chuig Infospace ar Aibreán 22-23.

Foinse: will.com

Add a comment