Evolisyon CI nan ekip devlopman mobil lan

Jodi a, pifò pwodwi lojisyèl yo devlope an ekip. Kondisyon yo pou devlopman ekip siksè yo ka reprezante nan fòm lan nan yon dyagram senp.

Evolisyon CI nan ekip devlopman mobil lan

Yon fwa ou te ekri kòd ou a, ou bezwen asire w ke li:

  1. Travay.
  2. Li pa kraze anyen, enkli kòd kòlèg ou yo te ekri.

Si tou de kondisyon yo satisfè, Lè sa a, ou se sou wout la nan siksè. Pou tcheke kondisyon sa yo fasil epi yo pa devye nan chemen pwofitab la, nou te vini ak Entegrasyon kontinyèl.

CI se yon workflow kote ou entegre kòd ou a nan kòd pwodwi an jeneral osi souvan ke posib. Epi ou pa jis entegre, men tou, toujou ap tcheke ke tout bagay ap travay. Depi ou bezwen tcheke anpil e souvan, li vo panse sou automatisation. Ou ka tcheke tout bagay manyèlman, men ou pa ta dwe, epi isit la se poukisa.

  • Chè moun. Yon èdtan nan travay nan nenpòt pwogramè se pi chè pase yon èdtan nan travay nan nenpòt ki sèvè.
  • Moun fè erè. Se poutèt sa, sitiyasyon yo ka rive lè tès yo te kouri sou branch nan move oswa komèt la move konpile pou tèsteur yo.
  • Moun yo parese. Detanzantan, lè m fini yon travay, panse a rive: “Kisa pou m tcheke? Mwen te ekri de liy - tout bagay ap travay! Mwen panse ke kèk nan nou tou pafwa gen panse sa yo. Men, ou ta dwe toujou tcheke.

Ki jan entegrasyon kontinyèl yo te aplike ak devlope nan ekip devlopman mobil Avito a, ki jan yo te ale soti nan 0 a 450 bati pa jou, ak ki bati machin rasanble 200 èdtan pa jou, di Nikolai Nesterov (nnesterov) se yon patisipan nan tout chanjman evolisyonè nan aplikasyon an Android CI/CD.

Istwa a baze sou egzanp yon kòmand Android, men pifò nan apwòch yo aplikab sou iOS tou.


Yon fwa sou yon tan, yon sèl moun te travay nan ekip la Avito Android. Dapre definisyon, li pa t 'bezwen anyen nan Entegrasyon Kontinyèl: pa te gen okenn moun ki entegre ak.

Men, aplikasyon an te grandi, pi plis ak plis nouvo travay parèt, ak ekip la te grandi kòmsadwa. Nan kèk pwen, li lè yo plis fòmèlman etabli yon pwosesis entegrasyon kòd. Li te deside sèvi ak Git koule.

Evolisyon CI nan ekip devlopman mobil lan

Konsèp Git koule a byen li te ye: yon pwojè gen yon sèl branch devlopman komen, ak pou chak nouvo karakteristik, devlopè koupe yon branch separe, angaje nan li, pouse, epi lè yo vle rantre kòd yo nan branch devlopman an, louvri yon branch. rale demann. Pou pataje konesans ak diskite sou apwòch, nou prezante revizyon kòd, se sa ki, kòlèg yo dwe tcheke ak konfime kòd youn lòt.

Chèk

Wè kòd ak je ou se fre, men se pa ase. Se poutèt sa, chèk otomatik yo te prezante.

  • Premye a tout, nou tcheke Asanble ARK.
  • Yon anpil Tès Junit.
  • Nou konsidere kouvèti kòd, depi nou ap fè tès yo.

Pou konprann ki jan chèk sa yo ta dwe kouri, ann gade nan pwosesis devlopman nan Avito.

