Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Loni, ọpọlọpọ awọn ọja sọfitiwia ni idagbasoke ni awọn ẹgbẹ. Awọn ipo fun idagbasoke ẹgbẹ aṣeyọri le jẹ aṣoju ni irisi aworan ti o rọrun.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Ni kete ti o ti kọ koodu rẹ, o nilo lati rii daju pe:

  1. Imudojuiwọn.
  2. Ko fọ ohunkohun, pẹlu koodu ti awọn ẹlẹgbẹ rẹ kowe.

Ti awọn ipo mejeeji ba pade, lẹhinna o wa lori ọna si aṣeyọri. Lati ni rọọrun ṣayẹwo awọn ipo wọnyi ati ki o ko yapa lati ọna ere, a wa pẹlu Integration Ilọsiwaju.

CI jẹ ṣiṣan iṣẹ nibiti o ti ṣepọ koodu rẹ sinu koodu ọja gbogbogbo ni igbagbogbo bi o ti ṣee. Ati pe o ko kan ṣepọ, ṣugbọn tun ṣayẹwo nigbagbogbo pe ohun gbogbo n ṣiṣẹ. Niwọn igba ti o nilo lati ṣayẹwo pupọ ati nigbagbogbo, o tọ lati ronu nipa adaṣe. O le ṣayẹwo ohun gbogbo pẹlu ọwọ, ṣugbọn o yẹ ki o ko, ati nibi ni idi.

  • Eyin eniyan. Wakati iṣẹ ti eyikeyi pirogirama jẹ diẹ gbowolori ju wakati kan ti iṣẹ ti eyikeyi olupin.
  • Eniyan ṣe awọn aṣiṣe. Nitorinaa, awọn ipo le dide nigbati awọn idanwo ti ṣiṣẹ lori ẹka ti ko tọ tabi ti ṣe akojọpọ iṣẹ aṣiṣe fun awọn oludanwo.
  • Eniyan jẹ ọlẹ. Látìgbàdégbà, tí mo bá parí iṣẹ́ kan, ọ̀rọ̀ náà máa ń wáyé: “Kí ló wà láti yẹ̀ wò? Mo ti kowe meji ila - ohun gbogbo ṣiṣẹ! Mo ro pe diẹ ninu awọn ti o tun ma ni iru ero. Ṣugbọn o yẹ ki o ṣayẹwo nigbagbogbo.

Bawo ni Integration Ilọsiwaju ti ṣe imuse ati idagbasoke ni ẹgbẹ idagbasoke alagbeka Avito, bawo ni wọn ṣe lọ lati 0 si 450 kọ fun ọjọ kan, ati pe awọn ẹrọ kọ awọn wakati 200 lojoojumọ, ni Nikolai Nesterov sọ (nnesterov) jẹ alabaṣe ni gbogbo awọn iyipada itiranya ti ohun elo Android CI/CD.

Itan naa da lori apẹẹrẹ ti aṣẹ Android kan, ṣugbọn pupọ julọ awọn isunmọ wa wulo lori iOS paapaa.


Ni ẹẹkan, eniyan kan ṣiṣẹ ni ẹgbẹ Avito Android. Nipa asọye, ko nilo ohunkohun lati Isọpọ Ilọsiwaju: ko si ẹnikan lati ṣepọ pẹlu.

Ṣugbọn ohun elo naa dagba, awọn iṣẹ-ṣiṣe tuntun ati siwaju sii han, ati pe ẹgbẹ naa dagba ni ibamu. Ni aaye kan, o to akoko lati ṣe agbekalẹ ilana isọpọ koodu kan diẹ sii. O ti pinnu lati lo ṣiṣan Git.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Imọye ti ṣiṣan Git jẹ olokiki daradara: iṣẹ akanṣe kan ni ẹka idagbasoke ti o wọpọ, ati fun ẹya tuntun kọọkan, awọn olupilẹṣẹ ge ẹka ti o yatọ, ṣe adehun si rẹ, Titari, ati nigbati wọn fẹ lati dapọ koodu wọn sinu ẹka idagbasoke, ṣii kan fa ìbéèrè. Lati pin imọ ati jiroro awọn isunmọ, a ṣafihan atunyẹwo koodu, iyẹn ni, awọn ẹlẹgbẹ gbọdọ ṣayẹwo ati jẹrisi koodu kọọkan miiran.

Awọn sọwedowo

Ri koodu pẹlu oju rẹ jẹ itura, ṣugbọn ko to. Nitorinaa, awọn sọwedowo aifọwọyi ti wa ni iṣafihan.

  • Ni akọkọ, a ṣayẹwo ARK ijọ.
  • Pupo Awọn idanwo Junit.
  • A ro agbegbe koodu, niwon a nṣiṣẹ awọn idanwo.

Lati ni oye bi o ṣe yẹ ki awọn sọwedowo wọnyi ṣiṣẹ, jẹ ki a wo ilana idagbasoke ni Avito.

