Evolution ya CI mu gulu lachitukuko cha mafoni

Masiku ano, mapulogalamu ambiri a mapulogalamu amapangidwa m'magulu. Mikhalidwe ya chitukuko cha timu yopambana ikhoza kuyimiridwa mwa mawonekedwe osavuta.

Evolution ya CI mu gulu lachitukuko cha mafoni

Mukalemba khodi yanu, muyenera kutsimikizira kuti:

  1. Ntchito.
  2. Sichiphwanya chilichonse, kuphatikizapo code yomwe anzanu adalemba.

Ngati zonse zikwaniritsidwa, ndiye kuti muli panjira yopita kuchipambano. Kuti tiyang'ane mosavuta mikhalidwe iyi komanso osapatuka panjira yopindulitsa, tinabwera ndi Continuous Integration.

CI ndi kayendedwe ka ntchito komwe mumaphatikizira khodi yanu muzogulitsa zonse nthawi zambiri momwe mungathere. Ndipo simungophatikizana, komanso fufuzani nthawi zonse kuti zonse zikuyenda bwino. Popeza muyenera kuyang'ana zambiri komanso nthawi zambiri, ndikofunikira kuganizira za automation. Mutha kuyang'ana chilichonse pamanja, koma simuyenera, ndipo ndichifukwa chake.

  • Anthu okondedwa. Ola la ntchito ya aliyense wopanga mapulogalamu ndi okwera mtengo kuposa ola la ntchito ya seva iliyonse.
  • Anthu amalakwitsa. Chifukwa chake, zinthu zitha kuchitika pomwe mayeso adayesedwa panthambi yolakwika kapena kudzipereka kolakwika kudapangidwa kuti oyesa.
  • Anthu ndi aulesi. Nthaŵi ndi nthaŵi, ndikamaliza ntchito inayake, pamakhala funso lakuti: “Kodi n’chiyani chingayang’ane? Ndinalemba mizere iwiri - zonse zimagwira ntchito! Ndikuganiza kuti ena a inunso nthawi zina mumakhala ndi malingaliro otere. Koma muyenera kufufuza nthawi zonse.

Momwe Continuous Integration idakhazikitsidwa ndikukhazikitsidwa mu gulu lachitukuko cha mafoni a Avito, momwe adachokera ku 0 mpaka 450 zomanga patsiku, komanso makina omanga amasonkhanitsa maola 200 patsiku, akutero Nikolai Nesterov (inesterov) ndiwotenga nawo gawo pazosintha zonse za CI/CD Android application.

Nkhaniyi imachokera pa chitsanzo cha lamulo la Android, koma njira zambiri zimagwiranso ntchito pa iOS.


Kalekale, munthu mmodzi ankagwira ntchito mu gulu Avito Android. Mwa kutanthauzira, sanafune chilichonse kuchokera ku Continuous Integration: panalibe wina woti agwirizane naye.

Koma ntchitoyo idakula, ntchito zatsopano zidawonekera, ndipo gululo lidakula molingana. Panthawi ina, ndi nthawi yoti mukhazikitse ndondomeko yophatikiza ma code. Zinasankhidwa kugwiritsa ntchito Git flow.

Evolution ya CI mu gulu lachitukuko cha mafoni

Lingaliro la kutuluka kwa Git ndi lodziwika bwino: pulojekiti imakhala ndi nthambi imodzi yodziwika bwino, ndipo pachinthu chilichonse chatsopano, opanga amadula nthambi ina, kudzipereka, kukankhira, ndipo akafuna kuphatikiza ma code awo munthambi yotukuka, tsegulani a. kukoka pempho. Kuti tigawane chidziwitso ndikukambirana njira, tidayambitsa kuwunika kwa ma code, ndiko kuti, ogwira nawo ntchito ayenera kuyang'ana ndikutsimikizirana wina ndi mnzake.

Macheke

Kuwona kachidindo ndi maso ndikozizira, koma sikukwanira. Chifukwa chake, macheke odziwikiratu akuyambitsidwa.

  • Choyamba, timayang'ana Msonkhano wa ARK.
  • zambiri Junit mayeso.
  • Timaganizira za kufalikira kwa code, popeza tikuyesa mayeso.

Kuti timvetsetse momwe macheke awa amayenera kuyendetsedwa, tiyeni tiwone njira yachitukuko ku Avito.