Li ka reprezante schématikman tankou sa a:

  • Yon pwomotè ekri kòd sou laptop li. Ou ka kouri chèk entegrasyon isit la - swa ak yon zen komèt, oswa tou senpleman kouri chèk nan background nan.
  • Apre pwomotè a te pouse kòd la, li louvri yon demann rale. Nan lòd pou kòd li yo dwe enkli nan branch devlopman an, li nesesè yo ale nan yon revizyon kòd ak kolekte kantite ki nesesè nan konfimasyon. Ou ka pèmèt chèk ak bati isit la: jiskaske tout bati yo reyisi, demann lan pa ka fizyone.
  • Apre demann lan rale fizyone ak kòd la enkli nan devlope, ou ka chwazi yon tan pratik: pou egzanp, nan mitan lannwit, lè tout serveurs yo gratis, epi kouri kòm chèk anpil jan ou renmen.

Pèsonn pa te renmen kouri analiz sou laptop yo. Lè yon pwomotè te fini yon karakteristik, li vle byen vit pouse li epi louvri yon demann rale. Si nan moman sa a kèk chèk long yo te lanse, sa a se pa sèlman pa trè bèl, men tou, ralanti devlopman: pandan y ap laptop la ap tcheke yon bagay, li enposib travay nòmalman sou li.

Nou vrèman te renmen kouri chèk nan mitan lannwit, paske gen anpil tan ak serveurs, ou ka Roaming alantou. Men, malerezman, lè kòd karakteristik la vin nan devlope, pwomotè a gen anpil mwens motivasyon pou ranje erè CI te jwenn. Detanzantan mwen te pran tèt mwen panse lè mwen te gade tout erè yo te jwenn nan rapò maten an ke mwen ta ranje yo yon jou pita, paske kounye a gen yon nouvo travay fre nan Jira ke mwen jis vle kòmanse fè.

Si chèk bloke yon demann rale, Lè sa a, gen ase motivasyon, paske jiskaske bati yo vire vèt, kòd la pa pral antre nan devlope, ki vle di travay la pa pral fini.

Kòm yon rezilta, nou te chwazi estrateji sa a: nou kouri maksimòm seri chèk posib nan mitan lannwit, epi lanse sa ki pi kritik nan yo ak, sa ki pi enpòtan, sa yo ki pi rapid sou yon demann rale. Men, nou pa sispann la-an paralèl, nou optimize vitès chèk yo pou yo transfere yo soti nan mòd lannwit pou rale chèk demann.

Lè sa a, tout bati nou yo te fini byen vit, kidonk nou tou senpleman enkli bati ARK, tès Junit ak kalkil kouvèti kòd kòm yon bloke pou demann rale a. Nou te vire l 'sou li, te panse sou li, ak abandone pwoteksyon kòd paske nou te panse ke nou pa t' bezwen li.

Li te pran nou de jou pou nou konplètman mete kanpe CI debaz la (apwe sa estimasyon tan an se apwoksimatif, ki nesesè pou echèl).

Apre sa, nou te kòmanse reflechi pi lwen - èske nou menm tcheke kòrèkteman? Èske nou kouri bati sou demann rale kòrèkteman?

Nou te kòmanse bati a sou dènye komite nan branch ki soti nan ki demann lan te louvri. Men, tès sa a komèt ka sèlman montre ke kòd la ke pwomotè a te ekri travay. Men, yo pa pwouve ke li pa t kraze anyen. An reyalite, ou bezwen tcheke eta a nan devlope branch apre yon karakteristik fizyone nan li.

Evolisyon CI nan ekip devlopman mobil lan

Pou fè sa, nou te ekri yon senp script bash premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Isit la tout chanjman ki sot pase yo soti nan devlope yo tou senpleman rale moute ak fizyone nan branch aktyèl la. Nou te ajoute script premerge.sh la kòm premye etap nan tout bati epi yo te kòmanse tcheke egzakteman sa nou vle, se sa ki entegrasyon.

Li te pran twa jou pou lokalize pwoblèm nan, jwenn yon solisyon, epi ekri script sa a.

Aplikasyon an devlope, pi plis ak plis travay parèt, ekip la te grandi, epi premerge.sh pafwa te kòmanse kite nou desann. Develop te gen chanjman konfli ki te kraze konstriksyon an.