O le ṣe aṣoju sikematiki bii eyi:

  • Olùgbéejáde kan kọ koodu lori kọǹpútà alágbèéká rẹ. O le ṣiṣe awọn sọwedowo isọpọ ni ibi - boya pẹlu kio kan, tabi nirọrun ṣiṣe awọn sọwedowo ni abẹlẹ.
  • Lẹhin ti olupilẹṣẹ ti tẹ koodu naa, o ṣii ibeere fifa kan. Ni ibere fun koodu rẹ lati wa ninu ẹka idagbasoke, o jẹ dandan lati lọ nipasẹ atunyẹwo koodu kan ati gba nọmba ti o nilo ti awọn ijẹrisi. O le mu awọn sọwedowo ṣiṣẹ ati kọ nibi: titi gbogbo awọn ile yoo fi ṣaṣeyọri, ibeere fa ko le ṣe idapọ.
  • Lẹhin ti a ti dapọ ibeere fa ati pe koodu naa wa ninu idagbasoke, o le yan akoko ti o rọrun: fun apẹẹrẹ, ni alẹ, nigbati gbogbo awọn olupin ba ni ọfẹ, ati ṣiṣe bi ọpọlọpọ awọn sọwedowo bi o ṣe fẹ.

Ko si ẹnikan ti o fẹran ṣiṣe awọn ọlọjẹ lori kọǹpútà alágbèéká wọn. Nigbati olupilẹṣẹ ba ti pari ẹya kan, o fẹ lati titari ni kiakia ki o ṣii ibeere fa. Ti o ba jẹ pe ni akoko yii diẹ ninu awọn sọwedowo gigun ti ṣe ifilọlẹ, eyi kii ṣe igbadun pupọ, ṣugbọn tun fa fifalẹ idagbasoke: lakoko ti kọǹpútà alágbèéká n ṣayẹwo nkan kan, ko ṣee ṣe lati ṣiṣẹ deede lori rẹ.

A nifẹ gaan awọn sọwedowo ṣiṣe ni alẹ, nitori pe akoko pupọ wa ati awọn olupin, o le lọ kiri ni ayika. Ṣugbọn, laanu, nigbati koodu ẹya ba wọle si idagbasoke, olupilẹṣẹ ni iwuri ti o kere pupọ lati ṣatunṣe awọn aṣiṣe ti CI rii. Nigbagbogbo Mo gba ara mi ni ironu nigbati Mo wo gbogbo awọn aṣiṣe ti a rii ni ijabọ owurọ pe Emi yoo ṣe atunṣe wọn ni ọjọ kan nigbamii, nitori ni bayi iṣẹ tuntun ti o tutu wa ni Jira ti Mo kan fẹ bẹrẹ ṣe.

Ti awọn sọwedowo ba ṣe idiwọ ibeere fa, lẹhinna iwuri to wa, nitori titi ti awọn kikọ yoo fi di alawọ ewe, koodu naa kii yoo ni idagbasoke, eyiti o tumọ si pe iṣẹ naa kii yoo pari.

Bi abajade, a yan ilana atẹle yii: a ṣiṣẹ awọn sọwedowo ti o pọju ti o ṣeeṣe ni alẹ, ati ṣe ifilọlẹ pataki julọ ninu wọn ati, pataki julọ, awọn ti o yara ju lori ibeere fa. Ṣugbọn a ko da duro nibẹ - ni afiwe, a mu iyara awọn sọwedowo pọ si lati gbe wọn lati ipo alẹ lati fa awọn sọwedowo ibeere.

Ni akoko yẹn, gbogbo awọn ile wa ti pari ni iyara, nitorinaa a rọrun pẹlu kikọ ARK, awọn idanwo Junit ati awọn iṣiro agbegbe koodu bi idena fun ibeere fa. A tan-an, ronu nipa rẹ, ati kọ koodu agbegbe silẹ nitori a ro pe a ko nilo rẹ.

O gba wa ni ọjọ meji lati ṣeto CI ipilẹ patapata (lẹhinna idiyele akoko jẹ isunmọ, nilo fun iwọn).

Lẹhin iyẹn, a bẹrẹ lati ronu siwaju - ṣe a paapaa ṣayẹwo ni deede? Njẹ a nṣiṣẹ awọn ipilẹ lori awọn ibeere fifa ni deede?

A bẹrẹ kọ lori ifaramo ti o kẹhin ti ẹka lati eyiti a ti ṣii ibeere fa. Ṣugbọn awọn idanwo ti iṣẹ yii le fihan nikan pe koodu ti olupilẹṣẹ kọ ṣiṣẹ. Ṣugbọn wọn ko fihan pe ko ṣẹ ohunkohun. Ni otitọ, o nilo lati ṣayẹwo ipo ti ẹka idagbasoke lẹhin ti ẹya kan ti dapọ sinu rẹ.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Lati ṣe eyi, a kọ iwe afọwọkọ bash ti o rọrun premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Nibi gbogbo awọn ayipada tuntun lati idagbasoke ni a fa nirọrun ati dapọ si ẹka lọwọlọwọ. A ṣafikun iwe afọwọkọ premerge.sh gẹgẹbi igbesẹ akọkọ ni gbogbo awọn ile-iṣẹ ati bẹrẹ ṣiṣe ayẹwo ni pato ohun ti a fẹ, iyẹn Integration.

O gba ọjọ mẹta lati sọ iṣoro naa di agbegbe, wa ojutu kan, ati kọ iwe afọwọkọ yii.

Awọn ohun elo ni idagbasoke, siwaju ati siwaju sii awọn iṣẹ-ṣiṣe han, awọn egbe dagba, ati premerge.sh ma bẹrẹ lati jẹ ki a sọkalẹ. Idagbasoke ni awọn iyipada ti o fi ori gbarawọn ti o fọ kọ.