Ikhoza kuyimiridwa mwadongosolo motere:

  • Wopanga mapulogalamu amalemba code pa laputopu yake. Mutha kuyendetsa macheke ophatikiza pomwe pano - mwina ndi ndowe, kapena kungoyang'ana kumbuyo.
  • Wopangayo akakankhira kachidindo, amatsegula pempho kukoka. Kuti kachidindo kake kaphatikizidwe munthambi yotukuka, ndikofunikira kuti mudutse kuwunikiranso ndikusonkhanitsa zidziwitso zofunikira. Mutha kuloleza macheke ndikumanga apa: mpaka zomanga zonse zikuyenda bwino, pempho la kukoka silingaphatikizidwe.
  • Pambuyo pempho lachikoka likuphatikizidwa ndipo code ikuphatikizidwa mu chitukuko, mukhoza kusankha nthawi yabwino: mwachitsanzo, usiku, pamene ma seva onse ali omasuka, ndikuyendetsa macheke ambiri momwe mukufunira.

Palibe amene ankakonda kuyendetsa masikani pa laputopu yawo. Wopanga mapulogalamu akamaliza ntchito, amafuna kukankhira mwachangu ndikutsegula pempho kukoka. Ngati pakali pano macheke ataliatali akhazikitsidwa, izi sizongosangalatsa, komanso zimachepetsa chitukuko: pomwe laputopu ikuyang'ana china chake, sikutheka kugwira ntchito moyenera.

Tinkakonda kwambiri kuyendetsa macheke usiku, chifukwa pali nthawi yambiri ndi maseva, mutha kuyendayenda. Koma, mwatsoka, code ikayamba kukula, wopangayo amakhala ndi zolimbikitsa zochepa kuti akonze zolakwika zomwe CI idapeza. Nthawi ndi nthawi ndinadzigwira ndikuganiza pamene ndinayang'ana zolakwika zonse zomwe zinapezeka m'mawa lipoti kuti ndidzazikonza tsiku lina, chifukwa tsopano pali ntchito yatsopano yabwino ku Jira yomwe ndikungofuna kuti ndiyambe kuchita.

Ngati macheke atsekereza pempho lachikoka, ndiye kuti pali chilimbikitso chokwanira, chifukwa mpaka zomangazo zitakhala zobiriwira, kachidindo sikadzayamba, zomwe zikutanthauza kuti ntchitoyo siyimalizidwa.

Chotsatira chake, tinasankha njira yotsatirayi: timayendetsa macheke ochuluka kwambiri usiku, ndikuyambitsa zovuta kwambiri ndipo, chofunika kwambiri, zothamanga kwambiri pa pempho lachikoka. Koma sitimayima pamenepo-mofanana, timakulitsa liwiro la macheke kuti tiwasunthe kuchokera kumayendedwe ausiku kuti akoke zopempha.

Panthawiyo, zomanga zathu zonse zidamalizidwa mwachangu, chifukwa chake tidangophatikiza zomanga za ARK, mayeso a Junit ndi mawerengero owerengera ngati chotchinga chofuna kukokera. Tinayatsa, kuganiza za izo, ndikusiya kufalitsa ma code chifukwa timaganiza kuti sitikuzifuna.

Zinatitengera masiku awiri kuti tikhazikitse CI yofunikira (pambuyo pake kuyerekeza kwa nthawi ndikokwanira, kofunikira pakukula).

Pambuyo pake, tinayamba kuganiza mozama - kodi tikuyang'ana molondola? Kodi tikuchita zomanga pazofunsira zokoka molondola?

Tidayamba ntchito yomaliza panthambi pomwe pempho la kukoka kudatsegulidwa. Koma kuyesedwa kwa izi kungangowonetsa kuti code yomwe wopangayo adalemba imagwira ntchito. Koma samatsimikizira kuti sanathyole kalikonse. M'malo mwake, muyenera kuyang'ana mkhalidwe wa nthambi yotukuka pambuyo pophatikizidwa.

Evolution ya CI mu gulu lachitukuko cha mafoni

Kuti tichite izi, tinalemba bash script yosavuta premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Apa zosintha zonse zaposachedwa kwambiri zimakokedwa ndikuphatikizidwa munthambi yomwe ilipo. Tidawonjezera premerge.sh script ngati gawo loyamba pazomanga zonse ndikuyamba kuyang'ana ndendende zomwe tikufuna, ndiye. kuphatikiza.

Zinatenga masiku atatu kuti vutoli lipezeke, kupeza yankho, ndi kulemba izi.

Ntchito idapangidwa, ntchito zambiri zidawonekera, gululo lidakula, ndipo premerge.sh nthawi zina idayamba kutikhumudwitsa. Kupanga kunali ndi zosintha zotsutsana zomwe zidasokoneza kumanga.

Chitsanzo cha momwe izi zimachitikira:

Evolution ya CI mu gulu lachitukuko cha mafoni