Yon egzanp sou fason sa rive:

Evolisyon CI nan ekip devlopman mobil lan

De devlopè ansanm kòmanse travay sou karakteristik A ak B. Pwomotè karakteristik A dekouvri yon karakteristik ki pa itilize nan pwojè a. answer() epi, tankou yon bon boy scout, retire li. An menm tan an, pwomotè a nan karakteristik B ajoute yon nouvo apèl nan fonksyon sa a nan branch li.

Devlopè yo fini travay yo epi yo louvri yon demann rale an menm tan an. Konstriksyon yo lanse, premerge.sh tcheke tou de demann rale konsènan dènye eta devlope - tout chèk yo vèt. Apre sa, demann rale nan karakteristik A fizyone, demann rale nan karakteristik B fizyone... Boom! Devlope kraze paske kòd devlope a gen yon apèl nan yon fonksyon ki pa egziste.

Evolisyon CI nan ekip devlopman mobil lan

Lè li pa pral devlope, li la dezas lokal la. Tout ekip la pa ka kolekte anyen epi soumèt li pou tès la.

Li te rive ke mwen pi souvan te travay sou travay enfrastrikti: analiz, rezo, baz done. Sa vle di, se mwen menm ki te ekri fonksyon sa yo ak klas ke lòt devlopè itilize. Poutèt sa, mwen te jwenn mwen nan sitiyasyon ki sanble trè souvan. Mwen menm te gen foto sa a pandye pou yon ti tan.

Evolisyon CI nan ekip devlopman mobil lan

Depi sa a pa t 'kostim nou, nou te kòmanse eksplore opsyon sou kòman yo anpeche sa a.

Ki jan yo pa kraze devlope

Premye opsyon: rebati tout demann rale lè ajou devlope. Si, nan egzanp nou an, demann rale ak karakteristik A se premye a ki dwe enkli nan devlope, demann rale nan karakteristik B yo pral rebati, epi, kòmsadwa, chèk yo ap echwe akòz yon erè konpilasyon.

Pou w konprann konbyen tan sa a pral pran, konsidere yon egzanp ak de PR. Nou louvri de PR: de bati, de kouri nan chèk. Apre premye PR a fizyone nan devlope, dezyèm lan bezwen rebati. An total, de PR mande twa chèk: 2 + 1 = 3.

An prensip, li byen. Men, nou te gade estatistik yo, ak sitiyasyon an tipik nan ekip nou an te 10 PR ouvè, ak Lè sa a, kantite chèk se sòm total la nan pwogresyon an: 10 + 9 +... + 1 = 55. Sa vle di, yo aksepte 10. PRs, ou bezwen rebati 55 fwa. Epi sa a se nan yon sitiyasyon ideyal, lè tout chèk pase premye fwa a, lè pèsonn pa louvri yon demann adisyonèl pandan douzèn sa yo ap trete.

Imajine tèt ou kòm yon pwomotè ki bezwen premye klike sou bouton "fusion" la, paske si yon vwazen fè sa, Lè sa a, ou pral oblije rete tann jiskaske tout bati yo ale nan ankò ... Non, sa pa pral travay. , li pral seryezman ralanti devlopman.

Dezyèm fason posib: kolekte demann rale apre revizyon kòd. Sa vle di, ou louvri yon demann rale, kolekte kantite apwobasyon ki nesesè nan men kòlèg yo, korije sa ki nesesè, ak Lè sa a, lanse bati yo. Si yo gen siksè, demann lan rale fizyone nan devlope. Nan ka sa a, pa gen okenn rekòmanse adisyonèl, men fidbak la anpil ralanti. Kòm yon pwomotè, lè mwen louvri yon demann rale, mwen imedyatman vle wè si li pral travay. Pou egzanp, si yon tès echwe, ou bezwen byen vit ranje li. Nan ka yon konstriksyon reta, fidbak ralanti, ak Se poutèt sa devlopman an antye. Sa a pa t 'kofòm nou tou.