Apẹẹrẹ ti bii eyi ṣe ṣẹlẹ:

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Awọn olupilẹṣẹ meji ni nigbakannaa bẹrẹ ṣiṣẹ lori awọn ẹya A ati B. Olùgbéejáde ti ẹya A ṣe awari ẹya ti ko lo ninu iṣẹ naa answer() ati, bi awọn kan ti o dara ọmọkunrin Sikaotu, yọ kuro. Ni akoko kanna, olupilẹṣẹ ti ẹya B ṣe afikun ipe tuntun si iṣẹ yii ni ẹka rẹ.

Awọn olupilẹṣẹ pari iṣẹ wọn ati ṣii ibeere fifa ni akoko kanna. Awọn itumọ ti ṣe ifilọlẹ, premerge.sh sọwedowo awọn ibeere fa mejeeji nipa ipo idagbasoke tuntun - gbogbo awọn sọwedowo jẹ alawọ ewe. Lẹhin iyẹn, ibeere fifa ti ẹya A ti dapọ, ibeere fifa ti ẹya B ti dapọ ... Ariwo! Dagbasoke awọn isinmi nitori koodu idagbasoke ni ipe kan si iṣẹ ti ko si.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Nigba ti kii yoo ni idagbasoke, o jẹ ajalu agbegbe. Gbogbo ẹgbẹ ko le gba ohunkohun ati fi silẹ fun idanwo.

O ṣẹlẹ pe Mo nigbagbogbo ṣiṣẹ lori awọn iṣẹ-ṣiṣe amayederun: atupale, nẹtiwọọki, awọn apoti isura data. Iyẹn ni, Emi ni ẹniti o kọ awọn iṣẹ yẹn ati awọn kilasi ti awọn olupilẹṣẹ miiran lo. Nitori eyi, Mo rii ara mi ni awọn ipo kanna ni igbagbogbo. Mo paapaa ni aworan yii ti o sokun fun igba diẹ.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Niwọn igba ti eyi ko baamu wa, a bẹrẹ lati ṣawari awọn aṣayan lori bii a ṣe le ṣe idiwọ eyi.

Bi o ko ṣe ṣẹ idagbasoke

Aṣayan akọkọ: tun gbogbo awọn ibeere fa ṣe nigbati o n ṣe imudojuiwọn idagbasoke. Ti, ninu apẹẹrẹ wa, ibeere fifa pẹlu ẹya A jẹ akọkọ lati wa ninu idagbasoke, ibeere fifa ti ẹya B yoo tun ṣe, ati, ni ibamu, awọn sọwedowo yoo kuna nitori aṣiṣe akopo kan.

Lati loye bi eyi yoo ṣe pẹ to, ronu apẹẹrẹ pẹlu awọn PR meji. A ṣii meji PRs: meji kọ, meji gbalaye ti sọwedowo. Lẹhin ti PR akọkọ ti dapọ si idagbasoke, ekeji nilo lati tun ṣe. Ni apapọ, awọn PR meji nilo awọn sọwedowo mẹta: 2 + 1 = 3.

Ni opo, o dara. Ṣugbọn a wo awọn iṣiro naa, ati pe ipo aṣoju ninu ẹgbẹ wa jẹ 10 ìmọ PRs, ati lẹhinna nọmba awọn sọwedowo ni apapọ ti ilọsiwaju naa: 10 + 9 +... + 1 = 55. Iyẹn ni, lati gba 10 PRs, o nilo lati tun ṣe awọn akoko 55. Ati pe eyi wa ni ipo pipe, nigbati gbogbo awọn sọwedowo ba kọja ni igba akọkọ, nigbati ko si ẹnikan ti o ṣii ibeere fifa afikun lakoko ti awọn mejila wọnyi ti wa ni ilọsiwaju.

Fojuinu ara rẹ bi olupilẹṣẹ ti o nilo lati jẹ akọkọ lati tẹ lori bọtini “dapọ”, nitori ti aladugbo ba ṣe eyi, lẹhinna o yoo ni lati duro titi gbogbo awọn ikole yoo tun lọ lẹẹkansi… Rara, iyẹn kii yoo ṣiṣẹ , yoo fa fifalẹ idagbasoke ni pataki.

Ọna keji ti o ṣeeṣe: gba awọn ibeere fa lẹhin atunyẹwo koodu. Iyẹn ni, o ṣii ibeere fifa kan, gba nọmba ti o nilo ti awọn ifọwọsi lati ọdọ awọn ẹlẹgbẹ, ṣe atunṣe ohun ti o nilo, lẹhinna ṣe ifilọlẹ awọn kọ. Ti wọn ba ṣaṣeyọri, ibeere fifa naa ti dapọ si idagbasoke. Ni idi eyi, ko si awọn atunbere afikun, ṣugbọn awọn esi ti fa fifalẹ pupọ. Gẹgẹbi olupilẹṣẹ, nigbati Mo ṣii ibeere fifa, Mo fẹ lẹsẹkẹsẹ lati rii boya yoo ṣiṣẹ. Fun apẹẹrẹ, ti idanwo kan ba kuna, o nilo lati tunṣe ni kiakia. Ninu ọran ti kikọ idaduro, esi fa fifalẹ, ati nitorinaa gbogbo idagbasoke. Eyi ko baamu fun wa paapaa.