Madivelopa awiri nthawi imodzi akuyamba kugwira ntchito pazinthu A ndi B. Wopanga mawonekedwe A amapeza chinthu chomwe sichinagwiritsidwe ntchito answer() ndipo, monga mkautsi wabwino wachinyamata, amachichotsa. Nthawi yomweyo, wopanga mawonekedwe B amawonjezera kuyimba kwatsopano pantchitoyi munthambi yake.

Madivelopa amamaliza ntchito yawo ndikutsegula pempho lachikoka nthawi yomweyo. Zomangazo zakhazikitsidwa, premerge.sh imayang'ana zopempha zonse zokoka za dziko laposachedwa - macheke onse ndi obiriwira. Pambuyo pake, pempho lachikoka la gawo A likuphatikizidwa, pempho la kukoka kwa gawo B likuphatikizidwa... Boom! Pangani zopumira chifukwa code yokulitsa imakhala ndi kuyimbira ku ntchito yomwe palibe.

Evolution ya CI mu gulu lachitukuko cha mafoni

Pamene sichidzakula, ndizo tsoka la m'deralo. Gulu lonse silingatole chilichonse ndikutumiza kuti chiyesedwe.

Zidachitika kuti nthawi zambiri ndimagwira ntchito zomanga: ma analytics, network, database. Ndiye kuti, ndine amene ndinalemba ntchito ndi makalasi omwe opanga ena amagwiritsa ntchito. Chifukwa cha zimenezi, nthawi zambiri ndinkakumana ndi zinthu ngati zimenezi. Ndinakhala ndi chithunzi ichi chipachikidwa kwakanthawi.

Evolution ya CI mu gulu lachitukuko cha mafoni

Popeza izi sizinatigwirizane ndi ife, tinayamba kufufuza njira zomwe tingapewere izi.

Osati kuswa chitukuko

Njira yoyamba: panganinso zopempha zonse zokoka pamene kukonzanso kukukula. Ngati, m'chitsanzo chathu, pempho lachikoka lomwe lili ndi gawo A ndiloyamba kuphatikizidwa, pempho la kukoka kwa gawo B lidzamangidwanso, ndipo, motere, macheke adzalephera chifukwa cha cholakwika chophatikiza.

Kuti mumvetse kuti izi zidzatenga nthawi yayitali bwanji, taganizirani chitsanzo cha ma PR awiri. Timatsegula ma PR awiri: zomanga ziwiri, macheke awiri. Pambuyo pophatikizana koyamba ndi PR, yachiwiri iyenera kumangidwanso. Pazonse, ma PR awiri amafunikira macheke atatu: 2 + 1 = 3.

M'malo mwake, ndizabwino. Koma tidayang'ana ziwerengerozo, ndipo momwe zinthu ziliri mu gulu lathu zinali zotseguka 10, ndiyeno kuchuluka kwa macheke ndi kuchuluka kwa zomwe zikuchitika: 10 + 9 +... + 1 = 55. Ndiko kuti, kuvomereza 10 PRs, muyenera kumanganso nthawi 55. Ndipo izi zili bwino, pamene macheke onse adutsa nthawi yoyamba, pamene palibe amene amatsegula pempho lina lowonjezera pamene khumi ndi awiriwa akukonzedwa.

Tangoganizani nokha ngati wopanga mapulogalamu omwe akuyenera kukhala woyamba kudina batani la "kuphatikiza", chifukwa ngati woyandikana nawo achita izi, ndiye kuti muyenera kuyembekezera mpaka zomanga zonse zidutsenso ... Ayi, sizingagwire ntchito. , zidzachedwetsa kwambiri chitukuko.

Njira Yachiwiri: sonkhanitsani zopempha zokoka pambuyo pakuwunika kwa code. Ndiko kuti, mumatsegula pempho lachikoka, sonkhanitsani chiwerengero chovomerezeka cha ogwira nawo ntchito, kukonza zomwe zikufunika, ndikuyambitsanso kumanga. Ngati zikuyenda bwino, pempho lachikoka limaphatikizidwa ndikukula. Pankhaniyi, palibe kuyambiranso kwina, koma mayankho amachepetsedwa kwambiri. Monga wopanga mapulogalamu, ndikatsegula pempho lachikoka, nthawi yomweyo ndikufuna kuwona ngati ikugwira ntchito. Mwachitsanzo, ngati mayeso akulephera, muyenera kukonza mwamsanga. Pankhani yomangidwa mochedwa, mayankho amachepetsa, choncho chitukuko chonsecho. Izi sizinatikomere ifenso.

Zotsatira zake, njira yachitatu yokha idatsala - njinga. Khodi yathu yonse, magwero athu onse amasungidwa munkhokwe pa seva ya Bitbucket. Chifukwa chake, tidayenera kupanga pulogalamu yowonjezera ya Bitbucket.