Kòm yon rezilta, sèlman twazyèm opsyon ki rete - bisiklèt. Tout kòd nou yo, tout sous nou yo estoke nan yon depo sou sèvè Bitbucket la. An konsekans, nou te oblije devlope yon plugin pou Bitbucket.

Evolisyon CI nan ekip devlopman mobil lan

Plugin sa a depase mekanis pou fusion demann rale a. Kòmansman an se estanda: PR a louvri, tout asanble yo lanse, revizyon kòd fini. Men, apre yo fin revizyon kòd la fini ak pwomotè a deside klike sou "fusion", chèk la Plugin kont ki eta devlope chèk yo te kouri. Si devlope te mete ajou apre bati yo, Plugin a pa pral pèmèt yon demann rale konsa yo dwe fizyone nan branch prensipal la. Li pral tou senpleman rekòmanse bati yo nan yon devlopman relativman resan.

Evolisyon CI nan ekip devlopman mobil lan

Nan egzanp nou an ak chanjman konfli, bati sa yo ap echwe akòz yon erè konpilasyon. An konsekans, pwomotè a nan karakteristik B pral oblije korije kòd la, rekòmanse chèk yo, Lè sa a, Plugin la pral otomatikman aplike demann lan rale.

Anvan mete ann aplikasyon Plugin sa a, nou te fè mwayèn 2,7 revizyon pou chak demann rale. Avèk plugin a te gen 3,6 lanse. Sa a te adapte nou.

Li se vo anyen ke Plugin sa a gen yon dezavantaj: li sèlman rekòmanse bati a yon fwa. Sa vle di, toujou gen yon ti fenèt kote chanjman konfli yo ka antre nan devlope. Men, chans pou sa a ba, e nou te fè komès sa a ant kantite kòmanse ak chans pou echèk. Nan de ane li te tire sèlman yon fwa, kidonk li te pwobableman pa pou gremesi.

Li te pran nou de semèn ekri premye vèsyon an nan Bitbucket plugin la.

Nouvo chèk

Pandan se tan, ekip nou an te kontinye grandi. Nouvo chèk yo te ajoute.

Nou te panse: poukisa fè erè si yo ka anpeche yo? E se poutèt sa yo aplike analiz kòd estatik. Nou te kòmanse ak lint, ki enkli nan Android SDK la. Men, nan moman sa a li pa t 'konnen ki jan yo travay ak kòd Kotlin ditou, e nou te deja te gen 75% nan aplikasyon an ekri nan Kotlin. Se poutèt sa, bati-an yo te ajoute nan lint Android Studio chèk.

Pou fè sa, nou te oblije fè anpil pervert: pran Android Studio, pake li nan Docker epi kouri li sou CI ak yon monitè vityèl, pou li panse li ap kouri sou yon laptop reyèl. Men, li te travay.

Li te tou pandan tan sa a ke nou te kòmanse ekri anpil tès instrumentation epi aplike tès ekran. Sa a se lè yon Ekran referans pwodwi pou yon ti gade separe, ak tès la konsiste de pran yon Ekran nan gade nan epi konpare li ak estanda a dirèkteman pixel pa pixel. Si gen yon diferans, sa vle di ke Layout la te ale mal yon kote oswa yon bagay ki mal nan estil yo.

Men, tès enstriman ak tès ekran yo dwe kouri sou aparèy: sou emulateur oswa sou aparèy reyèl. Lè nou konsidere ke gen anpil tès epi yo kouri souvan, yon fèm antye nesesè. Kòmanse pwòp fèm ou a twò travay, kidonk nou jwenn yon opsyon ki pare - Firebase Test Lab.

Laboratwa tès Firebase

Li te chwazi paske Firebase se yon pwodwi Google, sa vle di li ta dwe serye ak fasil pou janm mouri. Pri yo rezonab: $ 5 pou chak èdtan nan operasyon nan yon aparèy reyèl, 1 $ pou chak èdtan nan operasyon nan yon Emulation.

Li te pran apeprè twa semèn pou aplike Firebase Test Lab nan CI nou an.