Bi abajade, aṣayan kẹta nikan wa - keke. Gbogbo koodu wa, gbogbo awọn orisun wa ti wa ni ipamọ ni ibi ipamọ kan lori olupin Bitbucket. Nitorinaa, a ni lati ṣe agbekalẹ ohun itanna kan fun Bitbucket.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Ohun itanna yi dojukọ ẹrọ idapọ ibeere fa. Ibẹrẹ jẹ boṣewa: PR ṣii, gbogbo awọn apejọ ti ṣe ifilọlẹ, atunyẹwo koodu ti pari. Ṣugbọn lẹhin atunyẹwo koodu ti pari ati pe olupilẹṣẹ pinnu lati tẹ lori “dapọ”, awọn sọwedowo ohun itanna lodi si eyiti o dagbasoke ipo awọn sọwedowo ti ṣiṣẹ. Ti o ba ti ni imudojuiwọn idagbasoke lẹhin awọn kikọ, ohun itanna kii yoo gba laaye iru ibeere fa lati dapọ si ẹka akọkọ. Yoo rọrun tun bẹrẹ awọn itumọ ti idagbasoke to ṣẹṣẹ kan.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Ninu apẹẹrẹ wa pẹlu awọn iyipada ti o fi ori gbarawọn, iru awọn itumọ yoo kuna nitori aṣiṣe akojọpọ kan. Nitorinaa, olupilẹṣẹ ti ẹya B yoo ni lati ṣatunṣe koodu naa, tun bẹrẹ awọn sọwedowo, lẹhinna ohun itanna yoo lo ibeere fifa naa laifọwọyi.

Ṣaaju ṣiṣe ohun itanna yii, a ṣe aropin awọn ṣiṣe atunyẹwo 2,7 fun ibeere fa. Pẹlu ohun itanna naa awọn ifilọlẹ 3,6 wa. Eyi baamu wa.

O ṣe akiyesi pe ohun itanna yii ni apadabọ: o tun bẹrẹ kọ lẹẹkan. Iyẹn ni, window kekere kan tun wa nipasẹ eyiti awọn iyipada ikọlura le wọle si idagbasoke. Ṣugbọn o ṣeeṣe ti eyi jẹ kekere, ati pe a ṣe iṣowo-pipa laarin nọmba awọn ibẹrẹ ati iṣeeṣe ikuna. Ni odun meji ti o nikan kuro lenu ise ni kete ti, ki o jasi ko ni asan.

O gba ọsẹ meji lati kọ ẹya akọkọ ti ohun itanna Bitbucket.

Awọn sọwedowo tuntun

Nibayi, ẹgbẹ wa tẹsiwaju lati dagba. Awọn sọwedowo tuntun ti ṣafikun.

A ro: kilode ti o ṣe awọn aṣiṣe ti wọn ba le ṣe idiwọ? Ati awọn ti o ni idi ti won muse aimi koodu onínọmbà. A bẹrẹ pẹlu lint, eyiti o wa ninu Android SDK. Ṣugbọn ni akoko yẹn ko mọ bi o ṣe le ṣiṣẹ pẹlu koodu Kotlin rara, ati pe a ti ni 75% ti ohun elo ti a kọ sinu Kotlin. Nitorinaa, awọn ti a ṣe sinu rẹ ni a ṣafikun si lint Android Studio sọwedowo.

Lati ṣe eyi, a ni lati ṣe iyipada pupọ: mu Android Studio, ṣajọ rẹ ni Docker ki o ṣiṣẹ lori CI pẹlu atẹle foju kan, ki o ro pe o nṣiṣẹ lori kọǹpútà alágbèéká gidi kan. Ṣugbọn o ṣiṣẹ.

O tun jẹ akoko yii ti a bẹrẹ kikọ pupọ ohun elo igbeyewo ati imuse igbeyewo sikirinifoto. Eyi ni nigbati a ti ipilẹṣẹ sikirinifoto itọkasi fun wiwo kekere lọtọ, ati pe idanwo naa ni lati mu aworan sikirinifoto lati wiwo ati ṣe afiwe rẹ pẹlu boṣewa taara ẹbun nipasẹ ẹbun. Ti iyatọ ba wa, o tumọ si pe ifilelẹ ti ko tọ si ibikan tabi nkan ti ko tọ ni awọn aṣa.

Ṣugbọn awọn idanwo ohun elo ati awọn idanwo sikirinifoto nilo lati ṣiṣẹ lori awọn ẹrọ: lori awọn emulators tabi lori awọn ẹrọ gidi. Ti o ba ṣe akiyesi pe ọpọlọpọ awọn idanwo wa ati pe wọn nṣiṣẹ nigbagbogbo, gbogbo oko kan nilo. Bibẹrẹ oko tirẹ jẹ alaapọn pupọ, nitorinaa a rii aṣayan ti a ti ṣetan - Lab Idanwo Firebase.

Firebase igbeyewo Lab

O ti yan nitori Firebase jẹ ọja Google kan, afipamo pe o yẹ ki o jẹ igbẹkẹle ati pe ko ṣeeṣe lati ku lailai. Awọn iye owo wa ni oye: $ 5 fun wakati iṣẹ ti ẹrọ gidi kan, 1 $ fun wakati iṣẹ ti emulator kan.

O gba to ọsẹ mẹta lati ṣe imuse Lab Idanwo Firebase sinu CI wa.