Evolution ya CI mu gulu lachitukuko cha mafoni

Pulogalamu yowonjezera iyi imaposa njira yolumikizira kukoka. Chiyambi ndi chokhazikika: PR imatsegulidwa, misonkhano yonse imayambitsidwa, kuwunika kwa code kumatsirizika. Koma kuwunika kwa kachidindo kukamalizidwa ndipo wopangayo asankha kudina "kuphatikiza", pulogalamu yowonjezera imayang'ana momwe macheke adayendetsedwa. Ngati chitukuko chasinthidwa pambuyo pomanga, pulogalamu yowonjezerayo singalole kuti pempho lotereli liphatikizidwe munthambi yayikulu. Ingoyambitsanso zomanga zaposachedwa kwambiri.

Evolution ya CI mu gulu lachitukuko cha mafoni

Muchitsanzo chathu chokhala ndi zosintha zosemphana, zomanga zoterezi zidzalephera chifukwa cha cholakwika chophatikiza. Chifukwa chake, wopanga mawonekedwe B adzayenera kukonza kachidindoyo, kuyambitsanso macheke, ndiye kuti pulogalamu yowonjezerayo imangogwiritsa ntchito pempholi.

Tisanagwiritse ntchito pulogalamu yowonjezerayi, tidawerengera maulendo 2,7 pa pempho lililonse. Ndi pulogalamu yowonjezera panali 3,6 anayambitsa. Izi zinatiyenerera.

Ndizofunikira kudziwa kuti plugin iyi ili ndi zovuta zake: imangoyambitsanso kumanga kamodzi. Ndiko kuti, pali zenera laling'ono lomwe kusintha kosagwirizana kungalowemo. Koma mwayi wa izi ndi wochepa, ndipo tidapanga malondawa pakati pa chiwerengero cha zoyambira ndi mwayi wolephera. M’zaka ziŵiri inangowombera kamodzi kokha, kotero kuti mwina sizinapite pachabe.

Zinatitengera milungu iwiri kuti tilembe mtundu woyamba wa pulogalamu yowonjezera ya Bitbucket.

Macheke atsopano

Panthawiyi, gulu lathu likupitiriza kukula. Macheke atsopano awonjezedwa.

Tinaganiza kuti: bwanji kupanga zolakwa ngati zingathe kupewedwa? Ndi chifukwa chake adakwaniritsa static code analysis. Tinayamba ndi lint, yomwe ili mu Android SDK. Koma panthawiyo sankadziwa momwe angagwiritsire ntchito ndi code ya Kotlin, ndipo tinali ndi 75% ya ntchito yolembedwa ku Kotlin. Chifukwa chake, zomangidwa mkati zidawonjezeredwa ku lint Macheke a Android Studio.

Kuti tichite izi, tidayenera kuchita zopotoka zambiri: tengani Android Studio, yikani ku Docker ndikuyendetsa pa CI ndi chowunikira, kuti iganize kuti ikuyenda pa laputopu yeniyeni. Koma zinathandiza.

Pa nthawiyi ndi pamene tinayamba kulemba zambiri mayeso a zida ndi kukhazikitsidwa kuyesa kwa skrini. Apa ndipamene chithunzi chowonetsera chimapangidwa kuti chiwonedwe chaching'ono, ndipo kuyesa kumakhala kutenga chithunzithunzi kuchokera pakuwona ndikuchifanizitsa ndi pixel yolunjika ndi pixel. Ngati pali kusiyana, zikutanthauza kuti masanjidwewo alakwika penapake kapena kuti masitayelo ake alakwika.

Koma kuyesa kwa zida ndi zoyeserera pazithunzi ziyenera kuyendetsedwa pazida: pa emulators kapena pazida zenizeni. Poganizira kuti pali mayesero ambiri ndipo amayendetsedwa pafupipafupi, famu yonse ikufunika. Kuyambitsa famu yanu ndizovuta kwambiri, choncho tapeza njira yokonzekera - Firebase Test Lab.

Firebase Test Lab

Idasankhidwa chifukwa Firebase ndi chida cha Google, kutanthauza kuti iyenera kukhala yodalirika komanso yosatheka kufa. Mitengo ndi yololera: $ 5 pa ola la ntchito ya chipangizo chenicheni, 1 $ pa ola la ntchito ya emulator.

Zinatenga pafupifupi milungu itatu kukhazikitsa Firebase Test Lab mu CI yathu.