Men, ekip la te kontinye grandi, epi Firebase, malerezman, te kòmanse kite nou desann. Lè sa a, li pa t 'gen okenn SLA. Pafwa Firebase te fè nou tann jiskaske kantite aparèy yo te mande yo te gratis pou tès yo, epi yo pa t kòmanse egzekite yo imedyatman, jan nou te vle. Tann nan liy te pran jiska demi èdtan, ki se yon tan trè long. Tès enstrimantasyon yo te kouri sou chak PR, reta reyèlman ralanti devlopman an, ak Lè sa a, bòdwo a chak mwa te vini ak yon sòm wonn. An jeneral, li te deside abandone Firebase ak travay nan kay la, depi ekip la te grandi ase.

Docker + Python + bash

Nou te pran Docker, boure emulateur nan li, te ekri yon pwogram senp nan Python, ki nan moman sa a pote moute kantite ki nesesè nan Emulation nan vèsyon ki nesesè yo epi sispann yo lè sa nesesè. Epi, nan kou, yon koup nan scripts bash - ki kote nou ta ye san yo?

Li te pran senk semèn pou kreye pwòp anviwònman tès nou an.

Kòm yon rezilta, pou chak demann rale te gen yon vaste lis fizyon-bloke nan chèk:

  • Asanble ARK;
  • tès Junit;
  • Lint;
  • Android Studio chèk;
  • Tès enstrimantasyon;
  • Tès Ekran.

Sa a te anpeche anpil pann posib. Teknikman tout bagay te travay, men devlopè yo plenyen pou tann rezilta yo te twò lontan.

Konbyen tan twò lontan? Nou telechaje done ki soti nan Bitbucket ak TeamCity nan sistèm analiz la epi reyalize sa tan an mwayèn ap tann 45 minit. Sa vle di, yon pwomotè, lè li louvri yon demann rale, tann an mwayèn 45 minit pou rezilta yo bati. Nan opinyon mwen, sa a se yon anpil, epi ou pa ka travay tankou sa.

Natirèlman, nou te deside akselere tout bati nou yo.

Ann akselere

Wè ke bati souvan kanpe nan yon keu, premye bagay nou fè se te achte plis pyès ki nan konpitè — devlopman vaste se pi senp la. Bati yo sispann file, men tan an ap tann diminye sèlman yon ti kras, paske kèk chèk tèt yo te pran yon tan trè lontan.

Retire chèk ki pran twòp tan

Entegrasyon kontinyèl nou an ta ka trape kalite erè ak pwoblèm sa yo.

  • Pa prale. CI ka trape yon erè konpilasyon lè yon bagay pa bati akòz chanjman konfli. Kòm mwen te deja di, Lè sa a, pèsonn pa ka rasanble anyen, devlopman sispann, ak tout moun vin nève.
  • Ensèk nan konpòtman. Pou egzanp, lè aplikasyon an bati, men aksidan lè ou peze yon bouton, oswa bouton an pa peze ditou. Sa a se move paske tankou yon ensèk ka rive jwenn itilizatè a.
  • Ensèk nan layout. Pou egzanp, yo klike sou yon bouton, men li te deplase 10 piksèl sou bò gòch la.
  • Ogmantasyon nan dèt teknik.

Apre w fin gade lis sa a, nou reyalize ke sèlman de premye pwen yo kritik. Nou vle trape pwoblèm sa yo an premye. Pinèz nan Layout yo dekouvri nan etap nan konsepsyon-revizyon epi yo ka fasil korije lè sa a. Fè fas ak dèt teknik mande pou yon pwosesis separe ak planifikasyon, kidonk nou deside pa teste li sou yon demann rale.