Ṣugbọn ẹgbẹ naa tẹsiwaju lati dagba, ati Firebase, laanu, bẹrẹ si jẹ ki a sọkalẹ. Ni akoko yẹn, ko ni SLA eyikeyi. Nigba miiran Firebase jẹ ki a duro titi nọmba ti a beere fun awọn ẹrọ yoo jẹ ọfẹ fun awọn idanwo, ati pe ko bẹrẹ ṣiṣe wọn lẹsẹkẹsẹ, bi a ṣe fẹ. Nduro ni laini gba to idaji wakati kan, eyiti o jẹ akoko pipẹ pupọ. Awọn idanwo ohun elo ni a ṣiṣẹ lori gbogbo PR, awọn idaduro fa fifalẹ idagbasoke gaan, lẹhinna owo oṣooṣu wa pẹlu apao yika. Ni gbogbogbo, o pinnu lati fi Firebase silẹ ki o ṣiṣẹ ni ile, nitori ẹgbẹ naa ti dagba to.

Docker + Python + bash

A mu Docker, awọn emulators sitofudi sinu rẹ, kowe kan ti o rọrun eto ni Python, eyi ti o ni ọtun akoko mu soke awọn ti a beere nọmba ti emulators ni awọn ti a beere version ati ki o da wọn nigbati pataki. Ati pe, dajudaju, tọkọtaya kan ti awọn iwe afọwọkọ bash - nibo ni a yoo wa laisi wọn?

O gba ọsẹ marun lati ṣẹda agbegbe idanwo tiwa.

Bi abajade, fun gbogbo ibeere fifa ni atokọ idinamọ apapọ ti awọn sọwedowo:

  • ARK apejọ;
  • Awọn idanwo Junit;
  • Lint;
  • Android Studio sọwedowo;
  • Awọn idanwo ohun elo;
  • Awọn idanwo sikirinifoto.

Eyi ṣe idiwọ ọpọlọpọ awọn idinku ti o ṣeeṣe. Ni imọ-ẹrọ ohun gbogbo ṣiṣẹ, ṣugbọn awọn olupilẹṣẹ rojọ pe iduro fun awọn abajade ti gun ju.

Bawo ni pipẹ ti gun ju? A gbejade data lati Bitbucket ati TeamCity sinu eto itupalẹ ati rii pe apapọ nduro akoko 45 iṣẹju. Iyẹn ni, olupilẹṣẹ kan, nigbati o ṣii ibeere fifa, nduro ni apapọ awọn iṣẹju 45 fun awọn abajade kikọ. Ni ero mi, eyi jẹ pupọ, ati pe o ko le ṣiṣẹ bi iyẹn.

Nitoribẹẹ, a pinnu lati yara gbogbo awọn ile wa.

Jẹ ki a yara

Ri ti o kọ igba duro ni a ti isinyi, akọkọ ohun ti a se ni ra diẹ hardware - sanlalu idagbasoke ni awọn alinisoro. Awọn ile duro ti isinyi, ṣugbọn akoko idaduro dinku diẹ diẹ, nitori diẹ ninu awọn sọwedowo funrararẹ gba akoko pipẹ pupọ.

Yiyọ awọn sọwedowo ti o gba gun ju

Ijọpọ Ilọsiwaju wa le yẹ iru awọn aṣiṣe ati awọn iṣoro wọnyi.

  • Ko lilọ si. CI le yẹ aṣiṣe akopo nigbati nkan ko ba kọ nitori awọn iyipada rogbodiyan. Gẹgẹbi Mo ti sọ tẹlẹ, lẹhinna ko si ẹnikan ti o le ṣajọ ohunkohun, idagbasoke duro, ati pe gbogbo eniyan ni aifọkanbalẹ.
  • Kokoro ni ihuwasi. Fun apẹẹrẹ, nigbati ohun elo ti wa ni itumọ ti, ṣugbọn ipadanu nigbati o ba tẹ bọtini kan, tabi awọn bọtini ti wa ni ko te ni gbogbo. Eyi buru nitori iru kokoro le de ọdọ olumulo.
  • Kokoro ni ifilelẹ. Fun apẹẹrẹ, bọtini kan ti tẹ, ṣugbọn o ti gbe awọn piksẹli 10 si apa osi.
  • Alekun gbese imọ-ẹrọ.

Lẹhin wiwo atokọ yii, a rii pe awọn aaye meji akọkọ nikan ni o ṣe pataki. A fẹ lati yẹ iru awọn iṣoro ni akọkọ. Awọn idun ninu iṣeto ni a ṣe awari ni ipele atunyẹwo apẹrẹ ati pe o le ṣe atunṣe ni rọọrun lẹhinna. Ṣiṣe pẹlu gbese imọ-ẹrọ nilo ilana lọtọ ati igbero, nitorinaa a pinnu lati ma ṣe idanwo rẹ lori ibeere fa.

Da lori yi classification, a mì soke gbogbo akojọ ti awọn sọwedowo. Rekoja jade Lint ati ki o felomiran awọn oniwe-ifilole moju: o kan ki o le gbe awọn kan Iroyin lori bi ọpọlọpọ awọn isoro nibẹ wà ni ise agbese. A gba lati ṣiṣẹ lọtọ pẹlu gbese imọ, ati Awọn sọwedowo Studio Studio Android ti kọ silẹ patapata. Studio Studio ni Docker fun ṣiṣe awọn ayewo n dun, ṣugbọn o fa wahala pupọ ni atilẹyin. Eyikeyi imudojuiwọn si awọn ẹya Studio Studio tumọ si Ijakadi pẹlu awọn idun ti ko ni oye. O tun nira lati ṣe atilẹyin awọn idanwo sikirinifoto, nitori ile-ikawe naa ko ni iduroṣinṣin pupọ ati pe awọn idaniloju eke wa. Awọn idanwo sikirinifoto ti yọkuro lati inu atokọ ayẹwo.

