Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

A yau, yawancin samfuran software ana haɓaka su cikin ƙungiyoyi. Za a iya wakilta sharuɗɗan ci gaban ƙungiyar masu nasara a cikin tsari mai sauƙi.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Da zarar kun rubuta lambar ku, kuna buƙatar tabbatar da shi:

  1. .Аботает.
  2. Ba ya karya komai, gami da lambar da abokan aikinku suka rubuta.

Idan duk sharuɗɗan biyu sun cika, to kuna kan hanyar samun nasara. Don bincika waɗannan sharuɗɗan cikin sauƙi kuma ba karkata daga hanyar riba ba, mun fito da Ci gaba da Haɗin kai.

CI gudanawar aiki ne inda zaku haɗa lambar ku cikin lambar samfur gabaɗaya sau da yawa kamar yadda zai yiwu. Kuma ba kawai ku haɗa kai ba, amma kuma ku duba kullun cewa duk abin yana aiki. Tun da kuna buƙatar bincika da yawa kuma sau da yawa, yana da daraja yin tunani game da aiki da kai. Kuna iya duba komai da hannu, amma bai kamata ba, kuma a nan ne dalilin da ya sa.

  • Ya ku mutane. Sa'a guda na aikin kowane mai tsara shirye-shirye ya fi tsada fiye da awa ɗaya na aikin kowane uwar garken.
  • Mutane suna yin kuskure. Don haka, yanayi na iya tasowa lokacin da aka gudanar da gwaje-gwaje akan reshe mara kyau ko kuma aka haɗa kuskuren ga masu gwadawa.
  • Mutane malalaci ne. Daga lokaci zuwa lokaci, sa’ad da na gama wani aiki, sai tunanin ya taso: “Me za a bincika? Na rubuta layi biyu - duk abin yana aiki! Ina tsammanin wasun ku ma wani lokaci suna da irin wannan tunanin. Amma yakamata ku duba.

Yadda aka aiwatar da Ci gaba da Haɗuwa da haɓakawa a cikin ƙungiyar haɓaka wayar hannu ta Avito, yadda suka tashi daga 0 zuwa 450 suna ginawa a kowace rana, kuma waɗanda ke yin injuna suna haɗa sa'o'i 200 a rana, in ji Nikolai Nesterov (nnesterov) ɗan takara ne a cikin duk canje-canjen juyin halitta na aikace-aikacen Android na CI/CD.

Labarin ya dogara ne akan misalin umarnin Android, amma yawancin hanyoyin suna aiki akan iOS kuma.


Da zarar wani lokaci, mutum ɗaya ya yi aiki a cikin ƙungiyar Avito Android. Ta hanyar ma'anar, bai buƙatar wani abu daga Ci gaba da Haɗuwa: babu wanda zai haɗawa da shi.

Amma aikace-aikacen ya girma, ƙarin sabbin ayyuka sun bayyana, kuma ƙungiyar ta girma daidai. A wani lokaci, lokaci ya yi da za a ƙara kafa tsarin haɗa lamba. An yanke shawarar yin amfani da kwararar Git.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Manufar Git kwarara sananne ne: aikin yana da reshe na ci gaba na gama gari, kuma ga kowane sabon fasali, masu haɓakawa suna yanke reshe daban, suna ƙaddamar da shi, turawa, kuma lokacin da suke son haɗa lambar su cikin reshen haɓaka, buɗe wani reshe. ja roƙon. Don raba ilimi da tattauna hanyoyin, mun gabatar da bita na lamba, wato, abokan aiki dole ne su bincika kuma su tabbatar da lambar juna.

Dubawa

Ganin code tare da idanunku yana da kyau, amma bai isa ba. Don haka, ana gabatar da cak ta atomatik.

  • Da farko, muna dubawa taron ARK.
  • Mai yawa Gwajin Junit.
  • Muna la'akari da ɗaukar hoto, tunda muna gudanar da gwaje-gwaje.

Don fahimtar yadda ya kamata a gudanar da waɗannan cak, bari mu dubi tsarin ci gaba a Avito.