Baze sou klasifikasyon sa a, nou souke tout lis chèk yo. Lint kwaze ak ranvwaye lansman li lannwit lan: jis pou li ta pwodwi yon rapò sou konbyen pwoblèm ki te gen nan pwojè a. Nou te dakò travay separeman ak dèt teknik la, ak Chèk Android Studio yo te konplètman abandone. Android Studio nan Docker pou kouri enspeksyon son enteresan, men lakòz anpil pwoblèm nan sipò. Nenpòt aktyalizasyon nan vèsyon Android Studio vle di yon lit ak pinèz enkonpreyansib. Li te difisil tou pou sipòte tès ekran yo, paske bibliyotèk la pa t trè estab e te gen fo pozitif. Tès Ekran yo te retire nan lis chèk la.

Kòm yon rezilta, nou te rete ak:

  • Asanble ARK;
  • tès Junit;
  • Tès enstrimantasyon yo.

Gradle kachèt aleka

San chèk lou, tout bagay te vin pi bon. Men, pa gen limit nan pèfeksyon!

Aplikasyon nou an te deja divize an anviwon 150 modil gradle. Gradle remote kachèt anjeneral travay byen nan ka sa a, kidonk nou deside eseye li.

Kachèt aleka Gradle se yon sèvis ki ka kachèt bati zafè pou travay endividyèl nan modil endividyèl. Gradle, olye pou li aktyèlman konpile kòd la, sèvi ak HTTP pou frape sou kachèt aleka a epi mande si yon moun te deja fè travay sa a. Si wi, li tou senpleman telechaje rezilta a.

Kouri Gradle kachèt aleka fasil paske Gradle bay yon imaj Docker. Nou te rive fè sa nan twa èdtan.

Tout sa ou te dwe fè se te lanse Docker epi ekri yon liy nan pwojè a. Men, byenke li ka lanse byen vit, li pral pran byen anpil tan pou tout bagay mache byen.

Anba a se graf miss kachèt la.

Evolisyon CI nan ekip devlopman mobil lan

Nan kòmansman an anpil, pousantaj nan kachèt rate yo te apeprè 65. Apre twa semèn, nou jere ogmante valè sa a a 20%. Li te tounen soti ke travay yo ke aplikasyon an android kolekte gen depandans etranj tranzitif, akòz ki Gradle rate kachèt la.

Lè nou konekte kachèt la, nou akselere anpil batiman an. Men, anplis asanble, gen tou tès instrumentation, epi yo pran yon bon bout tan. Petèt se pa tout tès yo bezwen kouri pou chak demann rale. Pou chèche konnen, nou itilize analiz enpak.

Analiz enpak

Sou yon demann rale, nou kolekte git diff epi jwenn modil Gradle modifye yo.

Evolisyon CI nan ekip devlopman mobil lan

Li fè sans sèlman fè tès instrumentation ki tcheke modil yo chanje ak tout modil ki depann sou yo. Pa gen okenn pwen nan kouri tès pou modil vwazen: kòd la pa chanje e pa gen anyen ki ka kraze.

Tès enstrimantasyon yo pa tèlman senp, paske yo dwe lokalize nan modil aplikasyon an tèt nivo. Nou itilize euristik ak analiz bytecode pou konprann ki modil chak tès fè pati.

Amelyore operasyon tès instrumentation yo pou yo te sèlman teste modil ki enplike yo te pran apeprè uit semèn.

Mezi pou akselere enspeksyon yo te travay avèk siksè. Soti nan 45 minit nou te ale jiska apeprè 15. Li deja nòmal pou tann yon ka nan yon èdtan pou yon bati.

Men koulye a, devlopè yo te kòmanse plenyen ke yo pa konprann ki bati yo te lanse, ki kote yo wè boutèy la, poukisa bati a wouj, ki tès echwe, elatriye.

Evolisyon CI nan ekip devlopman mobil lan

Pwoblèm ak fidbak ralanti devlopman, kidonk nou te eseye bay enfòmasyon klè ak detaye sou chak PR ak bati ke posib. Nou te kòmanse ak kòmantè nan Bitbucket nan PR a, ki endike ki konstriksyon te echwe ak poukisa, epi li te ekri mesaj vize nan Slack. Nan fen a, nou te kreye yon tablodbò PR pou paj la ak yon lis tout bati ki ap kouri kounye a ak estati yo: nan keu, kouri, fè aksidan oswa fini. Ou ka klike sou bati a epi ale nan boutèy la.