Bi abajade, a fi wa silẹ pẹlu:

  • ARK apejọ;
  • Awọn idanwo Junit;
  • Awọn idanwo ohun elo.

Kaṣe latọna jijin Gradle

Laisi awọn sọwedowo ti o wuwo, ohun gbogbo dara julọ. Ṣugbọn ko si opin si pipe!

Ohun elo wa ti pin tẹlẹ si bii awọn modulu gradle 150. Kaṣe latọna jijin Gradle maa n ṣiṣẹ daradara ni ọran yii, nitorinaa a pinnu lati gbiyanju rẹ.

Kaṣe isakoṣo latọna jijin Gradle jẹ iṣẹ ti o le kaṣe kọ awọn ohun-ọṣọ fun awọn iṣẹ ṣiṣe kọọkan ni awọn modulu kọọkan. Gradle, dipo kikojọ koodu gangan, nlo HTTP lati kan kaṣe latọna jijin ki o beere boya ẹnikan ti ṣe iṣẹ yii tẹlẹ. Ti o ba jẹ bẹẹni, o kan ṣe igbasilẹ abajade.

Ṣiṣe kaṣe isakoṣo latọna jijin Gradle rọrun nitori Gradle n pese aworan Docker kan. A ṣakoso lati ṣe eyi ni wakati mẹta.

Gbogbo ohun ti o ni lati ṣe ni ifilọlẹ Docker ati kọ laini kan ninu iṣẹ akanṣe naa. Ṣugbọn botilẹjẹpe o le ṣe ifilọlẹ ni iyara, yoo gba akoko pupọ pupọ fun ohun gbogbo lati ṣiṣẹ daradara.

Ni isalẹ ni kaṣe padanu awonya.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Ni ibẹrẹ ibẹrẹ, ipin ogorun ti kaṣe padanu jẹ nipa 65. Lẹhin ọsẹ mẹta, a ṣakoso lati mu iye yii pọ si 20%. O wa jade pe awọn iṣẹ ṣiṣe ti ohun elo Android n gba ni awọn igbẹkẹle ajeji ajeji, nitori eyiti Gradle padanu kaṣe naa.

Nipa sisopọ kaṣe, a mu kikole naa yara pupọ. Ṣugbọn ni afikun si apejọ, awọn idanwo ohun elo tun wa, ati pe wọn gba akoko pipẹ. Boya kii ṣe gbogbo awọn idanwo nilo lati ṣiṣẹ fun gbogbo ibeere fa. Lati wa, a lo itupalẹ ipa.

Itupalẹ ipa

Lori ibeere fifa, a gba git diff ati rii awọn modulu Gradle ti a ti yipada.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

O jẹ oye lati ṣiṣe awọn idanwo ohun elo nikan ti o ṣayẹwo awọn modulu ti o yipada ati gbogbo awọn modulu ti o dale lori wọn. Ko si aaye ni ṣiṣe awọn idanwo fun awọn modulu adugbo: koodu ti o wa nibẹ ko yipada ati pe ko si nkan ti o le fọ.

Awọn idanwo ohun elo ko rọrun pupọ, nitori wọn gbọdọ wa ni ipo ohun elo ipele oke. A lo heuristics pẹlu bytecode onínọmbà lati ni oye eyi ti module kọọkan igbeyewo je ti si.

Igbegasoke iṣẹ ti awọn idanwo ohun elo ki wọn ṣe idanwo awọn modulu nikan ti o kan gba bii ọsẹ mẹjọ.

Awọn igbese lati yara awọn ayewo ti ṣiṣẹ ni aṣeyọri. Lati 45 iṣẹju a si lọ soke si nipa 15. O jẹ tẹlẹ deede lati duro kan mẹẹdogun ti wakati kan fun a Kọ.

Ṣugbọn ni bayi awọn olupilẹṣẹ ti bẹrẹ lati kerora pe wọn ko loye iru awọn ikole ti a ṣe ifilọlẹ, ibiti wọn ti rii log, idi ti ikole naa jẹ pupa, idanwo wo ti kuna, ati bẹbẹ lọ.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Awọn iṣoro pẹlu esi fa fifalẹ idagbasoke, nitorinaa a gbiyanju lati pese bi ko o ati alaye alaye nipa PR kọọkan ati kọ bi o ti ṣee. A bẹrẹ pẹlu awọn asọye ni Bitbucket si PR, nfihan iru itumọ ti kuna ati idi, ati kọ awọn ifiranṣẹ ifọkansi ni Slack. Ni ipari, a ṣẹda dasibodu PR kan fun oju-iwe pẹlu atokọ ti gbogbo awọn itumọ ti o nṣiṣẹ lọwọlọwọ ati ipo wọn: ti o wa ni ila, nṣiṣẹ, kọlu tabi ti pari. O le tẹ lori kọ ati gba si awọn oniwe-log.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Ọsẹ mẹfa ni a lo lori esi alaye.