Ana iya wakilta shi da tsari kamar haka:

  • Mai haɓakawa yana rubuta lamba akan kwamfutar tafi-da-gidanka. Kuna iya gudanar da cak ɗin haɗin kai a nan - ko dai tare da ƙugiya, ko kawai gudanar da cak a bango.
  • Bayan mai haɓakawa ya tura lambar, ya buɗe buƙatar ja. Domin shigar da lambar sa a cikin reshe mai tasowa, ya zama dole a shiga ta hanyar nazarin lambar kuma tattara adadin da ake buƙata na tabbatarwa. Kuna iya kunna bincike da ginawa anan: har sai duk abubuwan da aka gina sun yi nasara, ba za a iya haɗa buƙatun ja ba.
  • Bayan an haɗa buƙatun ja kuma an haɗa lambar a cikin haɓakawa, zaku iya zaɓar lokaci mai dacewa: alal misali, da dare, lokacin da duk sabobin ke da kyauta, kuma ku gudanar da bincike da yawa kamar yadda kuke so.

Babu wanda ya so yin scanning a kwamfutar tafi-da-gidanka. Lokacin da mai haɓakawa ya gama fasalin, yana so ya tura ta da sauri ya buɗe buƙatar ja. Idan a wannan lokacin an ƙaddamar da wasu dogon cak, wannan ba kawai ba mai daɗi ba ne, amma kuma yana rage saurin ci gaba: yayin da kwamfutar tafi-da-gidanka ke bincika wani abu, ba shi yiwuwa a yi aiki akai-akai akan shi.

Muna matukar son yin rajistan shiga da daddare, saboda akwai lokaci mai yawa da sabar, za ku iya yawo. Amma, abin takaici, lokacin da lambar fasalin ta haɓaka, mai haɓaka yana da ƙarancin kuzari don gyara kurakuran da CI ta samu. Nakan tsinci kaina lokaci-lokaci lokacin da na kalli duk kurakuran da aka samu a rahoton safiya cewa zan gyara su wata rana, domin yanzu akwai wani sabon aiki a Jira wanda kawai nake so in fara yi.

Idan binciken ya toshe buƙatun ja, to akwai isasshen kuzari, saboda har sai ginin ya zama kore, lambar ba za ta haɓaka ba, wanda ke nufin aikin ba zai ƙare ba.

A sakamakon haka, mun zaɓi dabarun da ke gaba: muna gudanar da mafi girman yiwuwar saiti na cak da dare, kuma muna ƙaddamar da mafi mahimmancin su kuma, mafi mahimmanci, mafi sauri akan buƙatun ja. Amma ba mu tsaya a can ba - a cikin layi daya, muna haɓaka saurin cak ta yadda za mu canza su daga yanayin dare don ja buƙatun buƙatun.

A wannan lokacin, an kammala duk abubuwan da muke ginawa cikin sauri, don haka kawai mun haɗa da ginin ARK, gwaje-gwajen Junit da ƙididdigar ɗaukar hoto azaman mai toshe buƙatun ja. Mun kunna shi, mun yi tunani game da shi, kuma muka watsar da ɗaukar hoto saboda muna tunanin cewa ba ma buƙatarsa.

Ya ɗauki mu kwana biyu don kafa cikakken tsarin CI na asali (nan gaba ƙimar lokaci shine kusan, da ake buƙata don sikelin).

Bayan haka, mun fara tunani mai zurfi - shin muna ma bincika daidai? Shin muna gudanar da gini akan buƙatun ja daidai?

Mun fara ginawa a kan ƙaddamarwa na ƙarshe na reshen da aka buɗe buƙatar ja. Amma gwaje-gwajen wannan ƙaddamarwa na iya nuna cewa lambar da mai haɓakawa ya rubuta tana aiki. Amma ba su tabbatar da cewa bai fasa komai ba. A zahiri, kuna buƙatar bincika yanayin reshen haɓakawa bayan an haɗa fasalin a cikinsa.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Don yin wannan, mun rubuta rubutun bash mai sauƙi premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Anan duk sabbin canje-canje daga haɓakawa ana cire su kawai a haɗa su cikin reshe na yanzu. Mun kara rubutun premerge.sh a matsayin mataki na farko a duk ginin kuma muka fara bincika ainihin abin da muke so, wato. hadewa.

An dauki kwanaki uku ana gano matsalar, a nemo mafita, sannan a rubuta wannan rubutun.

Aikace-aikacen ya haɓaka, ƙarin ayyuka sun bayyana, ƙungiyar ta girma, kuma premerge.sh wani lokaci ya fara barin mu. Ci gaba yana da canje-canje masu karo da juna waɗanda suka karya ginin.