Koma gululi lidapitilira kukula, ndipo Firebase, mwatsoka, idayamba kutigwetsa pansi. Panthawi imeneyo, analibe SLA iliyonse. Nthawi zina Firebase idatipangitsa kudikirira mpaka zida zofunikira zidakhala zaulere kuti ziyesedwe, ndipo sitinayambe kuzipanga nthawi yomweyo, momwe timafunira. Kudikirira pamzere kunatenga theka la ola, yomwe ndi nthawi yayitali kwambiri. Mayeso a zida adayendetsedwa pa PR iliyonse, kuchedwa kunachedwetsa chitukuko, ndiyeno bilu ya pamwezi idabwera ndi ndalama zozungulira. Nthawi zambiri, adaganiza zosiya Firebase ndikugwira ntchito m'nyumba, popeza gululo linali litakula mokwanira.

Docker + Python + bash

Tidatenga Docker, oyika ma emulators momwemo, adalemba pulogalamu yosavuta ku Python, yomwe panthawi yoyenera imabweretsa kuchuluka kwa emulators mumtundu wofunikira ndikuyimitsa pakafunika. Ndipo, zowona, zolemba zingapo za bash - tikadakhala kuti popanda iwo?

Zinatenga masabata asanu kuti tipange malo athu oyesera.

Zotsatira zake, pa pempho lililonse lachikoka panali mndandanda wambiri woletsa macheke:

  • msonkhano wa ARK;
  • Mayeso a Junit;
  • Lint;
  • macheke a Android Studio;
  • Mayeso a zida;
  • Mayeso azithunzi.

Izi zinalepheretsa kuwonongeka kwa zinthu zambiri. Mwaukadaulo zonse zidayenda bwino, koma opanga adadandaula kuti kudikirira zotsatira kunali kotalika kwambiri.

Ndi nthawi yayitali bwanji? Tinakweza deta kuchokera ku Bitbucket ndi TeamCity mu dongosolo lowunikira ndipo tinazindikira kuti nthawi yodikira mphindi 45. Ndiko kuti, wopanga mapulogalamu, akatsegula pempho lachikoka, amadikirira pafupifupi mphindi 45 pazotsatira zomanga. Malingaliro anga, izi ndizochuluka, ndipo simungathe kugwira ntchito monga choncho.

Inde, tinaganiza zofulumizitsa zomanga zathu zonse.

Tiyeni tifulumire

Kuwona kuti zomanga nthawi zambiri zimayima pamzere, chinthu choyamba chomwe timachita ndi adagula zida zambiri - chitukuko chachikulu ndichosavuta. Zomangamanga zidasiya kuima pamzere, koma nthawi yodikirira idatsika pang'ono, chifukwa macheke ena adatenga nthawi yayitali kwambiri.

Kuchotsa macheke omwe amatenga nthawi yayitali

Kuphatikizika kwathu kosalekeza kumatha kuthana ndi zolakwika ndi zovuta izi.

  • Osapita. CI imatha kugwira cholakwika chophatikiza pomwe china chake sichimangika chifukwa chakusintha kosagwirizana. Monga ndanenera kale, ndiye kuti palibe amene angasonkhanitse chilichonse, chitukuko chimayima, ndipo aliyense amachita mantha.
  • Bug mu khalidwe. Mwachitsanzo, pulogalamuyo ikamangidwa, koma imawonongeka mukasindikiza batani, kapena batani silimakanizidwa konse. Izi ndizoyipa chifukwa cholakwika choterechi chimatha kufikira wogwiritsa ntchito.
  • Bug mu masanjidwe. Mwachitsanzo, batani ladina, koma lasuntha ma pixel 10 kumanzere.
  • Kuwonjezeka kwa ngongole zaukadaulo.

Titatha kuyang'ana mndandandawu, tazindikira kuti mfundo ziwiri zokha ndizofunika kwambiri. Timafuna kugwira kaye mavuto ngati amenewa. Ziphuphu zomwe zili pamasanjidwewo zimapezedwa powunikiranso kapangidwe kake ndipo zitha kukonzedwa mosavuta pamenepo. Kuchita ndi ngongole yaukadaulo kumafuna njira yosiyana ndi kukonzekera, kotero tinaganiza kuti tisayese pa pempho lachikoka.

Kutengera ndi gulu ili, tidagwedeza mndandanda wonse wamacheke. Anadutsa Lint ndipo anachedwetsa kukhazikitsidwa kwake usiku wonse: kuti apereke lipoti la kuchuluka kwa mavuto omwe analipo pantchitoyo. Tinavomera kugwira ntchito mosiyana ndi ngongole yaukadaulo, ndi Macheke a Android Studio adasiyidwa kwathunthu. Android Studio ku Docker yoyendera ikuwoneka yosangalatsa, koma imayambitsa mavuto ambiri pothandizira. Kusintha kulikonse kwamitundu ya Android Studio kumatanthauza kulimbana ndi nsikidzi zosamvetsetseka. Zinalinso zovuta kuthandizira kuyesedwa kwazithunzi, chifukwa laibulaleyo sinali yokhazikika kwambiri ndipo panali zolakwika zabodza. Mayeso azithunzi achotsedwa pamndandanda.

