Evolution ntawm CI hauv pab pawg txhim kho mobile

Niaj hnub no, cov khoom siv software feem ntau yog tsim hauv pab pawg. Cov xwm txheej rau kev txhim kho pab pawg ua tiav tuaj yeem sawv cev rau hauv daim duab kos duab yooj yim.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Thaum koj tau sau koj cov cai, koj yuav tsum paub tseeb tias nws:

  1. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  2. Nws tsis ua txhaum dab tsi, suav nrog cov cai uas koj cov npoj yaig tau sau.

Yog tias ob qho xwm txheej tau ua tiav, ces koj nyob ntawm txoj kev mus rau kev vam meej. Txhawm rau txheeb xyuas cov xwm txheej no yooj yim thiab tsis sib txawv los ntawm txoj kev muaj txiaj ntsig, peb tuaj nrog Kev Sib Txuas Txuas Ntxiv.

CI yog qhov chaw ua haujlwm uas koj muab koj cov lej sib xyaw rau hauv cov khoom lag luam tag nrho kom ntau li ntau tau. Thiab koj tsis tsuas yog kev sib koom ua ke, tab sis kuj xyuas tas li tias txhua yam ua haujlwm. Txij li thaum koj yuav tsum tau kuaj xyuas ntau thiab ntau zaus, nws tsim nyog xav txog automation. Koj tuaj yeem tshawb xyuas txhua yam manually, tab sis koj yuav tsum tsis txhob, thiab ntawm no yog vim li cas.

  • Nyob zoo cov neeg. Ib teev ntawm kev ua haujlwm ntawm ib tus programmer yog kim dua li ib teev ntawm kev ua haujlwm ntawm ib tus neeg rau zaub mov.
  • Tib neeg ua yuam kev. Yog li ntawd, cov xwm txheej yuav tshwm sim thaum cov kev ntsuam xyuas tau khiav ntawm ceg tsis ncaj ncees lawm lossis kev ua txhaum cai raug suav ua rau cov neeg sim.
  • Neeg tub nkeeg. Qee lub sij hawm, thaum kuv ua tiav ib txoj hauj lwm, qhov kev xav tshwm sim: "Yuav ua li cas thiaj kuaj tau? Kuv sau ob kab - txhua yam ua haujlwm! Kuv xav tias nej ib txhia kuj tej zaum kuj xav li ntawd thiab. Tab sis koj yuav tsum nco ntsoov xyuas.

Yuav ua li cas Kev Sib Txuas Nruam tau siv thiab tsim nyob rau hauv pab pawg txhim kho Avito mobile, lawv mus li cas los ntawm 0 txog 450 tsim ib hnub, thiab tsim cov tshuab sib sau ua ke 200 teev hauv ib hnub, hais tias Nikolai Nesterov (nnesterov) yog tus neeg koom nrog hauv txhua qhov kev hloov pauv hloov pauv ntawm CI / CD Android daim ntawv thov.

Zaj dab neeg yog ua raws li qhov piv txwv ntawm Android hais kom ua, tab sis feem ntau ntawm txoj hauv kev yog siv tau rau iOS thiab.


Muaj ib zaug, ib tug neeg ua haujlwm hauv pab pawg Avito Android. Los ntawm kev txhais, nws tsis xav tau dab tsi los ntawm Kev Sib Txuas Ntxiv: tsis muaj leej twg los koom nrog.

Tab sis daim ntawv thov loj hlob, ntau thiab ntau cov haujlwm tshiab tshwm sim, thiab pab pawg loj hlob raws li. Qee lub sij hawm, nws yog lub sijhawm los tsim kom muaj kev sib koom ua ke ntawm txoj cai. Nws tau txiav txim siab siv Git ntws.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Lub tswv yim ntawm Git ntws yog paub zoo: ib qhov project muaj ib qho kev txhim kho ceg, thiab rau txhua qhov tshiab, cov neeg tsim tawm txiav ib ceg, cog lus rau nws, thawb, thiab thaum lawv xav sib koom ua ke lawv cov cai rau hauv ceg tsim, qhib ib qho rub thov. Txhawm rau sib qhia kev paub thiab sib tham txog txoj hauv kev, peb tau qhia txog kev tshuaj xyuas cov cai, uas yog, cov npoj yaig yuav tsum kuaj xyuas thiab lees paub ib leeg tus lej.

Kev kuaj

Pom code nrog koj ob lub qhov muag txias, tab sis tsis txaus. Yog li ntawd, kev tshuaj xyuas tsis siv neeg raug qhia.

  • Ua ntej tshaj plaws, peb xyuas ARK sib dhos.
  • Ntau heev Junit xeem.
  • Peb xav txog kev them nyiaj code, txij li thaum peb tab tom khiav kev xeem.

Txhawm rau nkag siab tias cov tshev no yuav tsum tau ua li cas, cia peb saib cov txheej txheem txhim kho hauv Avito.