Misalin yadda hakan ke faruwa:

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Masu haɓakawa biyu a lokaci guda suna fara aiki akan fasalulluka A da B. Mai haɓaka fasalin A ya gano fasalin da ba a yi amfani da shi ba a cikin aikin answer() kuma, kamar ɗan yaro mai kyau, ya cire shi. A lokaci guda, mai haɓaka fasalin B yana ƙara sabon kira ga wannan aikin a reshensa.

Masu haɓakawa sun gama aikin su kuma suna buɗe buƙatar ja a lokaci guda. An ƙaddamar da gine-ginen, premerge.sh yana bincika buƙatun buƙatun biyu dangane da sabuwar ci gaban jihar - duk cak ɗin kore ne. Bayan haka, an haɗa buƙatun ja na siffa A, an haɗa buƙatun siffa B… Boom! Ƙirƙirar hutu saboda lambar haɓakawa ta ƙunshi kira zuwa aikin da ba shi da shi.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Lokacin da ba zai bunkasa ba, yana da bala'i na gida. Duk ƙungiyar ba za su iya tattara komai ba kuma su ƙaddamar da shi don gwaji.

Ya faru da cewa sau da yawa na yi aiki akan ayyukan samar da ababen more rayuwa: nazari, cibiyar sadarwa, bayanan bayanai. Wato, ni ne na rubuta waɗannan ayyuka da azuzuwan da sauran masu haɓakawa ke amfani da su. Saboda haka, na sami kaina a cikin irin wannan yanayi sau da yawa. Har na sa a rataye wannan hoton na wani lokaci.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Tun da wannan bai dace da mu ba, mun fara bincika zaɓuɓɓukan yadda za mu hana hakan.

Yadda ba karya ci gaba

Zabi na farko: sake gina duk buƙatun ja lokacin haɓaka haɓakawa. Idan, a cikin misalinmu, buƙatun ja tare da fasalin A shine farkon da za a haɗa cikin haɓakawa, buƙatun ja na fasalin B za a sake gina shi, kuma, saboda haka, cak ɗin za su gaza saboda kuskuren tattarawa.

Don fahimtar tsawon lokacin da wannan zai ɗauka, yi la'akari da misali tare da PRs guda biyu. Mun bude PRs guda biyu: ginawa biyu, guda biyu na cak. Bayan an haɗa PR na farko zuwa haɓaka, na biyu yana buƙatar sake ginawa. Gabaɗaya, PRs guda biyu suna buƙatar bincike guda uku: 2 + 1 = 3.

A ka'ida, yana da kyau. Amma mun kalli kididdigar, kuma halin da ake ciki a cikin tawagarmu shine 10 bude PRs, sa'an nan kuma adadin cak shine jimlar ci gaba: 10 + 9 +... + 1 = 55. Wato, yarda da 10 PRs, kuna buƙatar sake gina sau 55. Kuma wannan yana cikin yanayin da ya dace, lokacin da duk binciken ya wuce karo na farko, lokacin da babu wanda ya buɗe ƙarin buƙatar ja yayin da ake sarrafa waɗannan dozin ɗin.

Ka yi tunanin kanka a matsayin mai haɓakawa wanda ke buƙatar zama na farko don danna maɓallin "merge", domin idan maƙwabcin ya yi haka, to za ku jira har sai duk ginin ya sake komawa ... A'a, wannan ba zai yi aiki ba. , zai yi matukar rage ci gaba.

Hanya ta biyu mai yiwuwa: tattara buƙatun ja bayan sake duba lambar. Wato, kuna buɗe buƙatar ja, tattara adadin da ake buƙata na yarda daga abokan aiki, gyara abin da ake buƙata, sannan ƙaddamar da ginin. Idan sun yi nasara, ana haɗa buƙatar ja zuwa haɓaka. A wannan yanayin, babu ƙarin sake kunnawa, amma an rage jinkirin amsawa sosai. A matsayina na mai haɓakawa, lokacin da na buɗe buƙatun ja, Ina so nan da nan in ga ko zai yi aiki. Misali, idan gwajin ya gaza, kuna buƙatar gyara shi da sauri. A cikin yanayin ginin da aka jinkirta, ra'ayoyin yana raguwa, sabili da haka duk ci gaba. Wannan ma bai dace da mu ba.

