Masiku ano, mapulogalamu ambiri a mapulogalamu amapangidwa m'magulu. Mikhalidwe ya chitukuko cha timu yopambana ikhoza kuyimiridwa mwa mawonekedwe osavuta.
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.
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.
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.
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.
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.
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.
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.
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.