Nws tuaj yeem sawv cev schematically zoo li no:

  • Tus tsim tawm sau cov lej ntawm nws lub laptop. Koj tuaj yeem khiav kev txheeb xyuas kev sib koom ua ke ntawm no - nrog rau kev sib txuas lus, lossis tsuas yog khiav cov tshev hauv keeb kwm yav dhau.
  • Tom qab tus tsim tawm tau thawb tus lej, nws qhib qhov kev thov rub. Txhawm rau kom nws cov lej suav nrog hauv cov ceg tsim kho, nws yog qhov yuav tsum tau mus los ntawm kev tshuaj xyuas cov lej thiab sau cov lej yuav tsum tau lees paub. Koj tuaj yeem qhib cov tshev thiab tsim ntawm no: kom txog rau thaum txhua qhov kev tsim ua tiav, qhov kev thov rub tsis tuaj yeem muab sib xyaw.
  • Tom qab rub daim ntawv thov raug muab sib koom ua ke thiab cov lej suav nrog hauv kev txhim kho, koj tuaj yeem xaiv lub sijhawm yooj yim: piv txwv li, thaum hmo ntuj, thaum tag nrho cov servers dawb, thiab khiav ntau qhov kev txheeb xyuas raws li koj nyiam.

Tsis muaj leej twg nyiam khiav scans ntawm lawv lub laptop. Thaum tus tsim tawm tau ua tiav qhov tshwj xeeb, nws xav nrawm nrawm thiab qhib qhov kev thov rub. Yog tias lub sijhawm no qee qhov kev kuaj xyuas ntev tau pib, qhov no tsis yog tsuas yog tsis zoo siab, tab sis kuj ua rau kev loj hlob qeeb: thaum lub laptop tab tom kuaj xyuas ib yam dab tsi, nws tsis tuaj yeem ua haujlwm ib txwm rau nws.

Peb yeej nyiam khiav cov tshev thaum hmo ntuj, vim tias muaj ntau lub sijhawm thiab servers, koj tuaj yeem taug kev ncig. Tab sis, hmoov tsis, thaum lub feature code nkag mus rau hauv txoj kev loj hlob, tus tsim tawm muaj ntau tsawg zog los kho qhov yuam kev uas CI pom. Kuv ib txwm ntes kuv tus kheej xav thaum kuv saib tag nrho cov kev ua yuam kev pom nyob rau yav sawv ntxov qhia tias kuv yuav kho lawv ib hnub tom qab, vim tam sim no muaj ib txoj hauj lwm txias tshiab hauv Jira uas kuv tsuas yog xav pib ua.

Yog tias kev txheeb xyuas thaiv qhov kev thov rub tawm, ces muaj kev txhawb siab txaus, vim tias kom txog thaum kev tsim kho ntsuab ntsuab, cov cai yuav tsis nkag mus rau hauv kev tsim kho, uas txhais tau hais tias txoj haujlwm yuav tsis ua tiav.

Yog li ntawd, peb xaiv lub tswv yim hauv qab no: peb khiav qhov siab tshaj plaws ntawm cov tshev thaum hmo ntuj, thiab tso tawm qhov tseem ceeb tshaj plaws ntawm lawv thiab, qhov tseem ceeb tshaj plaws, qhov ceev tshaj plaws ntawm kev thov rub. Tab sis peb tsis nres qhov ntawd - nyob rau tib lub sijhawm, peb txhim kho qhov nrawm ntawm cov tshev thiaj li hloov lawv los ntawm hom hmo ntuj kom rub daim ntawv thov.

Lub sijhawm ntawd, tag nrho peb cov kev tsim kho tau ua tiav sai heev, yog li peb tsuas suav nrog ARK tsim, Junit xeem thiab cov lej them nyiaj suav ua tus thaiv rau kev thov rub. Peb tig nws rau, xav txog nws, thiab tso tseg txoj cai kev pab cuam vim peb xav tias peb tsis xav tau nws.

Nws tau siv peb ob hnub los teeb tsa CI theem pib (tom qab lub sijhawm kwv yees kwv yees, xav tau rau qhov ntsuas).

Tom qab ntawd, peb pib xav ntxiv - peb puas tseem kuaj xyuas kom raug? Puas yog peb tab tom khiav tsim ntawm kev thov rub kom raug?

Peb pib tsim ntawm qhov kev cog lus kawg ntawm ceg uas qhov kev thov rub tau qhib. Tab sis kev ntsuam xyuas ntawm qhov kev cog lus no tsuas yog qhia tau tias cov cai uas tus tsim tawm tau sau ua haujlwm. Tab sis lawv tsis ua pov thawj tias nws tsis ua txhaum dab tsi. Qhov tseeb, koj yuav tsum tau kuaj xyuas lub xeev ntawm kev txhim kho ceg tom qab ib qho kev sib koom ua ke rau hauv nws.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Ua li no, peb tau sau ib tsab ntawv bash yooj yim premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Ntawm no tag nrho cov kev hloov tshiab los ntawm kev txhim kho tsuas yog rub tawm thiab muab tso rau hauv ceg tam sim no. Peb ntxiv cov ntawv premerge.sh ua thawj kauj ruam hauv txhua qhov tsim thiab pib tshawb xyuas raws nraim qhov peb xav tau, uas yog kev koom ua ke.

Nws siv peb hnub los qhia qhov teeb meem, nrhiav kev daws teeb meem, thiab sau tsab ntawv no.

Daim ntawv thov tsim, ntau thiab ntau txoj haujlwm tshwm sim, pab pawg loj hlob, thiab premerge.sh qee zaum pib cia peb poob. Develop muaj kev tsis sib haum xeeb kev hloov pauv uas rhuav lub tsim.