A sakamakon haka, zaɓi na uku kawai ya rage - keke. Duk lambar mu, duk tushen mu ana adana su a cikin ma'ajiyar sabar Bitbucket. Saboda haka, dole ne mu haɓaka plugin don Bitbucket.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Wannan plugin ɗin yana ƙetare hanyar haɗa buƙatun ja. Mafarin ma'auni ne: PR yana buɗewa, an ƙaddamar da duk majalisai, an kammala nazarin lambar. Amma bayan an kammala bitar lambar kuma mai haɓakawa ya yanke shawarar danna kan “haɗuwa”, kayan aikin plugin ɗin ya bincika wanda ya haɓaka yanayin cak ɗin. Idan an sabunta haɓakawa bayan ginawa, plugin ɗin ba zai bari a haɗa irin wannan buƙatar ja zuwa babban reshe ba. Zata sake kunna ginin wani ci gaba na kwanan nan.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

A cikin misalinmu tare da sauye-sauye masu karo da juna, irin waɗannan gine-ginen ba za su gaza ba saboda kuskuren tattarawa. Saboda haka, mai haɓaka fasalin B zai gyara lambar, sake kunna cak, sannan plugin ɗin zai yi amfani da buƙatun ja ta atomatik.

Kafin aiwatar da wannan plugin ɗin, mun ƙaddamar da matsakaitan bita 2,7 akan kowane buƙatun ja. Tare da plugin ɗin akwai ƙaddamar da 3,6. Wannan ya dace da mu.

Yana da kyau a lura cewa wannan plugin ɗin yana da koma baya: yana sake farawa ginin sau ɗaya kawai. Wato har yanzu akwai wata ƙaramar taga wadda ta cikinta za a iya samun sauye-sauye masu karo da juna. Amma yuwuwar hakan ba ta da yawa, kuma mun sanya wannan ciniki tsakanin adadin farawa da yuwuwar gazawar. A cikin shekaru biyu an harbe sau ɗaya kawai, don haka watakila ba a banza ba.

Ya ɗauki makonni biyu don rubuta sigar farko ta plugin ɗin Bitbucket.

Sabbin cak

A halin yanzu, ƙungiyarmu ta ci gaba da girma. An kara sabbin cak.

Mun yi tunani: me yasa kuke yin kuskure idan ana iya hana su? Kuma shi ya sa suka aiwatar nazarin lambar a tsaye. Mun fara da lint, wanda aka haɗa a cikin Android SDK. Amma a lokacin bai san yadda ake aiki da lambar Kotlin ba, kuma mun riga mun sami kashi 75% na aikace-aikacen da aka rubuta a cikin Kotlin. Sabili da haka, an ƙara waɗanda aka gina a cikin lint Android Studio dubawa.

Don yin wannan, dole ne mu yi ɓarna da yawa: ɗauki Android Studio, haɗa shi a Docker kuma kunna shi a kan CI tare da na'ura mai mahimmanci, ta yadda zai yi tunanin yana gudana akan kwamfutar tafi-da-gidanka na gaske. Amma ya yi aiki.

Haka kuma a wannan lokacin ne muka fara rubutu da yawa gwajin kayan aiki da aiwatarwa gwajin hoton allo. Wannan shine lokacin da aka ƙirƙiri hoton allo don keɓantaccen ɗan ƙaramin kallo, kuma gwajin ya ƙunshi ɗaukar hoto daga ra'ayi da kwatanta shi da daidaitaccen pixel ta pixel. Idan akwai rashin daidaituwa, yana nufin cewa shimfidar wuri ya ɓace a wani wuri ko wani abu ba daidai ba a cikin salon.

Amma gwaje-gwajen kayan aiki da gwaje-gwajen hotunan kariyar kwamfuta suna buƙatar gudanar da su akan na'urori: akan na'urori masu ƙima ko akan na'urori na gaske. Ganin cewa akwai gwaje-gwaje da yawa kuma ana gudanar da su akai-akai, ana buƙatar gonaki gaba ɗaya. Fara gonar ku yana da ƙarfin aiki sosai, don haka mun sami wani zaɓi da aka yi - Firebase Test Lab.

Wurin Gwajin Wuta

An zaɓi shi ne saboda Firebase samfurin Google ne, ma'ana ya zama abin dogaro kuma da wuya ya mutu. Farashin yana da ma'ana: $ 5 a kowace awa na aiki na na'ura na gaske, 1 $ a kowace awa na aiki na emulator.

An ɗauki kimanin makonni uku don aiwatar da Lab ɗin Gwajin Wuta a cikin CI namu.