Awọn eto

Jẹ ki a lọ si itan aipẹ. Lẹhin ti yanju ọrọ esi, a de ipele tuntun - a pinnu lati kọ oko emulator tiwa. Nigbati ọpọlọpọ awọn idanwo ati awọn emulators wa, wọn nira lati ṣakoso. Bi abajade, gbogbo awọn emulators wa gbe lọ si iṣupọ k8s pẹlu iṣakoso awọn orisun to rọ.

Ni afikun, awọn eto miiran wa.

  • Pada Lint (ati awọn miiran aimi onínọmbà). A ti n ṣiṣẹ tẹlẹ ni itọsọna yii.
  • Ṣiṣe ohun gbogbo lori PR blocker opin-si-opin igbeyewo lori gbogbo SDK awọn ẹya.

Nitorinaa, a ti tọpa itan-akọọlẹ ti idagbasoke ti Integration Ilọsiwaju ni Avito. Bayi Mo fẹ lati fun imọran diẹ lati oju-ọna ti o ni iriri.

Awọn italologo

Ti MO ba le fun imọran kan nikan yoo jẹ eyi:

Jọwọ ṣọra pẹlu awọn iwe afọwọkọ ikarahun!

Bash jẹ ohun elo ti o rọ pupọ ati agbara, o rọrun pupọ ati yara lati kọ awọn iwe afọwọkọ. Ṣugbọn o le ṣubu sinu ẹgẹ pẹlu rẹ, ati, laanu, a ṣubu sinu rẹ.

Gbogbo rẹ bẹrẹ pẹlu awọn iwe afọwọkọ ti o rọrun ti o ṣiṣẹ lori awọn ẹrọ kikọ wa:

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

Ṣugbọn, bi o ṣe mọ, ohun gbogbo ndagba ati di idiju diẹ sii ju akoko lọ - jẹ ki a ṣiṣẹ iwe afọwọkọ kan lati ọdọ miiran, jẹ ki a kọja diẹ ninu awọn paramita nibẹ - ni ipari a ni lati kọ iṣẹ kan ti o pinnu ni ipele wo ti itẹ-ẹiyẹ bash ti a wa ni aṣẹ ni bayi. lati fi awọn agbasọ pataki sii, lati jẹ ki gbogbo rẹ bẹrẹ.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

O le fojuinu awọn idiyele iṣẹ fun idagbasoke iru awọn iwe afọwọkọ. Mo gba ọ ni imọran lati maṣe ṣubu sinu ẹgẹ yii.

Kini o le paarọ rẹ?

  • Eyikeyi ede kikọ. Kọ si Python tabi Kotlin Script diẹ rọrun nitori pe o jẹ siseto, kii ṣe awọn iwe afọwọkọ.
  • Tabi se apejuwe gbogbo awọn Kọ kannaa ni awọn fọọmu Aṣa gradle awọn iṣẹ-ṣiṣe fun ise agbese rẹ.

A pinnu lati yan aṣayan keji, ati ni bayi a n paarẹ gbogbo awọn iwe afọwọkọ bash ati kikọ ọpọlọpọ awọn iṣẹ ṣiṣe gradle aṣa.

Imọran #2: Itaja amayederun ni koodu.

O rọrun nigbati Eto Integration Ilọsiwaju ti wa ni ipamọ kii ṣe ni wiwo UI ti Jenkins tabi TeamCity, ati bẹbẹ lọ, ṣugbọn ni irisi awọn faili ọrọ taara ni ibi ipamọ iṣẹ akanṣe. Eleyi yoo fun versionability. Kii yoo nira lati yi pada tabi kọ koodu si ẹka miiran.

Awọn iwe afọwọkọ le wa ni ipamọ ninu iṣẹ akanṣe kan. Kini lati ṣe pẹlu ayika?

Imọran #3: Docker le ṣe iranlọwọ pẹlu agbegbe naa.

O dajudaju yoo ṣe iranlọwọ fun awọn olupilẹṣẹ Android; iOS ko ni ọkan sibẹsibẹ, laanu.

Eyi jẹ apẹẹrẹ ti faili docker kan ti o ni jdk ati android-sdk ninu:

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

Lẹhin ti o ti kọ faili Docker yii (Emi yoo sọ fun ọ aṣiri kan, iwọ ko ni lati kọ, ṣugbọn kan fa ti o ti ṣetan lati GitHub) ati pejọ aworan naa, o gba ẹrọ foju kan eyiti o le kọ ohun elo naa ati ṣiṣe awọn idanwo Junit.

Awọn idi akọkọ meji ti idi eyi jẹ oye ni iwọn ati atunṣe. Lilo docker, o le yara gbe awọn aṣoju kọ mejila kan ti yoo ni agbegbe kanna bi ti iṣaaju. Eyi jẹ ki igbesi aye awọn onimọ-ẹrọ CI rọrun pupọ. O rọrun pupọ lati Titari android-sdk sinu docker, ṣugbọn pẹlu awọn emulators o nira diẹ sii: iwọ yoo ni lati ṣiṣẹ diẹ sii (tabi ṣe igbasilẹ eyi ti o pari lati GitHub lẹẹkansi).

Imọran No.. 4: maṣe gbagbe pe awọn ayẹwo ko ṣe fun awọn ayẹwo, ṣugbọn fun awọn eniyan.