Ib qho piv txwv ntawm qhov no tshwm sim:

Evolution ntawm CI hauv pab pawg txhim kho mobile

Ob tus neeg tsim khoom ib txhij pib ua haujlwm ntawm cov yam ntxwv A thiab B. Tus tsim tawm feature A pom qhov tsis siv hauv qhov project answer() thiab, zoo li ib tug me nyuam tub zoo, tshem nws. Nyob rau tib lub sijhawm, tus tsim tawm ntawm feature B ntxiv kev hu tshiab rau txoj haujlwm no hauv nws ceg.

Cov neeg tsim khoom ua tiav lawv txoj haujlwm thiab qhib qhov kev thov rub tib lub sijhawm. Cov kev tsim yog launched, premerge.sh checks ob rub thov hais txog qhov tseeb tsim lub xeev - tag nrho cov checks yog ntsuab. Tom qab ntawd, rub qhov kev thov ntawm feature A yog merged, rub thov ntawm feature B yog merged... Boom! Tsim kev tawg vim hais tias txoj cai tsim muaj ib qho kev hu mus rau qhov tsis muaj nuj nqi.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Thaum nws tsis mus txhim kho, nws yog kev puas tsuaj hauv zos. Tag nrho pab neeg tsis tuaj yeem sau ib yam dab tsi thiab xa mus rau kev sim.

Nws thiaj li tshwm sim uas kuv feem ntau ua hauj lwm rau cov hauj lwm infrastructure: analytics, network, databases. Ntawd yog, nws yog kuv uas tau sau cov haujlwm thiab cov chav kawm uas lwm tus neeg tsim khoom siv. Vim li no, kuv pom kuv tus kheej hauv cov xwm txheej zoo sib xws ntau zaus. Kuv txawm muaj daim duab no dai rau ib pliag.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Txij li qhov no tsis haum rau peb, peb pib tshawb nrhiav cov kev xaiv los tiv thaiv qhov no.

Yuav ua li cas tsis ua txhaum kev loj hlob

Thawj qhov kev xaiv: rebuild tag nrho rub thov thaum hloov kho tsim. Yog tias, hauv peb qhov piv txwv, qhov kev thov rub nrog feature A yog thawj qhov yuav tsum tau suav nrog hauv kev txhim kho, qhov kev thov rub ntawm feature B yuav rov tsim dua, thiab, raws li, cov tshev yuav poob vim qhov yuam kev muab tso ua ke.

Txhawm rau nkag siab tias qhov no yuav siv sijhawm ntev npaum li cas, xav txog qhov piv txwv nrog ob PRs. Peb qhib ob lub PRs: ob qho kev tsim, ob qho kev kuaj xyuas. Tom qab thawj PR tau muab tso rau hauv kev txhim kho, qhov thib ob yuav tsum tau rov ua dua. Nyob rau hauv tag nrho, ob PRs xav tau peb qhov kev kuaj xyuas: 2 + 1 = 3.

Hauv txoj cai, nws zoo. Tab sis peb saib ntawm cov txheeb cais, thiab qhov xwm txheej hauv peb pab pawg yog 10 qhib PRs, thiab tom qab ntawd tus lej ntawm cov tshev yog cov lej ntawm qhov kev nce qib: 10 + 9 + ... + 1 = 55. Qhov ntawd yog, lees txais 10. PRs, koj yuav tsum rov tsim dua 55 zaug. Thiab qhov no yog qhov xwm txheej zoo tshaj plaws, thaum txhua qhov kev kuaj xyuas dhau thawj zaug, thaum tsis muaj leej twg qhib qhov kev thov rub ntxiv thaum lub kaum ob no tau ua tiav.

Xav txog koj tus kheej li tus tsim tawm uas yuav tsum yog thawj zaug nyem rau ntawm lub pob "merge", vim tias yog ib tus neeg nyob ze ua qhov no, ces koj yuav tsum tau tos kom txog thaum tag nrho cov kev tsim rov qab ... Tsis yog, qhov ntawd yuav tsis ua haujlwm. , nws yuav ua rau kev loj hlob qeeb.

Txoj kev thib ob ua tau: sau rub cov lus thov tom qab tshuaj xyuas cov lej. Ntawd yog, koj qhib qhov kev thov rub tawm, sau cov lej xav tau ntawm kev pom zoo los ntawm cov npoj yaig, kho qhov xav tau, thiab tom qab ntawd tso tawm qhov tsim. Yog tias lawv ua tiav, qhov kev thov rub tau muab tso rau hauv kev txhim kho. Hauv qhov no, tsis muaj kev rov pib dua ntxiv, tab sis cov lus teb tau qeeb heev. Raws li tus tsim tawm, thaum kuv qhib qhov kev thov rub, kuv xav pom tam sim ntawd nws puas yuav ua haujlwm. Piv txwv li, yog tias qhov kev sim ua tsis tiav, koj yuav tsum kho sai sai. Nyob rau hauv cov ntaub ntawv ntawm ib tug ncua kev tsim, tawm tswv yim slows down, thiab yog li ntawd tag nrho cov kev loj hlob. Qhov no tsis haum peb thiab.