Chifukwa chake, tatsala ndi:

  • msonkhano wa ARK;
  • Mayeso a Junit;
  • Mayeso a zida.

Cache yakutali ya Gradle

Popanda macheke olemera, zonse zidakhala bwino. Koma palibe malire a ungwiro!

Ntchito yathu idagawika kale kukhala ma module pafupifupi 150. Cache yakutali ya Gradle nthawi zambiri imagwira ntchito bwino pankhaniyi, chifukwa chake tidaganiza zoyesera.

Cache yakutali ya Gradle ndi ntchito yomwe imatha kusunga zinthu zakale zapayekha pama module. Gradle, m'malo molemba code, amagwiritsa ntchito HTTP kugogoda pa cache yakutali ndikufunsa ngati wina wachita kale ntchitoyi. Ngati inde, zimangotsitsa zotsatira.

Kuthamanga kwakutali kwa Gradle cache ndikosavuta chifukwa Gradle imapereka chithunzi cha Docker. Tinakwanitsa kuchita zimenezi m’maola atatu.

Zomwe mumayenera kuchita ndikuyambitsa Docker ndikulemba mzere umodzi pantchitoyo. Koma ngakhale itha kukhazikitsidwa mwachangu, zidzatenga nthawi yochuluka kuti chilichonse chiziyenda bwino.

Pansipa pali graph yomwe imaphonya posungira.

Evolution ya CI mu gulu lachitukuko cha mafoni

Pachiyambi choyamba, chiwerengero cha maphokoso a cache chinali pafupifupi 65. Pambuyo pa masabata atatu, tinatha kuonjezera mtengo uwu ku 20%. Zinapezeka kuti ntchito zomwe pulogalamu ya Android imasonkhanitsa zimakhala ndi zodalira zachilendo, chifukwa Gradle adaphonya posungira.

Mwa kulumikiza cache, tinafulumizitsa kwambiri kumanga. Koma kuwonjezera pa kusonkhana, palinso mayesero a zida, ndipo amatenga nthawi yaitali. Mwina si mayeso onse omwe amayenera kuyendetsedwa pazopempha zilizonse zokoka. Kuti tidziwe, timagwiritsa ntchito kusanthula kwamphamvu.

Kusanthula kwamphamvu

Pakupempha kukoka, timasonkhanitsa git diff ndikupeza ma module osinthidwa a Gradle.

Evolution ya CI mu gulu lachitukuko cha mafoni

Ndizomveka kungoyesa kuyesa zida zomwe zimayang'ana ma module osinthidwa ndi ma module onse omwe amadalira. Palibe chifukwa choyesa mayeso a ma module oyandikana nawo: kachidindo komweko sikunasinthe ndipo palibe chomwe chingaswe.

Mayesero a zida si ophweka, chifukwa ayenera kukhala mu gawo lapamwamba la Application. Tidagwiritsa ntchito ma heuristics ndi kusanthula kwa bytecode kuti timvetsetse kuti mayeso aliwonse ndi ake.

Kukweza magwiridwe antchito a zida zoyeserera kuti angoyesa ma module omwe akukhudzidwa adatenga pafupifupi milungu isanu ndi itatu.

Njira zofulumizitsa kuyendera zayenda bwino. Kuchokera maminiti a 45 tinapita ku 15. Zachilendo kale kudikirira kotala la ola kuti timangidwe.

Koma tsopano Madivelopa ayamba kudandaula kuti sakumvetsa zomwe zimamangidwa zomwe zikuyambitsidwa, komwe mungawone chipikacho, chifukwa chiyani kumangako kuli kofiira, mayeso omwe alephera, ndi zina zotero.

Evolution ya CI mu gulu lachitukuko cha mafoni

Mavuto ndi mayankho amachepetsa chitukuko, kotero tidayesetsa kupereka zambiri zomveka bwino komanso zatsatanetsatane za PR iliyonse ndikumanga momwe tingathere. Tinayamba ndi ndemanga mu Bitbucket ku PR, kusonyeza kuti kumanga kwalephera ndi chifukwa chiyani, ndipo tinalemba mauthenga omwe akuwongolera mu Slack. Pamapeto pake, tidapanga PR dashboard ya tsambali yokhala ndi mndandanda wazomanga zonse zomwe zikuyenda komanso momwe zilili: zokhala pamzere, kuthamanga, kugwa kapena kumalizidwa. Mutha kudina pakupanga ndikupita ku chipika chake.