Ni iyara ati, pataki julọ, awọn esi ti o han gbangba jẹ pataki pupọ fun awọn olupilẹṣẹ: kini bu, idanwo wo ni kuna, nibo ni MO le rii ile-itumọ naa.

Imọran #5: Jẹ adaṣe nigbati o ba ndagba Integration Tesiwaju.

Ni oye kedere iru awọn aṣiṣe wo ni o fẹ ṣe idiwọ, iye awọn orisun, akoko, ati akoko kọnputa ti o fẹ lati lo. Awọn sọwedowo ti o gun ju le, fun apẹẹrẹ, sun siwaju moju. Ati awọn ti wọn ti ko mu awọn aṣiṣe pataki pupọ yẹ ki o kọ silẹ patapata.

Imọran #6: Lo awọn irinṣẹ ti a ṣe.

Ọpọlọpọ awọn ile-iṣẹ wa ni bayi ti o pese awọsanma CI.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

Eyi jẹ ojutu ti o dara fun awọn ẹgbẹ kekere. O ko nilo lati ṣe atilẹyin ohunkohun, kan san owo diẹ, kọ ohun elo rẹ ati paapaa ṣiṣe awọn idanwo ohun elo.

Imọran #7: Ni ẹgbẹ nla kan, awọn ojutu inu ile jẹ ere diẹ sii.

Ṣugbọn pẹ tabi ya, bi ẹgbẹ naa ti n dagba, awọn solusan inu ile yoo di ere diẹ sii. Iṣoro kan wa pẹlu awọn ipinnu wọnyi. Ofin kan wa ti idinku awọn ipadabọ ni eto-ọrọ aje: ni eyikeyi iṣẹ akanṣe, ilọsiwaju kọọkan ti o tẹle jẹ diẹ sii ati nira sii ati pe o nilo idoko-owo siwaju ati siwaju sii.

Iṣowo ṣe apejuwe gbogbo igbesi aye wa, pẹlu Isọpọ Ilọsiwaju. Mo kọ iṣeto kan ti awọn idiyele iṣẹ fun ipele kọọkan ti idagbasoke ti Integration Ilọsiwaju wa.

Itankalẹ ti CI ninu ẹgbẹ idagbasoke alagbeka

O han gbangba pe eyikeyi ilọsiwaju ti n di pupọ ati siwaju sii nira. Wiwo aworan yii, o le loye pe Ijọpọ Ilọsiwaju nilo lati ni idagbasoke ni ibamu pẹlu idagba ti iwọn ẹgbẹ. Fun ẹgbẹ kan ti eniyan meji, lilo awọn ọjọ 50 ni idagbasoke oko emulator inu jẹ imọran alabọde. Ṣugbọn ni akoko kanna, fun ẹgbẹ nla kan, kii ṣe Integration Ilọsiwaju ni gbogbo tun jẹ ero buburu, nitori awọn iṣoro iṣọpọ, atunṣe ibaraẹnisọrọ, ati bẹbẹ lọ. o yoo gba ani diẹ akoko.

A bẹrẹ pẹlu imọran pe a nilo adaṣe nitori pe eniyan jẹ gbowolori, wọn ṣe awọn aṣiṣe ati ọlẹ. Ṣugbọn awọn eniyan tun ṣe adaṣe. Nitorinaa, gbogbo awọn iṣoro kanna lo si adaṣe.

  • Adaṣiṣẹ jẹ gbowolori. Ranti iṣeto iṣẹ.
  • Nigbati o ba de si adaṣe, eniyan ṣe awọn aṣiṣe.
  • Nigba miiran o jẹ ọlẹ pupọ lati ṣe adaṣe, nitori ohun gbogbo n ṣiṣẹ ni ọna yẹn. Kini idi ti ohunkohun miiran ṣe dara si, kilode ti gbogbo Integration Tesiwaju yii?

Ṣugbọn Mo ni awọn iṣiro: awọn aṣiṣe ni a mu ni 20% ti awọn apejọ. Ati pe eyi kii ṣe nitori awọn olupilẹṣẹ wa kọ koodu ti ko dara. Eyi jẹ nitori awọn olupilẹṣẹ ni igboya pe ti wọn ba ṣe aṣiṣe diẹ, kii yoo pari ni idagbasoke, yoo mu nipasẹ awọn sọwedowo adaṣe. Nitorinaa, awọn olupilẹṣẹ le lo akoko diẹ sii kikọ koodu ati awọn nkan ti o nifẹ, dipo ṣiṣe ati idanwo ohunkan ni agbegbe.

Ṣaṣeṣe Iṣọkan Ilọsiwaju. Sugbon ni iwọntunwọnsi.

Nipa ọna, Nikolai Nesterov ko fun awọn iroyin nla nikan funrararẹ, ṣugbọn tun jẹ ọmọ ẹgbẹ ti igbimọ eto naa AppsConf ó sì ń ran àwọn ẹlòmíràn lọ́wọ́ láti múra àwọn ọ̀rọ̀ tí ó nítumọ̀ sílẹ̀ fún ọ. Ipari ati iwulo ti eto apejọ atẹle ni a le ṣe ayẹwo nipasẹ awọn akọle inu iṣeto. Ati fun awọn alaye, wa si Infospace ni Oṣu Kẹrin Ọjọ 22-23.

orisun: www.habr.com

Fi ọrọìwòye kun