Yog li ntawd, tsuas yog qhov kev xaiv thib peb tseem nyob - caij tsheb kauj vab. Tag nrho peb cov cai, tag nrho peb cov peev txheej tau muab cia rau hauv qhov chaw cia ntawm Bitbucket server. Raws li, peb yuav tsum tsim lub plugin rau Bitbucket.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Qhov no plugin overrides lub rub thov merging mechanism. Qhov pib yog tus qauv: PR qhib, txhua lub rooj sib tham tau pib, kev tshuaj xyuas cov cai tiav. Tab sis tom qab kev tshuaj xyuas cov cai tiav thiab tus tsim tawm txiav txim siab nyem rau ntawm "merge", lub plugin kuaj xyuas qhov twg tsim lub xeev cov tshev tau khiav. Yog tias kev txhim kho tau hloov kho tom qab tsim, lub plugin yuav tsis tso cai rau qhov kev thov rub mus rau hauv cov ceg tseem ceeb. Nws tsuas yog yuav rov pib dua qhov tsim ntawm qhov kev txhim kho tsis ntev los no.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Hauv peb qhov piv txwv nrog cov kev hloov pauv tsis sib haum, cov kev tsim no yuav ua tsis tiav vim qhov yuam kev sib sau ua ke. Raws li, tus tsim tawm ntawm feature B yuav tau kho cov cai, rov pib dua cov tshev, tom qab ntawd lub plugin yuav cia li siv qhov kev thov rub.

Ua ntej siv cov plugin no, peb nruab nrab 2,7 tshuaj xyuas sau ib daim ntawv thov rub. Nrog lub plugin muaj 3,6 launches. Qhov no haum rau peb.

Nws tsim nyog sau cia tias qhov plugin no muaj qhov tsis zoo: nws tsuas yog rov pib tsim ib zaug. Ntawd yog, tseem muaj lub qhov rais me me los ntawm qhov kev hloov pauv tsis sib haum tuaj yeem tsim kho. Tab sis qhov ua tau ntawm qhov no yog qhov tsawg, thiab peb tau ua qhov kev lag luam tawm ntawm tus naj npawb ntawm qhov pib thiab qhov yuav ua tsis tiav. Hauv ob xyoos nws tsuas yog raug rho tawm haujlwm ib zaug, yog li nws tsis yog qhov tsis muaj dab tsi.

Nws siv peb ob lub lis piam los sau thawj version ntawm Bitbucket plugin.

Kev kuaj tshiab

Lub caij no, peb pab neeg txuas ntxiv mus. Cov tshev tshiab tau ntxiv lawm.

Peb xav tias: vim li cas thiaj ua yuam kev yog tias lawv tuaj yeem tiv thaiv tau? Thiab yog vim li cas lawv tau siv static code tsom xam. Peb pib nrog lint, uas suav nrog hauv Android SDK. Tab sis lub sijhawm ntawd nws tsis paub yuav ua li cas nrog Kotlin code txhua, thiab peb twb muaj 75% ntawm daim ntawv thov sau rau hauv Kotlin. Yog li ntawd, built-in sawv daws yuav ntxiv rau lint Android Studio kuaj xyuas.

Txhawm rau ua qhov no, peb yuav tsum ua ntau yam kev tsis ncaj ncees: nqa Android Studio, ntim nws hauv Docker thiab khiav nws ntawm CI nrog lub ntsuas ntsuas virtual, kom nws xav tias nws khiav ntawm lub laptop tiag tiag. Tab sis nws ua haujlwm.

Nws kuj yog lub sijhawm no uas peb pib sau ntau heev ntsuas ntsuas thiab siv tau screenshot kuaj. Qhov no yog thaum qhov kev siv screenshot yog tsim los rau kev saib me me, thiab qhov kev sim no suav nrog kev thaij duab los ntawm kev saib thiab muab piv nrog tus qauv ncaj qha los ntawm pixel. Yog tias muaj qhov tsis sib xws, nws txhais tau hais tias qhov kev teeb tsa tau mus qhov twg los yog ib yam dab tsi tsis ncaj ncees lawm hauv cov qauv.

Tab sis kev ntsuas ntsuas thiab ntsuas ntsuas ntsuas yuav tsum tau khiav ntawm cov khoom siv: ntawm emulators lossis ntawm cov khoom siv tiag tiag. Xav tias muaj ntau qhov kev sim thiab lawv tau khiav ntau zaus, ib qho kev ua liaj ua teb tag nrho yog xav tau. Pib koj tus kheej ua liaj ua teb yog kev siv zog ntau dhau, yog li peb pom qhov kev npaj ua tiav - Firebase Test Lab.

firebase test lab

Nws raug xaiv vim Firebase yog Google cov khoom, txhais tau tias nws yuav tsum ntseeg tau thiab tsis zoo li yuav tuag. Cov nqi tsim nyog: $ 5 ib teev ntawm kev ua haujlwm ntawm lub cuab yeej tiag, 1 $ ib teev ntawm kev ua haujlwm ntawm lub emulator.

Nws siv li peb lub lis piam los siv Firebase Test Lab rau hauv peb CI.