Amma ƙungiyar ta ci gaba da girma, kuma Firebase, da rashin alheri, ya fara barin mu. A lokacin, ba shi da SLA. Wani lokaci Firebase yana sa mu jira har sai adadin na'urorin da ake buƙata sun kasance kyauta don gwaje-gwaje, kuma ba su fara aiwatar da su nan da nan ba, kamar yadda muke so. Ana jira a layi ya ɗauki kusan rabin sa'a, wanda shine lokaci mai tsawo sosai. An gudanar da gwaje-gwajen kayan aiki akan kowane PR, jinkiri da gaske ya rage ci gaba, sannan lissafin wata-wata ya zo tare da jimla. Gabaɗaya, an yanke shawarar barin Firebase kuma kuyi aiki a cikin gida, tunda ƙungiyar ta girma sosai.

Docker + Python + bash

Mun dauki Docker, cushe masu kwaikwayo a ciki, mun rubuta wani tsari mai sauƙi a cikin Python, wanda a daidai lokacin ya kawo adadin da ake buƙata na masu kwaikwayon a cikin sigar da ake buƙata kuma yana dakatar da su idan ya cancanta. Kuma, ba shakka, wasu rubutun bash - a ina za mu kasance ba tare da su ba?

An ɗauki makonni biyar don ƙirƙirar yanayin gwajin mu.

Sakamakon haka, ga kowane buƙatun ja akwai babban jerin toshewar haɗin kai:

  • taro na ARK;
  • Gwajin Junit;
  • Lint;
  • Android Studio cak;
  • Gwajin kayan aiki;
  • Gwajin hoton allo.

Wannan ya hana da yawa yiwuwar lalacewa. A fasaha komai ya yi aiki, amma masu haɓakawa sun koka da cewa jiran sakamako ya yi tsayi da yawa.

Yaya tsawon yayi yawa? Mun loda bayanai daga Bitbucket da TeamCity a cikin tsarin bincike kuma mun gane hakan matsakaicin lokacin jira mintuna 45. Wato, mai haɓakawa, lokacin buɗe buƙatun ja, yana jira a matsakaicin mintuna 45 don sakamakon ginin. A ganina, wannan yana da yawa, kuma ba za ku iya yin aiki kamar haka ba.

Tabbas, mun yanke shawarar hanzarta duk ginin mu.

Mu hanzarta

Ganin cewa gini yakan tsaya a cikin jerin gwano, abu na farko da muke yi shine ya sayi ƙarin kayan masarufi - ci gaba mai yawa shine mafi sauki. Gine-gine sun daina yin layi, amma lokacin jira ya ragu kaɗan, saboda wasu cak ɗin da kansu sun ɗauki lokaci mai tsawo.

Cire cak wanda ke ɗaukar tsayi da yawa

Haɗin kai namu yana iya kama waɗannan kurakurai da matsaloli.

  • Ba zan je ba. CI na iya kama kuskuren tattarawa lokacin da wani abu bai gina ba saboda sauye-sauye masu karo da juna. Kamar yadda na riga na fada, to babu wanda zai iya hada komai, ci gaba ya tsaya, kuma kowa yana jin tsoro.
  • Bug cikin hali. Misali, lokacin da aka gina aikace-aikacen, amma ya rushe lokacin da ka danna maballin, ko kuma ba a danna maɓallin ba kwata-kwata. Wannan mummunan ne saboda irin wannan kwaro na iya isa ga mai amfani.
  • Bug a cikin shimfidar wuri. Misali, ana danna maballin, amma ya matsar pixels 10 zuwa hagu.
  • Haɓaka bashin fasaha.

Bayan duban wannan jerin, mun gane cewa kawai maki biyu na farko suna da mahimmanci. Muna so mu fara kama irin waɗannan matsalolin. Ana gano kwari a cikin shimfidar wuri a matakin ƙira-bita kuma ana iya gyara su cikin sauƙi sannan. Yin hulɗa da bashi na fasaha yana buƙatar tsari daban-daban da tsarawa, don haka mun yanke shawarar kada mu gwada shi a kan buƙatun ja.

Dangane da wannan rarrabuwa, mun girgiza dukkan jerin cak. An ketare Lint sannan ta dage kaddamar da shi cikin dare: don kawai ta fitar da rahoto kan matsalolin da aka samu a cikin aikin. Mun amince da yin aiki daban tare da bashin fasaha, kuma Android Studio cak an yi watsi da gaba daya. Android Studio a cikin Docker don gudanar da bincike yana da ban sha'awa, amma yana haifar da matsala mai yawa a cikin tallafi. Duk wani sabuntawa ga nau'ikan Studio Studio na Android yana nufin gwagwarmaya tare da kwari marasa fahimta. Hakanan yana da wahala a goyi bayan gwaje-gwajen hoton allo, saboda ɗakin karatu ba shi da kwanciyar hankali sosai kuma akwai alamun karya. An cire gwaje-gwajen hoton allo daga lissafin rajistan.