Evolution ya CI mu gulu lachitukuko cha mafoni

Masabata asanu ndi limodzi adathera pakuyankha mwatsatanetsatane.

Mapulani

Tiyeni tipitirire ku mbiri yaposachedwa. Titathetsa vutolo, tidafika pamlingo winanso - tidaganiza zomanga famu yathuyathu. Pakakhala mayeso ambiri ndi emulators, zimakhala zovuta kuwongolera. Zotsatira zake, ma emulators athu onse adasamukira ku gulu la k8s lomwe lili ndi kasamalidwe kosinthika kazinthu.

Kuphatikiza apo, palinso mapulani ena.

  • Bwererani Lint (ndi kusanthula kwina kwina). Tikugwira ntchito kale mbali iyi.
  • Yendetsani chilichonse pa PR blocker mayeso omaliza pamitundu yonse ya SDK.

Kotero, tafufuza mbiri ya chitukuko cha Continuous Integration mu Avito. Tsopano ndikufuna kupereka upangiri kuchokera kwa odziwa zambiri.

Malangizo

Ndikadapereka upangiri umodzi wokha ungakhale uwu:

Chonde samalani ndi zolemba za zipolopolo!

Bash ndi chida chosinthika komanso champhamvu, ndichosavuta komanso chachangu kulemba zolemba. Koma mukhoza kugwera mumsampha ndi izo, ndipo, mwatsoka, tinagwera mu izo.

Zonse zidayamba ndi zolemba zosavuta zomwe zidayenda pamakina athu omanga:

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

Koma, monga mukudziwa, chilichonse chimakula ndipo chimakhala chovuta pakapita nthawi - tiyeni tiyendetse script imodzi kuchokera kwina, tidutse magawo ena - pamapeto pake tidayenera kulemba ntchito yomwe imatsimikizira kuti tili mulingo wanji wa bash nesting. kuyika zolemba zofunika, kuti zonse ziyambe.

Evolution ya CI mu gulu lachitukuko cha mafoni

Mutha kulingalira za ndalama zogwirira ntchito popanga zolemba zotere. Ndikukulangizani kuti musagwere mumsampha uwu.

Ndi chiyani chomwe chingalowe m'malo?

  • Chilankhulo chilichonse cholembera. Lembani ku Python kapena Kotlin Script yabwino chifukwa ndi pulogalamu, osati zolemba.
  • Kapena fotokozani malingaliro onse omanga mu mawonekedwe Zochita zolimbitsa thupi za polojekiti yanu.

Tidasankha kusankha njira yachiwiri, ndipo tsopano tikuchotsa mwadongosolo zolembedwa zonse za bash ndikulemba ntchito zambiri zama gradle.

Langizo #2: Sungani zomangamanga mu code.

Ndikoyenera pamene kusungidwa kwa Continuous Integration sikusungidwa mu mawonekedwe a UI a Jenkins kapena TeamCity, ndi zina zotero, koma mu mawonekedwe a mafayilo olembedwa mwachindunji muzosungiramo polojekiti. Izi zimapereka versionability. Sizidzakhala zovuta kubweza kapena kupanga khodi pa nthambi ina.

Zolemba zitha kusungidwa mu projekiti. Zoyenera kuchita ndi chilengedwe?

Langizo #3: Docker imatha kuthandiza ndi chilengedwe.

Idzathandizanso opanga Android; iOS ilibe, mwatsoka.

Ichi ndi chitsanzo cha fayilo yosavuta ya docker yomwe ili ndi jdk ndi 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

Nditalemba fayilo ya Docker iyi (ndikuuzani chinsinsi, simuyenera kuyilemba, koma kungoikoka yopangidwa kuchokera ku GitHub) ndikusonkhanitsa chithunzicho, mumapeza makina omwe mungapangirepo ntchito. ndikuyesa mayeso a Junit.

Zifukwa zazikulu ziwiri zomwe zimapangitsa izi kukhala zomveka ndi scalability ndi kubwerezabwereza. Pogwiritsa ntchito docker, mutha kukweza mwachangu othandizira khumi ndi awiri omwe azikhala ndi malo ofanana ndendende ndi am'mbuyomu. Izi zimapangitsa moyo wa mainjiniya a CI kukhala wosavuta. Ndizosavuta kukankhira android-sdk kukhala docker, koma ndi emulators ndizovuta kwambiri: muyenera kulimbikira pang'ono (kapena kutsitsanso yomalizidwa kuchokera ku GitHub).