Tab sis pab pawg tau loj hlob ntxiv, thiab Firebase, hmoov tsis, pib cia peb poob. Lub sijhawm ntawd, nws tsis muaj SLA. Qee lub sij hawm Firebase ua rau peb tos kom txog thaum tus lej xav tau pub dawb rau kev sim, thiab tsis tau pib ua tiav tam sim ntawd, raws li peb xav tau. Tos nyob rau hauv kab coj mus txog ib nrab ib teev, uas yog lub sij hawm ntev heev. Kev ntsuas ntsuas tau khiav ntawm txhua qhov PR, qeeb qeeb qeeb ntawm txoj kev loj hlob, thiab tom qab ntawd daim nqi txhua hli tuaj nrog cov lej sib npaug. Feem ntau, nws tau txiav txim siab tso tseg Firebase thiab ua haujlwm hauv tsev, txij li pab pawg tau loj hlob txaus.

Docker + Python + bash

Peb coj Docker, ntim cov emulators rau hauv nws, sau ib qho kev pab cuam yooj yim hauv Python, uas thaum lub sijhawm tsim nyog coj tus lej ntawm cov emulators hauv qhov xav tau version thiab nres lawv thaum tsim nyog. Thiab, ntawm chav kawm, ob peb bash scripts - qhov twg peb yuav tsis muaj lawv?

Nws siv tsib lub lis piam los tsim peb tus kheej qhov chaw sim.

Raws li qhov tshwm sim, rau txhua qhov kev thov rub tawm muaj ib qho kev sib koom ua ke-thaiv cov npe ntawm cov tshev:

  • ARK sib dhos;
  • Junit xeem;
  • Lint;
  • Android Studio kuaj xyuas;
  • Kev ntsuas ntsuas;
  • Screenshot xeem.

Qhov no tiv thaiv ntau yam kev puas tsuaj. Technically txhua yam ua haujlwm, tab sis cov neeg tsim khoom yws yws tias kev tos rau cov txiaj ntsig tau ntev dhau lawm.

Ntev npaum li cas? Peb xa cov ntaub ntawv los ntawm Bitbucket thiab TeamCity mus rau hauv qhov kev tshuaj ntsuam xyuas thiab pom tau tias nruab nrab tos lub sij hawm 45 feeb. Ntawd yog, tus tsim tawm, thaum qhib qhov kev thov rub, tos qhov nruab nrab 45 feeb rau kev tsim cov txiaj ntsig. Hauv kuv lub tswv yim, qhov no yog ntau, thiab koj tsis tuaj yeem ua haujlwm zoo li ntawd.

Tau kawg, peb tau txiav txim siab ua kom tag nrho peb cov kev tsim.

Cia kom ceev

Pom tias cov tsim feem ntau sawv hauv ib kab, thawj qhov peb ua yog yuav khoom kho vajtse ntxiv - kev loj hlob dav dav yog qhov yooj yim tshaj plaws. Kev tsim kho tau nres queuing, tab sis lub sijhawm tos tsuas yog txo qis me ntsis, vim qee qhov kev kuaj xyuas lawv tus kheej siv sijhawm ntev heev.

Tshem tawm cov tshev uas siv sijhawm ntev heev

Peb Qhov Kev Sib Txuas Nruam tuaj yeem ntes cov hom kev ua yuam kev thiab teeb meem.

  • Tsis mus. CI tuaj yeem ntes qhov yuam kev sib sau thaum ib yam dab tsi tsis tsim vim qhov tsis sib haum xeeb hloov pauv. Raws li kuv twb tau hais lawm, ces tsis muaj leej twg tuaj yeem sib sau ua ke, kev txhim kho nres, thiab txhua tus tau poob siab.
  • Kab mob hauv tus cwj pwm. Piv txwv li, thaum daim ntawv thov raug tsim, tab sis tsoo thaum koj nias lub pob, lossis lub pob tsis nias txhua. Qhov no yog qhov phem vim tias cov kab no tuaj yeem ncav cuag tus neeg siv.
  • Kab laum hauv layout. Piv txwv li, ib lub pob nyem, tab sis tau txav 10 pixels mus rau sab laug.
  • Nce hauv cov nuj nqis technical.

Tom qab saib cov npe no, peb pom tau tias tsuas yog thawj ob lub ntsiab lus tseem ceeb. Peb xav ntes cov teeb meem no ua ntej. Kab laum nyob rau hauv qhov layout tau pom nyob rau theem tsim- tshuaj xyuas thiab tuaj yeem kho tau yooj yim tom qab ntawd. Kev daws cov nuj nqis technical yuav tsum muaj cov txheej txheem sib cais thiab kev npaj, yog li peb txiav txim siab tsis sim nws ntawm kev thov rub.

Raws li qhov kev faib tawm no, peb tau tuav tag nrho cov npe ntawm cov tshev. Hla tawm Lint thiab ncua nws tso tawm ib hmos: tsuas yog kom nws yuav tsim ib daim ntawv qhia txog muaj pes tsawg qhov teeb meem nyob rau hauv qhov project. Peb tau pom zoo ua haujlwm sib cais nrog cov nuj nqis technical, thiab Android Studio checks raug tso tseg kiag li. Android Studio hauv Docker rau kev soj ntsuam ua suab nrov, tab sis ua rau muaj teeb meem ntau hauv kev txhawb nqa. Txhua qhov hloov tshiab rau Android Studio versions txhais tau tias muaj kev tawm tsam nrog cov kab tsis nkag siab. Nws kuj yog ib qho nyuaj rau kev txhawb nqa kev ntsuam xyuas screenshot, vim tias lub tsev qiv ntawv tsis ruaj khov thiab muaj qhov tsis zoo. Cov tshuaj ntsuam xyuas tau raug tshem tawm ntawm daim ntawv txheeb xyuas.