A sakamakon haka, an bar mu da:

  • taro na ARK;
  • Gwajin Junit;
  • Gwajin kayan aiki.

Gradle m cache

Ba tare da bincike mai nauyi ba, komai ya zama mafi kyau. Amma babu iyaka ga kamala!

An riga an raba aikace-aikacen mu zuwa kusan nau'ikan gradle 150. Gradle m cache yawanci yana aiki da kyau a wannan yanayin, don haka mun yanke shawarar gwada shi.

Cache na nesa na Gradle sabis ne wanda zai iya yin cache gina kayan tarihi don ɗawainiyar ɗaiɗaikun a cikin kowane nau'i. Gradle, maimakon a zahiri haɗa lambar, yana amfani da HTTP don buga cache na nesa kuma ya tambayi idan wani ya riga ya yi wannan aikin. Idan eh, kawai zazzage sakamakon.

Gudun cache na nesa na Gradle yana da sauƙi saboda Gradle yana ba da hoton Docker. Mun yi nasarar yin hakan a cikin sa'o'i uku.

Abin da kawai za ku yi shine ƙaddamar da Docker da rubuta layi ɗaya a cikin aikin. Amma ko da yake ana iya ƙaddamar da shi cikin sauri, zai ɗauki lokaci mai yawa don komai ya yi aiki da kyau.

A ƙasa akwai jadawali da aka rasa.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

A farkon farkon, yawan adadin cache ya ɓace kusan 65. Bayan makonni uku, mun sami damar ƙara wannan darajar zuwa 20%. Ya bayyana cewa ayyukan da aikace-aikacen Android ke tattarawa suna da abubuwan dogaro masu ban mamaki, wanda ya sa Gradle ya rasa cache.

Ta hanyar haɗa cache, mun haɓaka ginin sosai. Amma ban da haɗuwa, akwai kuma gwaje-gwajen kayan aiki, kuma suna ɗaukar lokaci mai tsawo. Wataƙila ba duk gwaje-gwaje ba ne ake buƙatar gudanar da kowane buƙatun ja. Don ganowa, muna amfani da nazarin tasiri.

Binciken tasiri

A kan buƙatun ja, muna tattara git diff kuma mu nemo samfuran Gradle da aka gyara.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Yana da ma'ana don gudanar da gwaje-gwajen kayan aiki kawai waɗanda ke duba samfuran da aka canza da duk samfuran da suka dogara da su. Babu wata ma'ana a gudanar da gwaje-gwaje don ƙirar makwabta: lambar da ke can ba ta canza ba kuma babu abin da zai iya karya.

Gwajin kayan aiki ba su da sauƙi sosai, saboda dole ne su kasance a cikin babban matakin aikace-aikacen. Mun yi amfani da heuristics tare da binciken bytecode don fahimtar wane nau'in kowane gwaji nasa ne.

Haɓaka aikin gwaje-gwajen kayan aiki ta yadda za su gwada kayan aikin da abin ya shafa ya ɗauki kimanin makonni takwas.

Matakan don hanzarta dubawa sun yi aiki cikin nasara. Daga minti 45 mun haura zuwa kimanin 15. Ya riga ya zama al'ada don jira kwata na sa'a don ginawa.

Amma a yanzu masu ci gaba sun fara korafin cewa ba su fahimci gine-ginen da ake kaddamar da su ba, inda za su ga gunkin, dalilin da ya sa ginin ya yi ja, wanne gwajin ya ci tura, da dai sauransu.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Matsaloli tare da amsa suna jinkirta ci gaba, don haka mun yi ƙoƙari don samar da cikakkun bayanai game da kowane PR da kuma ginawa kamar yadda zai yiwu. Mun fara da sharhi a cikin Bitbucket zuwa PR, yana nuna wane ginin ya gaza kuma me yasa, kuma mun rubuta saƙonnin da aka yi niyya a cikin Slack. A ƙarshe, mun ƙirƙiri dashboard na PR don shafin tare da jerin duk ginin da ke gudana a halin yanzu da matsayinsu: jerin gwano, gudu, faɗuwa ko kammala. Kuna iya danna kan ginin kuma je zuwa log ɗin sa.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