Evolisyon CI nan ekip devlopman mobil lan

Sis semèn yo te pase sou fidbak detaye.

Plan

Ann ale nan istwa resan. Èske w gen rezoud pwoblèm nan fidbak, nou rive nan yon nouvo nivo - nou deside bati pwòp fèm Emulation nou an. Lè gen anpil tès ak emulateur, yo difisil pou jere. Kòm yon rezilta, tout emulateur nou yo te deplase nan gwoup k8s ak jesyon resous fleksib.

Anplis de sa, gen lòt plan.

  • Retounen Lint (ak lòt analiz estatik). Nou deja travay nan direksyon sa.
  • Kouri tout bagay sou yon blocker PR tès bout-a-fen sou tout vèsyon SDK.

Se konsa, nou te trase istwa a nan devlopman nan entegrasyon kontinyèl nan Avito. Koulye a, mwen vle bay kèk konsèy nan yon pwen de vi ki gen eksperyans.

Советы

Si mwen ta ka bay yon sèl konsèy li ta sa:

Tanpri fè atansyon ak scripts shell!

Bash se yon zouti trè fleksib ak pwisan, li trè pratik ak rapid yo ekri Scripts. Men, ou ka tonbe nan yon pèlen ak li, epi, malerezman, nou tonbe nan li.

Li tout te kòmanse ak scripts senp ki te kouri sou machin bati nou yo:

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

Men, jan ou konnen, tout bagay devlope epi vin pi konplike sou tan - ann kouri yon script nan yon lòt, ann pase kèk paramèt la - alafen nou te oblije ekri yon fonksyon ki detèmine nan ki nivo bash nidifikasyon nou ye kounye a nan lòd. pou mete quotes ki nesesè yo, pou jwenn tout te kòmanse.

Evolisyon CI nan ekip devlopman mobil lan

Ou ka imajine depans travay yo pou devlopman nan scripts sa yo. Mwen konseye w pa tonbe nan pèlen sa a.

Ki sa ki ka ranplase?

  • Nenpòt langaj scripting. Ekri bay Python oswa Kotlin Script pi pratik paske li nan pwogramasyon, pa scripts.
  • Oswa dekri tout lojik bati nan fòm lan Travay gradle personnalisé pou pwojè w la.

Nou deside chwazi dezyèm opsyon an, epi kounye a nou sistematik efase tout scripts bash ak ekri yon anpil nan travay gradle koutim.

Ide #2: Sere enfrastrikti nan kòd.

Li pratik lè anviwònman Entegrasyon kontinyèl la estoke pa nan koòdone UI Jenkins oswa TeamCity, elatriye, men nan fòm dosye tèks dirèkteman nan repozitwa pwojè a. Sa a bay vèsyon. Li p ap difisil pou rollback oswa bati kòd la sou yon lòt branch.

Scripts yo ka estoke nan yon pwojè. Kisa pou fè ak anviwònman an?

Ide #3: Docker ka ede ak anviwònman an.

Li pral definitivman ede devlopè Android iOS pa gen youn ankò, malerezman.

Sa a se yon egzanp yon dosye docker senp ki gen jdk ak 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

Lè w fin ekri fichye Docker sa a (mwen pral di w yon sekrè, ou pa bezwen ekri li, men jis rale li pare-fè soti nan GitHub) epi rasanble imaj la, ou jwenn yon machin vityèl sou ki ou ka bati aplikasyon an. epi fè tès Junit.

De rezon prensipal poukisa sa fè sans yo se évolutivité ak repetibilite. Sèvi ak Docker, ou ka byen vit ogmante yon douzèn ajan bati ki pral gen egzakteman menm anviwònman an ak youn anvan an. Sa fè lavi enjenyè CI yo anpil pi fasil. Li byen fasil pouse android-sdk la nan docker, men ak emulateur li se yon ti kras pi difisil: ou pral oblije travay yon ti kras pi rèd (oswa telechaje youn nan fini nan GitHub ankò).