Raws li qhov tshwm sim, peb tau sab laug nrog:

  • ARK sib dhos;
  • Junit xeem;
  • Kev ntsuas ntsuas.

Gradle tej thaj chaw deb cache

Yog tsis muaj kev kuaj hnyav, txhua yam ua tau zoo dua. Tab sis tsis muaj kev txwv rau kev ua tiav!

Peb daim ntawv thov twb tau muab faib ua 150 gradle modules. Gradle tej thaj chaw deb cache feem ntau ua haujlwm zoo hauv qhov no, yog li peb txiav txim siab sim nws.

Gradle tej thaj chaw deb cache yog ib qho kev pabcuam uas tuaj yeem cache tsim cov khoom qub rau ib tus neeg ua haujlwm hauv ib tus qauv. Gradle, es tsis txhob muab tso ua ke cov cai, siv HTTP los khob ntawm cov chaw taws teeb cache thiab nug seb ib tus neeg puas tau ua txoj haujlwm no lawm. Yog tias muaj, nws tsuas yog rub tawm qhov tshwm sim.

Khiav Gradle tej thaj chaw deb cache yog ib qho yooj yim vim Gradle muab cov duab Docker. Peb tswj tau ua qhov no hauv peb teev.

Txhua yam koj yuav tsum tau ua yog tso Docker thiab sau ib kab hauv qhov project. Tab sis txawm hais tias nws tuaj yeem tso tawm sai sai, nws yuav siv sijhawm ntau heev rau txhua yam ua haujlwm zoo.

Hauv qab no yog lub cache nco daim duab.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Thaum pib, qhov feem pua ​​​​ntawm cov cache tsis nco qab yog li 65. Tom qab peb lub lis piam, peb tswj kom nce tus nqi no mus rau 20%. Nws muab tawm tias cov dej num uas Android daim ntawv thov sau muaj kev hloov pauv txawv txav, vim tias Gradle tsis nco lub cache.

Los ntawm kev sib txuas cov cache, peb ua kom nrawm heev ntawm kev tsim. Tab sis ntxiv rau kev sib sau ua ke, kuj tseem muaj kev ntsuas ntsuas, thiab lawv siv sijhawm ntev. Tej zaum tsis yog txhua qhov kev xeem yuav tsum tau khiav rau txhua qhov kev thov rub. Txhawm rau kom paub, peb siv qhov kev ntsuam xyuas cuam tshuam.

Kev soj ntsuam cuam tshuam

Ntawm qhov kev thov rub, peb sau git diff thiab nrhiav qhov hloov kho Gradle modules.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Nws ua rau kev txiav txim siab tsuas yog khiav cov kev ntsuas ntsuas uas kuaj xyuas cov hloov pauv thiab txhua qhov modules nyob ntawm lawv. Tsis muaj qhov taw tes hauv kev sim khiav rau cov neeg nyob sib ze: cov cai muaj tsis tau hloov thiab tsis muaj dab tsi tuaj yeem tawg.

Nrog rau kev ntsuas ntsuas, tsis yog txhua yam yooj yim heev, vim tias lawv yuav tsum nyob rau hauv daim ntawv thov saum toj kawg nkaus. Peb siv heuristics nrog bytecode tsom xam kom nkag siab txog qhov twg module txhua qhov kev xeem belongs rau.

Kev kho dua tshiab ntawm kev ua haujlwm ntawm kev ntsuas ntsuas kom lawv tsuas yog sim cov modules koom nrog siv li yim lub lis piam.

Kev ntsuas kom ceev cov kev soj ntsuam tau ua tiav. Los ntawm 45 feeb peb nce mus txog 15. Nws yog ib txwm tos ib lub hlis twg ntawm ib teev rau kev tsim.

Tab sis tam sim no cov neeg tsim khoom tau pib yws tias lawv tsis nkag siab qhov twg tsim tau raug tsim tawm, qhov twg pom lub cav, vim li cas qhov tsim yog liab, qhov kev sim ua tsis tiav, thiab lwm yam.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Cov teeb meem nrog kev tawm tswv yim ua rau kev loj hlob qeeb, yog li peb tau sim muab cov ntaub ntawv meej thiab meej txog txhua PR thiab tsim kom muaj peev xwm. Peb pib nrog cov lus pom hauv Bitbucket rau PR, qhia tias qhov twg tsim tau ua tsis tiav thiab yog vim li cas, thiab sau cov ntsiab lus hauv Slack. Thaum kawg, peb tsim PR dashboard rau nplooj ntawv nrog cov npe ntawm txhua qhov kev tsim kho uas tam sim no khiav thiab lawv cov xwm txheej: queued, khiav, poob lossis ua tiav. Koj tuaj yeem nyem rau ntawm qhov tsim thiab mus rau nws lub cav.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Rau lub lis piam tau siv rau cov lus qhia ntxaws.

Cov Tswv Yim