An shafe makonni shida don samun cikakkun bayanai.

Shirye-shirye

Bari mu ci gaba zuwa tarihin kwanan nan. Bayan an warware batun ra'ayin, mun kai wani sabon mataki - mun yanke shawarar gina namu gonakin emulator. Lokacin da akwai gwaje-gwaje da yawa da kwaikwaya, suna da wahalar sarrafawa. Sakamakon haka, duk masu kwaikwayon mu sun koma gungu na k8s tare da sassauƙan sarrafa albarkatu.

Bugu da kari, akwai wasu tsare-tsare.

  • Komawa Lint (da sauran bincike a tsaye). Mun riga muna aiki a wannan hanya.
  • Gudanar da komai akan mai hana PR gwaje-gwaje na ƙarshe zuwa ƙarshe akan duk sigar SDK.

Don haka, mun gano tarihin ci gaban Ci gaba da Haɗin kai a Avito. Yanzu ina so in ba da shawara daga wani gogaggen ra'ayi.

Tips

Idan zan iya ba da shawara guda ɗaya kawai zai kasance:

Da fatan za a yi hankali da rubutun harsashi!

Bash kayan aiki ne mai sauƙi da ƙarfi, yana da matukar dacewa da sauri don rubuta rubutun. Amma tare da shi za ku iya fada cikin tarko, kuma, da rashin alheri, mun fada cikinsa.

Dukkan ya fara ne da sauƙaƙan rubutun da ke gudana akan injin ɗin mu:

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

Amma, kamar yadda kuka sani, komai yana tasowa kuma yana ƙara rikitarwa cikin lokaci - bari mu gudanar da rubutu ɗaya daga wani, bari mu wuce wasu sigogi a can - a ƙarshe dole ne mu rubuta wani aiki wanda ke ƙayyade ko wane matakin bash nesting muke yanzu a cikin tsari. don shigar da abubuwan da suka dace, don farawa duka.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Kuna iya tunanin farashin aiki don haɓaka irin waɗannan rubutun. Ina ba ku shawara kada ku fada cikin wannan tarkon.

Me za a iya maye gurbinsa?

  • Duk wani harshe rubutun. Rubuta zuwa Python ko Kotlin Script ya fi dacewa saboda shirye-shirye ne, ba rubutun ba.
  • Ko siffanta duk dabarun ginawa a cikin tsari Ayyukan gradle na al'ada don aikinku.

Mun yanke shawarar zaɓar zaɓi na biyu, kuma yanzu muna share duk rubutun bash a tsari kuma muna rubuta yawancin ayyukan gradle na al'ada.

Tukwici #2: Adana kayayyakin more rayuwa a lamba.

Ya dace lokacin da aka adana saitin Haɗin kai na ci gaba ba a cikin UI dubawa na Jenkins ko TeamCity, da dai sauransu, amma a cikin nau'i na fayilolin rubutu kai tsaye a cikin ma'ajin aikin. Wannan ya ba da versionability. Ba zai yi wahala a sake komawa ko gina lambar a wani reshe ba.

Ana iya adana rubutun a cikin aikin. Me za a yi da muhalli?

Tukwici #3: Docker na iya taimakawa tare da muhalli.

Tabbas zai taimaka wa masu haɓaka Android; iOS ba shi da ɗaya tukuna, abin takaici.

Wannan misali ne na fayil ɗin docker mai sauƙi wanda ya ƙunshi jdk da 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

Bayan rubuta wannan fayil ɗin Docker (Zan gaya muku wani sirri, ba lallai ne ku rubuta shi ba, amma kawai cire shi da aka yi daga GitHub) kuma ku haɗa hoton, kun sami injin kama-da-wane wanda zaku iya gina aikace-aikacen. kuma gudanar da gwajin Junit.

Babban dalilai guda biyu da yasa wannan ke da ma'ana shine scalability da maimaitawa. Yin amfani da docker, zaku iya hanzarta haɓaka dozin ɗin gini waɗanda zasu sami daidaitaccen muhalli iri ɗaya da na baya. Wannan ya sa rayuwar injiniyoyin CI ta fi sauƙi. Abu ne mai sauqi ka tura android-sdk cikin docker, amma tare da masu kwaikwayon yana da ɗan wahala: za ku ƙara yin aiki kaɗan (ko sake zazzage wanda aka gama daga GitHub).

Tip No. 4: kar ka manta cewa binciken ba a yi shi don kare kanka ba, amma ga mutane.