Konsèy No 4: pa bliye ke enspeksyon yo pa fè pou dedomajman pou enspeksyon, men pou moun.

Rapid epi, sa ki pi enpòtan, fidbak klè trè enpòtan pou devlopè: sa ki te kraze, ki tès echwe, ki kote mwen ka wè buildlog la.

Ti konsèy #5: Fè pragmatik lè w ap devlope Entegrasyon Kontinyèl.

Konprann klèman ki kalite erè ou vle anpeche, konbyen resous, tan, ak tan òdinatè ou vle pase. Pa egzanp, chèk ki pran twòp tan ka ranvwaye lannwit lan. Ak sa yo nan yo ki trape erè pa trè enpòtan yo ta dwe konplètman abandone.

Ide #6: Sèvi ak zouti ki pare.

Gen anpil konpayi kounye a ki bay nwaj CI.

Evolisyon CI nan ekip devlopman mobil lan

Sa a se yon bon solisyon pou ti ekip. Ou pa bezwen sipòte anyen, jis peye yon ti kòb, bati aplikasyon w lan e menm fè tès instrumentation.

Ide #7: Nan yon ekip gwo, solisyon nan kay yo pi pwofitab.

Men, pi bonè oswa pita, kòm ekip la ap grandi, solisyon nan kay la ap vin pi pwofitab. Gen yon pwoblèm ak desizyon sa yo. Gen yon lwa sou diminye retounen nan ekonomi: nan nenpòt pwojè, chak amelyorasyon ki vin apre se pi plis ak pi difisil epi li mande pi plis ak plis envestisman.

Ekonomi dekri tout lavi nou, enkli Entegrasyon Kontinyèl. Mwen bati yon orè nan depans travay pou chak etap nan devlopman nan Entegrasyon Kontinyèl nou an.

Evolisyon CI nan ekip devlopman mobil lan

Li klè ke nenpòt amelyorasyon ap vin pi plis ak pi difisil. Lè w gade graf sa a, ou ka konprann ke Entegrasyon Kontinyèl bezwen devlope an akò ak kwasans gwosè ekip la. Pou yon ekip de moun, pase 50 jou devlope yon fèm Emulation entèn se yon lide medyok. Men, an menm tan an, pou yon ekip gwo, pa fè Entegrasyon kontinyèl nan tout se tou yon move lide, paske pwoblèm entegrasyon, fikse kominikasyon, elatriye. li pral pran menm plis tan.

Nou te kòmanse ak lide ke automatisation nesesè paske moun yo chè, yo fè erè epi yo parese. Men, moun tou otomatize. Se poutèt sa, tout pwoblèm yo menm aplike nan automatisation.

  • Otomatik se chè. Sonje orè travay la.
  • Lè li rive automatisation, moun fè erè.
  • Pafwa li trè parese otomatize, paske tout bagay ap travay konsa. Poukisa amelyore nenpòt lòt bagay, poukisa tout Entegrasyon Kontinyèl sa a?

Men, mwen gen estatistik: erè yo kenbe nan 20% nan asanble yo. Lè sa a se pa paske devlopè nou yo ekri kòd mal. Sa a se paske devlopè yo gen konfyans ke si yo fè kèk erè, li pa pral fini nan devlope, li pral kenbe pa chèk otomatik yo. An konsekans, devlopè yo ka pase plis tan ekri kòd ak bagay ki enteresan, olye ke kouri ak teste yon bagay lokalman.

Pratike entegrasyon kontinyèl. Men, nan modération.

By wout la, Nikolai Nesterov pa sèlman bay gwo rapò tèt li, men tou se yon manm nan komite pwogram lan. AppsConf epi ede lòt moun prepare diskou ki gen sans pou ou. Konplete ak itilite pwochen pwogram konferans lan ka evalye pa sijè nan orè. Epi pou plis detay, vini nan Infospace sou 22-23 avril.

Sous: www.habr.com

Add nouvo kòmantè