Cia wb mus saib keeb kwm yav dhau los. Tau daws qhov teeb meem tawm tswv yim, peb tau mus txog qib tshiab - peb txiav txim siab los tsim peb tus kheej emulator ua liaj ua teb. Thaum muaj ntau yam kev xeem thiab emulators, lawv nyuaj rau tswj. Raws li qhov tshwm sim, tag nrho peb cov emulators tau tsiv mus rau k8s pawg nrog kev tswj hwm cov peev txheej hloov tau.

Tsis tas li ntawd, muaj lwm txoj kev npaj.

  • Rov qab Lint (thiab lwm yam kev soj ntsuam zoo li qub). Peb twb ua hauj lwm nyob rau hauv cov kev taw qhia no.
  • Khiav txhua yam ntawm PR blocker qhov kawg-rau-kawg xeem ntawm tag nrho SDK versions.

Yog li, peb tau taug qab cov keeb kwm ntawm kev txhim kho ntawm Kev Sib Txuas Nruam hauv Avito. Tam sim no kuv xav muab qee cov lus qhia los ntawm kev paub txog qhov pom.

Lub tswv yim

Yog tias kuv tuaj yeem muab ib qho lus qhia xwb nws yuav yog qhov no:

Thov ceev faj nrog cov ntawv plhaub!

Bash yog cov cuab yeej hloov tau yooj yim thiab muaj zog heev, nws yooj yim heev thiab nrawm los sau cov ntawv. Tab sis koj tuaj yeem poob rau hauv qhov ntxiab nrog nws, thiab, hmoov tsis, peb poob rau hauv nws.

Nws tag nrho pib nrog cov ntawv yooj yim uas khiav ntawm peb lub tshuab tsim:

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

Tab sis, raws li koj paub, txhua yam txhim kho thiab dhau los ua qhov nyuaj nyob rau lub sijhawm - cia peb khiav ib tsab ntawv los ntawm lwm tus, cia peb hla qee qhov tsis muaj - thaum kawg peb yuav tsum tau sau ib txoj haujlwm uas txiav txim siab txog qib twg ntawm bash zes peb tam sim no nyob rau hauv kev txiav txim. txhawm rau ntxig cov quotes tsim nyog, kom nws pib tag nrho.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Koj tuaj yeem xav txog cov nqi zog rau kev tsim cov ntawv sau zoo li no. Kuv qhia koj kom tsis txhob poob rau hauv qhov ntxiab no.

Dab tsi tuaj yeem hloov tau?

  • Ib hom lus sau ntawv. Sau rau Python lossis Kotlin Script yooj yim dua vim nws yog programming, tsis scripts.
  • Los yog piav qhia tag nrho cov tsim logic hauv daim ntawv Custom gradle tej hauj lwm rau koj qhov project.

Peb tau txiav txim siab xaiv qhov kev xaiv thib ob, thiab tam sim no peb tau tshem tawm tag nrho cov ntawv sau bash thiab sau ntau yam kev cai ua haujlwm.

Tswv yim #2: Khaws cov txheej txheem hauv cov cai.

Nws yog qhov yooj yim thaum qhov kev sib koom ua ke tsis tu ncua yog khaws cia tsis nyob hauv UI interface ntawm Jenkins lossis TeamCity, thiab lwm yam, tab sis nyob rau hauv daim ntawv ntawm cov ntawv nyeem ncaj qha hauv qhov project repository. Qhov no muab versionability. Nws yuav tsis yooj yim rau rollback los yog tsim cov cai ntawm lwm ceg.

Cov ntawv sau tuaj yeem khaws cia hauv qhov project. Yuav ua li cas rau ib puag ncig?

Tswv yim #3: Docker tuaj yeem pab nrog ib puag ncig.

Nws yeej yuav pab tau Android developers; iOS no tseem tsis tau muaj, hmoov tsis.

Nov yog ib qho piv txwv ntawm cov ntaub ntawv docker yooj yim uas muaj jdk thiab hauv-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

Tau sau cov ntaub ntawv Docker no (Kuv mam li qhia rau koj paub tsis pub leejtwg paub, koj tsis tas yuav sau nws, tab sis tsuas yog rub nws npaj ua los ntawm GitHub) thiab sib sau cov duab, koj tau txais lub tshuab virtual uas koj tuaj yeem tsim daim ntawv thov. thiab khiav Junit xeem.

Ob lub ntsiab yog vim li cas qhov no ua rau kev nkag siab yog scalability thiab repeatability. Siv docker, koj tuaj yeem nce lub kaum ob tus neeg ua haujlwm sai sai uas yuav muaj ib puag ncig zoo ib yam li yav dhau los. Qhov no ua rau lub neej ntawm CI engineers yooj yim dua. Nws yooj yim heev los thawb lub hauv xov tooj ntawd-sdk rau hauv docker, tab sis nrog emulators nws nyuaj me ntsis: koj yuav tau ua hauj lwm me ntsis nyuaj (los yog rub tawm ib qho tiav los ntawm GitHub dua).

Tswv yim 4: Tsis txhob hnov ​​​​qab tias kev tshuaj xyuas tsis yog ua rau kev kuaj xyuas, tab sis rau tib neeg.