Tip No. 4: musaiwale kuti kuyendera sikuchitidwa chifukwa choyendera, koma kwa anthu.

Mwachangu komanso, chofunikira kwambiri, mayankho omveka bwino ndi ofunikira kwambiri kwa opanga: zomwe zidasweka, ndi mayeso ati omwe adalephera, ndingawone kuti buildlog.

Langizo #5: Khalani pragmatic popanga Kuphatikiza Kupitilira.

Dziwani bwino kuti ndi zolakwika ziti zomwe mukufuna kupewa, kuchuluka kwa zinthu, nthawi, ndi nthawi yapakompyuta yomwe mukufuna kugwiritsa ntchito. Macheke omwe amatenga nthawi yayitali, mwachitsanzo, akhoza kuimitsidwa usiku wonse. Ndipo iwo omwe sagwira zolakwika zofunika kwambiri ayenera kusiyidwa kwathunthu.

Langizo #6: Gwiritsani ntchito zida zopangidwa kale.

Pali makampani ambiri tsopano omwe amapereka mtambo CI.

Evolution ya CI mu gulu lachitukuko cha mafoni

Ili ndi yankho labwino kwa magulu ang'onoang'ono. Simufunikanso kuthandizira kalikonse, ingolipirani ndalama zochepa, pangani pulogalamu yanu ndikuyesa kuyesa zida.

Langizo #7: Pagulu lalikulu, mayankho apanyumba amakhala opindulitsa kwambiri.

Koma posachedwa, pamene gulu likukula, zothetsera m'nyumba zidzakhala zopindulitsa kwambiri. Pali vuto limodzi ndi zosankhazi. Pali lamulo lochepetsa kubweza kwachuma muzachuma: mu projekiti iliyonse, kusintha kulikonse kotsatira kumakhala kovuta kwambiri ndipo kumafuna ndalama zambiri.

Economics imalongosola moyo wathu wonse, kuphatikizapo Continuous Integration. Ndinapanga ndondomeko ya ndalama zogwirira ntchito pa gawo lililonse la chitukuko cha Continuous Integration.

Evolution ya CI mu gulu lachitukuko cha mafoni

Zikuwonekeratu kuti kusintha kulikonse kukukulirakulira. Kuyang'ana pa graph iyi, mutha kumvetsetsa kuti Kuphatikizana Kopitilira kuyenera kupangidwa molingana ndi kukula kwa gulu. Kwa gulu la anthu awiri, kuthera masiku 50 ndikupanga famu ya emulator yamkati ndi lingaliro laling'ono. Koma panthawi imodzimodziyo, kwa gulu lalikulu, kusachita Continuous Integration konse ndi lingaliro loipa, chifukwa mavuto ophatikizana, kukonza kulankhulana, ndi zina zotero. zidzatenga nthawi yochulukirapo.

Tinayamba ndi lingaliro lakuti automation ikufunika chifukwa anthu ndi okwera mtengo, amalakwitsa komanso ndi aulesi. Koma anthu amangodzipangira okha. Chifukwa chake, zovuta zonse zomwezo zimagwiranso ntchito pa automation.

  • Makinawa ndi okwera mtengo. Kumbukirani ndondomeko ya ntchito.
  • Pankhani ya automation, anthu amalakwitsa.
  • Nthawi zina zimakhala zaulesi kwambiri kupanga makina, chifukwa zonse zimagwira ntchito choncho. Chifukwa chiyani kusintha china chilichonse, chifukwa chiyani kuphatikiza kopitilira muyeso uku?

Koma ndili ndi ziwerengero: zolakwika zimagwidwa mu 20% ya misonkhano. Ndipo izi sichifukwa choti opanga athu amalemba molakwika. Izi zili choncho chifukwa Madivelopa ali ndi chidaliro kuti ngati alakwitsa, sizidzakula, zimagwidwa ndi macheke odzichitira okha. Chifukwa chake, opanga amatha kuthera nthawi yambiri akulemba ma code ndi zinthu zosangalatsa, m'malo mothamanga ndikuyesa china chake kwanuko.

Yesetsani Kuphatikizira Mopitiriza. Koma pang'onopang'ono.

Mwa njira, Nikolai Nesterov osati amapereka malipoti lalikulu yekha, komanso membala wa komiti pulogalamu MapulogalamuConf ndi kuthandiza ena kukonzekera nkhani zomveka kwa inu. Kukwanira ndi kufunika kwa pulogalamu ya msonkhano wotsatira ikhoza kuyesedwa ndi mitu mu ndondomeko. Ndipo kuti mudziwe zambiri, bwerani ku Infospace pa Epulo 22-23.

Source: www.habr.com

Kuwonjezera ndemanga