Mai sauri kuma, mafi mahimmanci, bayyananniyar amsa yana da matukar mahimmanci ga masu haɓakawa: abin da ya karye, menene gwajin ya gaza, a ina zan iya ganin ginin ginin.

Tukwici #5: Kasance mai hankali yayin haɓaka Haɗin kai Ci gaba.

A bayyane yake fahimtar nau'ikan kurakuran da kuke son hanawa, yawan albarkatun, lokaci, da lokacin kwamfutar da kuke son kashewa. Takaddun binciken da suka dauki lokaci mai tsawo, alal misali, ana iya jinkirta su dare daya. Kuma waɗanda suka kama kurakurai marasa mahimmanci ya kamata a yi watsi da su gaba ɗaya.

Tukwici #6: Yi amfani da kayan aikin da aka shirya.

Akwai kamfanoni da yawa yanzu waɗanda ke ba da girgije CI.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

Wannan kyakkyawan bayani ne ga ƙananan ƙungiyoyi. Ba kwa buƙatar tallafawa wani abu, kawai ku biya kuɗi kaɗan, gina aikace-aikacen ku har ma da gwajin kayan aiki.

Tukwici #7: A cikin babban ƙungiya, mafita a cikin gida sun fi riba.

Amma ba dade ko ba dade, yayin da ƙungiyar ke girma, mafita a cikin gida za su zama mafi riba. Akwai matsala ɗaya game da waɗannan yanke shawara. Akwai ka'ida na rage dawowa a cikin tattalin arziki: a cikin kowane aiki, kowane ci gaba na gaba yana da wahala kuma yana buƙatar ƙarin zuba jari.

Ilimin tattalin arziki yana kwatanta rayuwarmu gaba ɗaya, gami da Ci gaba da Haɗuwa. Na gina jadawali na farashin aiki don kowane mataki na ci gaban Haɗin kai na Ci gaba.

Juyin Halitta na CI a cikin ƙungiyar haɓaka wayar hannu

A bayyane yake cewa duk wani ci gaba yana ƙara wahala. Duban wannan jadawali, zaku iya fahimtar cewa Ci gaba da Haɗin kai yana buƙatar haɓaka daidai da girman girman ƙungiyar. Ga ƙungiyar mutane biyu, ciyar da kwanaki 50 don haɓaka gonar kwaikwaya ta ciki babban ra'ayi ne. Amma a lokaci guda, ga babbar ƙungiya, rashin yin Ci gaba da Haɗin kai kwata-kwata ma mummunan ra'ayi ne, saboda matsalolin haɗin kai, gyara sadarwa, da dai sauransu. zai dauki ma karin lokaci.

Mun fara da tunanin cewa ana buƙatar atomatik saboda mutane suna da tsada, suna yin kuskure kuma suna da kasala. Amma kuma mutane suna yin ta atomatik. Don haka, duk matsalolin iri ɗaya sun shafi aiki da kai.

  • Automation yana da tsada. Ka tuna da jadawalin aiki.
  • Idan ya zo ga sarrafa kansa, mutane suna yin kuskure.
  • Wani lokaci yana da kasala sosai don yin ta atomatik, saboda komai yana aiki haka. Me yasa inganta wani abu, me yasa duk wannan Ci gaba da Haɗuwa?

Amma ina da ƙididdiga: ana kama kurakurai a cikin 20% na majalisai. Kuma wannan ba saboda masu haɓaka mu suna rubuta lamba mara kyau ba. Wannan shi ne saboda masu haɓakawa suna da tabbacin cewa idan sun yi kuskure, ba zai ƙare ba, za a kama shi ta hanyar bincike ta atomatik. Saboda haka, masu haɓakawa za su iya ciyar da ƙarin lokaci don rubuta lambar da abubuwa masu ban sha'awa, maimakon gudu da gwada wani abu a cikin gida.

Yi Ci gaba da Haɗuwa. Amma a cikin matsakaici.

Af, Nikolai Nesterov ba kawai ya ba da rahotanni mai girma da kansa ba, amma kuma mamba ne na kwamitin shirin AppsConf kuma yana taimaka wa wasu su shirya muku jawabai masu ma'ana. Ana iya tantance cikar da fa'idar shirin taro na gaba ta batutuwa a cikin jadawali. Kuma don cikakkun bayanai, zo zuwa Infospace akan Afrilu 22-23.

source: www.habr.com

Add a comment