Ceev ceev thiab, qhov tseem ceeb tshaj, cov lus qhia meej yog qhov tseem ceeb heev rau cov neeg tsim khoom: dab tsi tawg, qhov kev sim ua tsis tiav, qhov twg kuv tuaj yeem pom cov buildlog.

Tswv yim # 5: Ua tau zoo thaum tsim kev sib koom ua ke tsis tu ncua.

Kom nkag siab meej txog hom kev ua yuam kev uas koj xav tiv thaiv, ntau npaum li cas cov peev txheej, sijhawm, thiab lub sijhawm siv computer uas koj txaus siab siv. Cov tshev uas siv sij hawm ntev heev, piv txwv li, yuav raug ncua ib hmos. Thiab cov ntawm lawv uas ntes tsis tseem ceeb heev yuam kev yuav tsum tau tso tseg kiag li.

Tswv yim #6: Siv cov cuab yeej npaj txhij.

Tam sim no muaj ntau lub tuam txhab uas muab huab CI.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Qhov no yog ib qho kev daws teeb meem zoo rau cov pab pawg me. Koj tsis tas yuav txhawb nqa dab tsi, tsuas yog them nyiaj me ntsis, tsim koj daim ntawv thov thiab txawm tias khiav ntsuas ntsuas.

Tswv yim #7: Hauv pab pawg loj, cov kev daws teeb meem hauv tsev muaj txiaj ntsig ntau dua.

Tab sis tsis ntev los sis tom qab, thaum pab neeg loj hlob tuaj, cov kev daws teeb meem hauv tsev yuav tau txais txiaj ntsig ntau dua. Muaj ib qho teeb meem nrog cov kev txiav txim siab no. Muaj ib txoj cai ntawm kev txo qis rov qab los ntawm kev lag luam: hauv txhua qhov project, txhua qhov kev txhim kho tom ntej yog ntau thiab nyuaj thiab yuav tsum tau nqis peev ntau thiab ntau dua.

Kev lag luam piav qhia peb lub neej tag nrho, suav nrog Kev Sib Txuas Ntxiv. Kuv tau tsim ib lub sijhawm ntawm cov nqi ua haujlwm rau txhua theem ntawm kev txhim kho ntawm peb Kev Sib Txuas Txuas Ntxiv.

Evolution ntawm CI hauv pab pawg txhim kho mobile

Nws yog qhov tseeb tias txhua qhov kev txhim kho tau dhau los ua nyuaj dua. Saib ntawm daim duab no, koj tuaj yeem nkag siab tias Kev Sib Txuas Nruam yuav tsum tau tsim kho raws li kev loj hlob ntawm pab pawg loj. Rau ib pab neeg ntawm ob tug neeg, siv 50 hnub los tsim ib qho kev ua liaj ua teb sab hauv emulator yog lub tswv yim nruab nrab. Tab sis tib lub sijhawm, rau ib pab pawg loj, tsis ua Kev Sib Txuas Txuas Ntxiv txhua qhov tseem yog lub tswv yim tsis zoo, vim muaj teeb meem kev koom ua ke, kho kev sib txuas lus, thiab lwm yam. nws yuav siv sij hawm ntau dua.

Peb pib nrog lub tswv yim tias automation xav tau vim tib neeg kim, lawv ua yuam kev thiab tub nkeeg. Tab sis tib neeg kuj automate. Yog li ntawd, tag nrho cov teeb meem tib yam siv rau automation.

  • Automation yog kim. Nco ntsoov lub sijhawm ua haujlwm.
  • Thaum nws los txog rau automation, tib neeg ua yuam kev.
  • Qee lub sij hawm nws tub nkeeg heev rau automate, vim txhua yam ua haujlwm li ntawd. Vim li cas ho txhim kho lwm yam ntxiv, vim li cas tag nrho cov Kev Sib Txuas Nruam no?

Tab sis kuv muaj kev txheeb cais: qhov yuam kev raug ntes hauv 20% ntawm cov rooj sib txoos. Thiab qhov no tsis yog vim peb cov neeg tsim khoom sau cov lej tsis zoo. Qhov no yog vim cov neeg tsim khoom muaj kev ntseeg siab tias yog lawv ua yuam kev, nws yuav tsis xaus rau hauv kev tsim kho, nws yuav raug ntes los ntawm kev txheeb xyuas tsis siv neeg. Yog li ntawd, cov neeg tsim khoom tuaj yeem siv sijhawm ntau dua los sau cov lej thiab cov khoom nthuav dav, tsis yog khiav thiab sim qee yam hauv zos.

Xyaum kev koom ua ke tsis tu ncua. Tab sis nyob rau hauv moderation.

Los ntawm txoj kev, Nikolai Nesterov tsis tsuas yog muab cov lus ceeb toom zoo rau nws tus kheej, tab sis kuj yog ib tug tswv cuab ntawm pawg neeg ua haujlwm. AppsConf thiab pab lwm tus npaj cov lus muaj txiaj ntsig rau koj. Qhov ua tiav thiab muaj txiaj ntsig ntawm qhov kev sib tham tom ntej tuaj yeem raug soj ntsuam los ntawm cov ncauj lus hauv teem caij. Thiab kom paub meej, tuaj rau Infospace lub Plaub Hlis 22-23.

Tau qhov twg los: www.hab.com

Ntxiv ib saib