ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

I kēia lā, hoʻomohala ʻia ka hapa nui o nā huahana lako polokalamu i nā hui. Hiki ke hōʻuluʻulu ʻia nā kūlana no ka holomua i ka hoʻomohala ʻana i ka hui ma kahi kiʻi maʻalahi.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Ma hope o ke kākau ʻana i ke code, pono ʻoe e hōʻoia:

  1. Ke hana nei.
  2. ʻAʻole ia e uhaʻi i kekahi mea, me ke code i kākau ai kāu mau hoa hana.

Inā hoʻokō ʻia nā kūlana ʻelua, a laila ke hele nei ʻoe i ka holomua. No ka nānā maʻalahi i kēia mau kūlana a ʻaʻole e hoʻopau i ke ala kūpono, ua hele mai lākou me Continuous Integration.

ʻO CI kahi kaʻina hana kahi āu e hoʻohui ai i kāu code i loko o ka code huahana holoʻokoʻa i ka manawa hiki. A ʻaʻole hoʻohui wale, akā e nānā mau i ka hana ʻana o nā mea āpau. No ka mea pono ʻoe e nānā nui a pinepine, pono ʻoe e noʻonoʻo e pili ana i ka automation. Hiki iā ʻoe ke nānā i nā mea āpau ma ka traction manual, akā ʻaʻole pono ʻoe, a eia ke kumu.

  • E nā kānaka aloha. ʻOi aku ka nui o ka hola hana o kekahi mea polokalamu ma mua o hoʻokahi hola o ka hana o kekahi kikowaena.
  • hewa nā kānaka. No laila, hiki mai nā kūlana ke holo ʻia nā hoʻāʻo ma ka lālā hewa a i ʻole e hōʻiliʻili i ka hana hewa no nā mea hōʻike.
  • Moloā nā kānaka. I kēlā me kēia manawa, ke hoʻopau wau i kekahi hana, loaʻa iaʻu kahi manaʻo: "He aha ka mea e nānā ai? Ua kākau au i ʻelua laina - holo pono nā mea a pau! Manaʻo wau he mau manaʻo like kekahi o ʻoukou i kekahi manawa. Akā e nānā mau ʻoe.

Hōʻike ʻo Nikolay Nesterov i ka hoʻokō ʻana a hoʻomohala ʻia ʻo Continuous Integration i ka hui hoʻomohala kelepona ʻo Avito, pehea lākou i loaʻa ai mai 0 a 450 mau hale i kēlā me kēia lā, a pehea e hui ai nā mīkini i 200 mau hola i ka lā (nnesterov) he mea komo i nā hoʻololi evolutionary āpau o ka noi CI / CD Android.

Hoʻokumu ʻia ka moʻolelo ma ka laʻana o ka hui Android, akā pili ka hapa nui o nā ala ma iOS.


I kekahi manawa, hana kekahi kanaka ma ka hui Android o Avito. Ma ka wehewehe ʻana, ʻaʻole pono ʻo ia i kekahi mea mai Continuous Integration: ʻaʻohe mea e hoʻohui pū me.

Akā ua ulu ka noi, ua ʻike hou ʻia nā hana hou, a ua ulu ka hui e like me ia. I kekahi manawa, ua hiki i ka manawa e hoʻokumu i ke kaʻina hana o ka hoʻohui ʻana i ke code. Ua hoʻoholo ʻia e hoʻohana i ka kahe Git.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Ua ʻike maikaʻi ʻia ka manaʻo o ka kahe ʻana o Git: hoʻokahi lālā hoʻomohala maʻamau ka papahana, a no kēlā me kēia hiʻohiʻona hou, ʻoki nā mea hoʻomohala i kahi lālā ʻokoʻa, hoʻokō iā ia, paʻi, a makemake lākou e ninini i kā lākou code i ka lālā hoʻomohala, wehe i kahi noi huki. No ka kaʻana like ʻana i ka ʻike a kūkākūkā i nā ala, ua hoʻokomo mākou i ka loiloi code, ʻo ia hoʻi, pono nā hoa hana e nānā a hōʻoia i ke code o kēlā me kēia.

Nānā

ʻO ka nānā ʻana i ke code me kou mau maka ʻoluʻolu, akā ʻaʻole lawa. No laila, hoʻokomo ʻia nā loiloi ʻakomi.

  • ʻO ka mea mua, nānā mākou Hui ARC.
  • Nui Nā ho'āʻo Junit.
  • Manaʻo mākou i ka uhi code, ʻoiai mākou e holo nei i nā hoʻokolohua.

No ka hoʻomaopopo ʻana i ka holo ʻana o kēia mau loiloi, e nānā kākou i ke kaʻina hana hoʻomohala ma Avito.

Schematically, hiki ke hōʻike ʻia penei:

  • Kākau kekahi mea hoʻomohala i ke code ma kāna kamepiula. Hiki iā ʻoe ke holo i nā loiloi hoʻohui ʻia ma aneʻi - ma ke ʻano he commit hook, a i ʻole e holo i nā loiloi ma hope.
  • Ma hope o ka paʻi ʻana o ka mea hoʻomohala i ke code, wehe ʻo ia i kahi noi huki. I mea e komo ai kāna code i ka lālā hoʻomohala, pono e hāʻawi i kahi loiloi code a hōʻiliʻili i ka helu i koi ʻia o nā hōʻoia. Hiki iā ʻoe ke ʻae i nā loiloi a kūkulu ʻia ma ʻaneʻi: a hiki i ka holomua o nā kūkulu āpau, ʻaʻole hiki ke hoʻohui ʻia ka noi huki.
  • Ma hope o ka hoʻohui ʻia ʻana o ka noi huki a hoʻomohala ʻia ke code, hiki iā ʻoe ke koho i kahi manawa kūpono: no ka laʻana, i ka pō, ke manuahi nā kikowaena āpau, a holo i nā loiloi e like me kou makemake.

ʻAʻohe mea makemake i ka holo ʻana i nā loiloi ma kā lākou kamepiula. Ke hoʻopau ka mea hoʻomohala i kahi hiʻohiʻona, makemake lākou e pana koke a wehe i kahi noi huki. Inā hoʻomaka kekahi mau loiloi lōʻihi i kēia manawa, ʻaʻole ʻoluʻolu wale kēia, akā e hoʻolōʻihi i ka hoʻomohala ʻana: ʻoiai ke nānā nei ka pona i kekahi mea, ʻaʻole hiki ke hana maʻamau.

Ua makemake nui mākou i ka holo ʻana i nā loiloi i ka pō, no ka mea he nui ka manawa a me nā kikowaena, hiki iā ʻoe ke holo. Akā, ʻo ka mea pōʻino, i ka wā i hoʻomohala ai ka code hiʻohiʻona, ʻoi aku ka liʻiliʻi o ka mea hoʻomohala e hoʻoponopono i nā pōpoki i loaʻa iā CI. I kēlā me kēia manawa ua noʻonoʻo wau i koʻu nānā ʻana i nā hewa āpau i loaʻa i ka hōʻike kakahiaka e hoʻoponopono wau iā lākou i kekahi manawa ma hope aku, no ka mea i kēia manawa aia kahi hana hou ma Jira aʻu i makemake nui ai e hoʻomaka e hana.

Inā hoʻopaʻa nā māka i ka noi huki, a laila lawa ka hoʻoikaika ʻana, no ka mea a hiki i ka ʻōmaʻomaʻo o ke kūkulu ʻana, ʻaʻole e hoʻomohala ke code, ʻo ia hoʻi ʻaʻole e pau ka hana.

ʻO ka hopena, ua koho mākou i ka hoʻolālā aʻe: i ka pō e holo mākou i ka hoʻonohonoho kiʻekiʻe o nā loiloi, a ʻo ka mea koʻikoʻi loa iā lākou a, ʻo ka mea nui loa, ʻo nā mea wikiwiki loa, hoʻomaka mākou ma kahi noi huki. Akā ʻaʻole mākou e hoʻōki ma laila - ma ka like, hoʻopaʻa mākou i ka wikiwiki o ka hele ʻana i nā loiloi i ke ʻano e hoʻoneʻe iā lākou mai ke ʻano pō e huki i nā loiloi noi.

I kēlā manawa, holo wikiwiki kā mākou kūkulu ʻana, no laila ua hoʻokomo wale mākou i ka hale ARC, nā ho'āʻo Junit, a me ka helu ʻana i nā code ma ke ʻano he blocker i ka noi huki. Ua hoʻohuli lākou, noʻonoʻo iā ia - a haʻalele i ka uhi code, no ka mea ua manaʻo lākou ʻaʻole pono mākou.

He ʻelua mau lā ka lōʻihi o ka hoʻonohonoho ʻana i ka CI kumu (ma hope aku, ʻo ka manaʻo o ka manawa ma kahi kokoke, pono no ka pālākiō).

Ma hope o kēlā, hoʻomaka lākou e noʻonoʻo hou - ke nānā pono nei mākou? Ke holo pololei nei mākou i ke kūkulu ʻana i kahi noi huki?

Ua holo mākou i ke kūkulu ʻana ma ka commit hope loa o ka lālā i wehe ʻia ai ka noi huki. Akā hiki i nā loiloi o kēia hana ke hōʻike wale i ka hana o ke code i kākau ai ka mea hoʻomohala. Akā ʻaʻole lākou e hōʻoiaʻiʻo ʻaʻole ʻo ia i uhaʻi i kekahi mea. ʻOiaʻiʻo, pono ʻoe e nānā i ke kūlana o ka lālā hoʻomohala ma hope o ka hoʻohui ʻia ʻana o kahi hiʻohiʻona i loko.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

No ka hana ʻana i kēia, ua kākau mākou i kahi palapala bash maʻalahi premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Ma ʻaneʻi, huki wale ʻia nā hoʻololi hou loa mai ka hoʻomohala ʻana a hoʻohui ʻia i loko o ka lālā o kēia manawa. Hoʻohui mākou i ka palapala premerge.sh ma ke ʻano he hana mua i nā kūkulu āpau a hoʻomaka e nānā pono i kā mākou makemake, ʻo ia hoʻi hoʻohuihui.

He ʻekolu lā i hoʻopaʻa ʻia i ka pilikia, ʻimi i ka hoʻonā, a kākau i kēia palapala.

Ua hoʻomohala ʻia ka noi, ua ʻike ʻia nā hana hou aʻe, ua ulu ka hui, a hoʻomaka ka premerge.sh i kekahi manawa e hoʻokuʻu iā mākou. Loaʻa nā hoʻololi kū'ē i ka Develop i haki i ke kūkulu.

He laʻana o ka hana ʻana o kēia:

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Hoʻomaka nā mea hoʻomohala ʻelua e hana i nā hiʻohiʻona A a me B i ka manawa like. answer() a, e like me ka makaikiu maikai, wehe ia. I ka manawa like, hoʻohui ka mea hoʻomohala o ka hiʻohiʻona B i kāna lālā i kahi kelepona hou i kēia hana.

Hoʻopau nā mea hoʻomohala i ka hana a wehe i nā noi huki i ka manawa like. Hoʻomaka ʻia nā hale kūkulu, nānā ʻo premerge.sh i nā noi huki ʻelua e kūʻē i ke kūlana hou o ka hoʻomohala - ʻōmaʻomaʻo nā māka āpau. Ma hope o kēlā, hoʻohui ʻia ka noi huki o ka hiʻohiʻona A, hoʻohui ʻia ka noi huki o ka hiʻohiʻona B… Boom! Hoʻopau nā haʻihaʻi no ka mea aia i ka code develop ke kelepona i kahi hana ʻole.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Ke ulu ʻole ia, ʻo ia pōʻino kūloko. ʻAʻole hiki i ka hui holoʻokoʻa ke hōʻiliʻili i kekahi mea a hāʻawi iā ia no ka hoʻāʻo.

ʻO ia ka mea i komo pinepine au i nā hana ʻoihana: analytics, networking, databases. ʻO ia, naʻu i kākau i kēlā mau hana a me nā papa i hoʻohana ʻia e nā mea hoʻomohala ʻē aʻe. Ma muli o kēia, ʻike pinepine wau iaʻu iho i ia mau kūlana. Ua loaʻa iaʻu kēia kiʻi no kekahi manawa.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

No ka mea ʻaʻole kūpono kēia iā mākou, ua hoʻomaka mākou e hana i nā koho no ka pale ʻana i kēia.

Pehea ʻaʻole e wāwahi i ke kūkulu ʻana

ʻO ke koho mua: kūkulu hou i nā noi huki a pau i ka wā e hoʻomohala ai ka hoʻonui. Inā, i kā mākou laʻana, e hoʻomohala mua kahi noi huki me ka hiʻohiʻona A, e kūkulu hou ʻia ka noi huki no ka hiʻohiʻona B, a, no laila, e hāʻule nā ​​māka ma muli o kahi hewa hōʻuluʻulu.

No ka hoʻomaopopo ʻana i ka lōʻihi, e noʻonoʻo i ka laʻana me ʻelua PR. Wehe mākou i ʻelua PR: ʻelua kūkulu, ʻelua hoʻokuʻu ʻana o nā loiloi. Ma hope o ka hoʻohui ʻia ʻana o ka PR mua i hoʻomohala ʻia, pono e kūkulu hou ʻia ka lua. Ma ka huina, lawe ʻelua mau PR i ʻekolu mau loiloi: 2 + 1 = 3.

Ma ke kumu, maikaʻi. Akā, ua nānā mākou i nā helu helu, a ʻo kahi kūlana maʻamau i kā mākou hui he 10 mau PR wehe, a laila ʻo ka helu o nā loiloi ka huina o ka holomua: 10 + 9 + ... + 1 = 55. ʻO ia hoʻi, e ʻae i ka 10. PRs, pono ʻoe e kūkulu hou i 55 mau manawa. A aia kēia i kahi kūlana kūpono, i ka wā e hala mua ai nā loiloi āpau, i ka wā ʻaʻohe mea e wehe i kahi noi huki hou i ka wā e hana ʻia ana kēia kakini.

E noʻonoʻo ʻoe iā ʻoe iho he mea hoʻomohala pono e lilo i mea mua e kaomi i ke pihi "merge", no ka mea, inā hana kahi hoalauna i kēia, pono ʻoe e kali a hele hou nā hale a pau ... ʻAʻole, ʻaʻole ia e hana. e hoʻolohi nui i ka ulu ʻana.

ʻElua ala hiki: e hōʻiliʻili i ka noi huki ma hope o ka loiloi code. ʻO ia hoʻi, wehe i kahi noi huki, e hōʻiliʻili i ka helu i koi ʻia mai nā hoa hana, hoʻoponopono i kāu mea e pono ai, a laila holo i nā kūkulu. Inā kūleʻa lākou, hoʻohui ʻia ka noi huki i hoʻomohala. I kēia hihia, ʻaʻohe hoʻomaka hou, akā ua lohi nui ka manaʻo. Ma ke ʻano he mea hoʻomohala, ke wehe wau i kahi noi huki, makemake koke wau e ʻike inā e hele ana. No ka laʻana, inā hāʻule kekahi hōʻike, pono ʻoe e hoʻoponopono koke. I ka hihia o ke kūkulu lohi ʻana, hoʻolohi ka manaʻo, a no laila ke kūkulu holoʻokoʻa. ʻAʻole i kūpono iā mākou.

ʻO ka hopena, ʻo ke kolu wale nō ke koho i koe - kaʻa paikikala. Hoʻopaʻa ʻia kā mākou code āpau, nā kumu kumu āpau i loko o kahi waihona ma ka kikowaena Bitbucket. No laila, pono mākou e hoʻomohala i kahi plugin no Bitbucket.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Hoʻopau kēia plugin i ka mīkini hoʻohui noi huki. He kūlana maʻamau ka hoʻomaka: wehe ʻia ʻo PR, hoʻomaka ʻia nā kūkulu āpau, lawe ʻia ka loiloi code. Akā ma hope o ka hala ʻana o ka loiloi code, a ua hoʻoholo ka mea hoʻomohala e kaomi i ka "merge", e nānā ka plugin i ke kūlana o ka hoʻomohala ʻana i holo ai nā loiloi. Inā hoʻokō ʻia ka hoʻomohala ʻana ma hope o ke kūkulu ʻana, ʻaʻole e ʻae ka plugin i kahi noi huki e hoʻohui ʻia i loko o ka lālā nui. E hoʻomaka hou i nā kūkulu e pili ana i ka hoʻomohala hou.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

I kā mākou hiʻohiʻona me nā hoʻololi kū'ē, e hāʻule kēlā mau kūkulu ʻana ma muli o kahi hewa hōʻuluʻulu. No laila, pono ka mea hoʻomohala o ka hiʻohiʻona B e hoʻoponopono i ke code, hoʻomaka hou i nā loiloi, a laila e hoʻopili koke ka plugin i ka noi huki.

Ma mua o ka hoʻokō ʻana i kēia plugin, ua loaʻa iā mākou nā helu 2,7 i kēlā me kēia noi huki. Me ka plugin ua lilo ia i 3,6 hoʻomaka. Ua kūpono iā mākou.

He mea pono e hoʻomaopopo he drawback kēia plugin: hoʻomaka hou i ke kūkulu ʻana i hoʻokahi manawa. ʻO ia hoʻi, aia kahi puka makani liʻiliʻi e hiki ai ke hoʻomohala i nā loli kū'ē. Akā he haʻahaʻa ka manaʻo o kēia, a ua hana mākou i kēia kuʻikahi ma waena o ka helu o ka hoʻokuʻu ʻana a me ka hiki ke haki. I loko o ʻelua makahiki, hoʻokahi wale nō kī ʻana, no laila, ʻaʻole paha i makehewa.

Ua lawe mākou i ʻelua pule e kākau i ka mana mua o ka plugin no Bitbucket.

Nā māka hou

I kēia manawa, hoʻomau ka ulu ʻana o kā mākou hui. Ua hoʻohui ʻia nā loiloi hou.

Ua noʻonoʻo mākou: no ke aha e hoʻoponopono ai i nā hewa inā hiki ke pale ʻia? A pela lakou i hoolauna mai ai ka nānā ʻana i nā code static. Hoʻomaka mākou me ka lint, i hoʻokomo ʻia i ka Android SDK. Akā i kēlā manawa ʻaʻole ʻo ia i ʻike pehea e hana ai me Kotlin code, a ua loaʻa iā mākou he 75% o ka palapala noi i kākau ʻia ma Kotlin. No laila, ua hoʻohui ʻia i loko o ka lint nā nānā ʻana o ka studio android.

No ka hana ʻana i kēia, pono wau e hoʻololi i ka nui: e lawe i ka Android Studio, e hoʻopili iā ia ma Docker a holo iā ia ma CI me kahi monitor virtual a manaʻo ʻo ia e holo ana ma kahi kamepiula maoli. Akā ua hana.

I kēia manawa hoʻi mākou i hoʻomaka ai e kākau nui mea hoao a hoʻokō ʻia hoʻāʻo kiʻi kiʻi. ʻO kēia ka manawa e hana ʻia ai kahi kiʻi kiʻi kuhikuhi no kahi hiʻohiʻona liʻiliʻi ʻokoʻa, a ʻo ka hoʻāʻo ʻana ʻo ka lawe ʻia ʻana o kahi kiʻi mai ka ʻike a hoʻohālikelike ʻia me ka kuhikuhi pololei ʻana i ka pixel ma ka pixel. Inā he ʻokoʻa, ʻo ia hoʻi, ua hewa ka hoʻonohonoho ʻana ma kahi a i ʻole kekahi mea i hewa i nā ʻano.

Akā, pono e holo nā hoʻokolohua instrumentation a me nā hoʻāʻo kiʻi kiʻi ma nā polokalamu: ma nā emulators a i ʻole nā ​​​​mea hana maoli. Ke noʻonoʻo nei he nui nā hoʻokolohua a hoʻokūkū pinepine ʻia lākou, pono kahi mahiʻai holoʻokoʻa. ʻO ka hoʻomaka ʻana i kāu mahiʻai ponoʻī he mea paʻakikī loa, no laila ua loaʻa iā mākou kahi koho i mākaukau - Firebase Test Lab.

hale ho'āʻo kahua ahi

Ua koho ʻia no ka mea he huahana ʻo Firebase na Google, ʻo ia hoʻi, pono e hilinaʻi ʻia a ʻaʻole paha e make. He kūpono nā kumukūʻai: $ 5 i kēlā me kēia hola no kahi hāmeʻa maoli, $ 1 i kēlā me kēia hola no kahi emulator.

Ma kahi o ʻekolu pule e hoʻokō ai i ka Firebase Test Lab i loko o kā mākou CI.

Akā ua hoʻomau ka hui i ka ulu ʻana, a ʻo Firebase, ʻaʻole naʻe, hoʻomaka e hoʻokuʻu iā mākou. I kēlā manawa, ʻaʻohe ona SLA. I kekahi manawa ua hoʻokau ʻo Firebase iā mākou e kali a hiki i ka hoʻokuʻu ʻia ʻana o ka helu i koi ʻia no nā hoʻokolohua, ʻaʻole hoʻomaka e hoʻokō iā lākou ma laila, e like me kā mākou makemake. ʻO ke kali ʻana ma ka laina a hiki i ka hapalua hola, he manawa lōʻihi loa ia. Ua holo nā ho'āʻo instrumentation ma kēlā me kēia PR, hoʻolōʻihi i ka hoʻomohala ʻana, a laila hiki mai ka bila no ka mahina me kahi huina pōʻai. Ma keʻano laulā, ua hoʻoholo ʻia e haʻalele iā Firebase a ʻoki i loko o ka hale, no ka mea, ua ulu nui ka hui.

docker + python + bash

Lawe lākou i ka docker, hoʻokomo i nā emulators i loko, kākau i kahi papahana Python maʻalahi, i ka manawa kūpono, e hoʻonui i ka helu kūpono o nā emulators i ka mana kūpono a hoʻōki iā lākou inā pono. A, ʻoiaʻiʻo, ʻelua mau palapala bash - ma hea mākou me ka ʻole o lākou?

He ʻelima pule ka hana ʻana i kā mākou wahi hoʻāʻo ponoʻī.

ʻO ka hopena, he papa inoa hoʻopaʻa paʻa ʻia o nā loiloi no kēlā me kēia noi huki:

  • Hui o ka ARC;
  • Nā ho'āʻo Junit;
  • Lint;
  • Nānā Android Studio;
  • nā hoʻokolohua mea kani;
  • Nā hoʻāʻo kiʻi paʻi kiʻi.

Ua pale kēia i nā haʻihaʻi he nui. Ma keʻano loea ua hana nā mea a pau, akā ua hoʻopiʻi nā mea hoʻomohala no ka lōʻihi o ke kali ʻana i nā hopena.

Loihi loa - ehia? Ua hoʻouka mākou i ka ʻikepili mai Bitbucket a me TeamCity i ka ʻōnaehana loiloi a ʻike mākou i kēlā manawa kali awelika 45 minuke. ʻO ia hoʻi, kahi mea hoʻomohala, e wehe ana i kahi noi huki, kali i ka awelika o 45 mau minuke no nā hopena o ke kūkulu ʻana. I koʻu manaʻo, he nui kēia, a ʻaʻole hiki ke hana e like me kēia.

ʻOiaʻiʻo, ua hoʻoholo mākou e wikiwiki i kā mākou kūkulu ʻana.

Ke holo wikiwiki nei mākou

I ka ʻike ʻana ua hoʻonohonoho pinepine ʻia nā kūkulu, ʻo mākou ka mea mua kūʻai hou aku i ka hao - ʻO ka hoʻomohala ākea ka mea maʻalahi. Ua ho'ōki nā hale i ka pila, akā ua emi iki ka manawa kali, no ka mea, ke alualu nei kekahi mau māka no ka manawa lōʻihi loa.

Wehe i nā māka lōʻihi loa

Hiki i kā mākou Continuous Integration ke hopu i kēia mau ʻano hewa a me nā pilikia.

  • ʻAʻole hele. Hiki iā CI ke hopu i kahi hewa hōʻuluʻulu i ka wā e pale ai nā loli kū'ē i kahi mea mai ke kūkulu ʻana. E like me kaʻu i ʻōlelo ai, ʻaʻole hiki i kekahi ke kūkulu i kekahi mea, pau ka hoʻomohala ʻana, a hopohopo nā mea a pau.
  • Bug i ka hana. No ka laʻana, i ka wā e ʻākoakoa ai ka noi, akā ke kaomi ʻana i ke pihi, hāʻule ia, a ʻaʻole i paʻi ʻia ke pihi. He ʻino kēia, no ka mea hiki ke loaʻa i kēlā ʻano bug i ka mea hoʻohana.
  • Bug i ka hoʻolālā. No ka laʻana, paʻi ʻia kahi pihi akā hoʻoneʻe ʻia 10 pixels i ka hema.
  • Hoʻonui i ka ʻaiʻē loea.

Ma hope o ka nānā ʻana i kēia papa inoa, ʻike mākou he koʻikoʻi nā helu mua ʻelua. Makemake mākou e hopu i kēlā mau pilikia ma kahi mua. ʻIke ʻia nā pōpoki i ka hoʻolālā i ka pae loiloi-hoʻolālā a hoʻopaʻa maʻalahi i ka manawa like. Pono ka hana me ka aie ʻenehana i kahi kaʻina a me ka hoʻolālā ʻokoʻa, no laila ua hoʻoholo mākou ʻaʻole e nānā iā ia no kahi noi huki.

Ma muli o kēia hoʻokaʻawale ʻana, ua lulu mākou i ka papa inoa o nā loiloi. Paʻi iā Lint a ua hoopanee i ka hoolaha ana no ka po: e hoike mai i ka nui o na pilikia o ka papahana. Me ka ʻaiʻē ʻenehana, ua ʻae mākou e hana kaʻawale, a Ua haʻalele loa ʻia nā loiloi Android Studio. ʻO ka Android Studio ma Docker e holo i ka nānā ʻana he leo maikaʻi akā hoʻopilikia nui i ke kākoʻo. ʻO kēlā me kēia hōʻano hou o nā mana o ka Android Studio he paio me nā pōpoki hiki ʻole ke hoʻomaopopo ʻia. He mea paʻakikī hoʻi ka mālama ʻana i nā hoʻāʻo screenshot, no ka mea ʻaʻole paʻa loa ka waihona, aia nā mea maikaʻi ʻole. Wehe ʻia nā hoʻāʻo kiʻi kiʻi mai ka papa inoa o nā loiloi.

ʻO ka hopena, waiho mākou me:

  • Hui o ka ARC;
  • Nā ho'āʻo Junit;
  • nā hoʻokolohua mea kani.

Gradle kahi huna huna

Me ka ʻole o nā loiloi koʻikoʻi, ua maikaʻi nā mea a pau. Akā ʻaʻohe palena o ka hemolele!

Ua hoʻokaʻawale ʻia kā mākou noi ma kahi o 150 gradle modules. Hana maikaʻi ʻo Gradle remote cache i kēia hihia, a ua hoʻoholo mākou e hoʻāʻo.

ʻO Gradle remote cache kahi lawelawe e hiki ke hoʻokaʻawale i ke kūkulu ʻana i nā kiʻi kiʻi no nā hana pākahi i loko o nā modula pākahi. ʻO Gradle, ma kahi o ka hōʻuluʻulu maoli ʻana i ke code, kīkēkē i ka cache mamao ma o HTTP a nīnau inā ua hana kekahi i kēia hana. Inā ʻae, e hoʻoiho wale i ka hopena.

He maʻalahi ka holo ʻana i ka cache mamao Gradle no ka mea hāʻawi ʻo Gradle i kahi kiʻi Docker. Ua hiki iā mākou ke hana i loko o ʻekolu hola.

ʻO nā mea a pau āu e hana ai, ʻo ka holo ʻana iā Docker a kākau i hoʻokahi laina i ka papahana. Akā ʻoiai hiki iā ʻoe ke hoʻomaka koke, e lōʻihi ka manawa e hana maikaʻi nā mea a pau.

Aia ma lalo ka pakuhi o nā hala huna.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

I ka hoʻomaka ʻana, ʻo ka pākēneka o nā huna huna ma kahi o 65. Ma hope o ʻekolu pule, hiki iā mākou ke lawe i kēia waiwai i ka 20%. Ua hoʻololi ʻia nā hana i hōʻiliʻili ʻia e ka noi Android he mau hilinaʻi transitive ʻē aʻe, kahi i hala ʻole ai ʻo Gradle i ka cache.

Ma ka ʻae ʻana i ka cache, ua wikiwiki mākou i ke kūkulu ʻana. Ma waho aʻe o ka hui ʻana, ke holo nei nā hoʻokolohua instrumentation, a ke holo nei lākou no ka manawa lōʻihi. ʻAʻole pono paha nā hoʻāʻo a pau ma kēlā me kēia noi huki. No ka ʻike ʻana, hoʻohana mākou i ka loiloi hopena.

ʻIkepili hopena

Ma kahi noi huki, hōʻiliʻili mākou i ka git diff a ʻike i nā modules Gradle i hoʻololi ʻia.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Maikaʻi ka holo ʻana i kēlā mau hoʻokolohua instrumentation wale nō e nānā i nā modules i hoʻololi ʻia a me nā modules āpau e hilinaʻi nei iā lākou. ʻAʻole kūpono ka holo ʻana i nā hoʻokolohua no nā modula kokoke: ʻaʻole i loli ke code ma laila, ʻaʻohe mea hiki ke haki.

Me nā hoʻokolohua instrumentation, ʻaʻole maʻalahi nā mea, no ka mea pono lākou i loko o ka module Application kiʻekiʻe. Ua hoʻohana mākou i nā heuristic analysis bytecode e hoʻomaopopo i ke ʻano o kēlā me kēia hoʻokolohua.

ʻEwalu pule ka lōʻihi o ka hoʻololi ʻana i ke ʻano o ka hoʻāʻo ʻana o nā mea hana i mea e hoʻāʻo wale ai lākou i nā modules i pili.

Ua holo pono nā hana e hoʻoikaika i ka nānā ʻana. Mai 45 mau minuke ua hiki mākou i kahi o 15. He mea maʻamau ka hapahā o ka hola e kali ai no ke kūkulu ʻana.

Akā i kēia manawa ua hoʻomaka nā mea hoʻomohala e hoʻopiʻi ʻaʻole maopopo lākou i nā hale e holo nei, kahi e ʻike ai i ka lāʻau, no ke aha i ʻulaʻula ai ke kūkulu ʻana, ʻaʻole i pau ka hoʻāʻo, etc.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Hoʻolohi nā pilikia pane i ka hoʻomohala ʻana, no laila ua hoʻāʻo mākou e hāʻawi i ka ʻike maopopo a me ka kikoʻī e like me ka hiki e pili ana i kēlā me kēia PR a kūkulu. Ua hoʻomaka mākou me nā ʻōlelo ma Bitbucket i ka PR, e hōʻike ana i ke kūkulu ʻana i hāʻule a me ke kumu, a kākau i nā leka i manaʻo ʻia ma Slack. I ka hopena, ua hana mākou i kahi dashboard no ka ʻaoʻao PR me kahi papa inoa o nā kūkulu āpau e holo nei i kēia manawa a me ko lākou kūlana: i ka pila, holo, hāʻule a hoʻopau paha. Hiki iā ʻoe ke kaomi ma luna o ke kūkulu a hiki i kona log.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

ʻEono pule i hoʻopau ʻia no nā manaʻo kikoʻī.

Hoʻolālā

E neʻe kākou i ka mōʻaukala hou. Ma hope o ka hoʻoponopono ʻana i ka pilikia o ka manaʻo, hiki mākou i kahi pae hou - ua hoʻoholo mākou e kūkulu i kā mākou mahiʻai emulator ponoʻī. Ke nui nā hoʻokolohua a me nā emulators, paʻakikī lākou e hoʻokele. ʻO ka hopena, ua neʻe kā mākou mau emulators i kahi hui k8s me ka hoʻokele waiwai maʻalahi.

Eia kekahi, aia nā papahana ʻē aʻe.

  • Hoʻihoʻi Lint (a me nā ʻano hoʻohālikelike ʻē aʻe). Ke hana nei mākou ma kēia ala.
  • E holo i nā mea a pau ma PR blocker nā ho'āʻo hope-a-hope ma nā mana SDK a pau.

No laila, ua ʻimi mākou i ka mōʻaukala o ka hoʻomohala ʻana o ka Hoʻohui Hoʻomau ma Avito. I kēia manawa makemake wau e hāʻawi i kekahi mau ʻōlelo aʻoaʻo mai ka manaʻo o ka ʻike.

Nā mea kōkua

Inā hiki iaʻu ke hāʻawi i hoʻokahi ʻōlelo aʻo, ʻo ia kēia:

E ʻoluʻolu e makaʻala me nā palapala shell!

ʻO Bash kahi mea hana maʻalahi a ikaika loa, maʻalahi a wikiwiki hoʻi e kākau i nā palapala ma luna. Akā me ia hiki iā ʻoe ke hāʻule i loko o kahi pahele, a ʻo mākou, pōʻino, ua hāʻule i loko.

Ua hoʻomaka ia me nā palapala maʻalahi i holo ma luna o kā mākou mīkini kūkulu:

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

Akā, e like me kāu e ʻike ai, hoʻomohala nā mea āpau a lilo i mea paʻakikī i ka manawa - e holo kākou i hoʻokahi script mai kahi ʻē aʻe, e hoʻohele i kekahi mau ʻāpana ma laila - ma muli o ka hopena, pono mākou e kākau i kahi hana e hoʻoholo ai i ka pae o ka bash nesting i kēia manawa. e hoʻololi i nā hua'ōlelo kūpono, e hoʻomaka ai.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Hiki iā ʻoe ke noʻonoʻo i ka hana e pili ana i ka hoʻomohala ʻana i ia mau palapala. Paipai au iā ʻoe ʻaʻole e hāʻule i loko o kēia pahele.

He aha ka mea hiki ke pani?

  • ʻO kēlā me kēia ʻōlelo kākau. kakau ma Python a i ʻole Kotlin Script ʻoi aku ka maʻalahi no ka mea he polokalamu ia, ʻaʻole kākau.
  • A i ʻole e wehewehe i ka loina kūkulu holoʻokoʻa ma ke ʻano Nā hana gradle maʻamau no kāu papahana.

Ua hoʻoholo mākou e koho i ka koho ʻelua, a i kēia manawa ke hoʻopau nei mākou i nā palapala bash āpau a kākau i nā hana gradle maʻamau.

Manaʻo kōkua #2: E kūʻai i nā ʻōnaehana ma ke code.

He mea maʻalahi ke mālama ʻole ʻia ka Continuous Integration hoʻonohonoho i loko o ka Jenkins a i ʻole TeamCity UI, a me nā mea ʻē aʻe, akā ma ke ʻano o nā faila kikokikona pololei i ka waihona papahana. Hāʻawi kēia i ka versioning. ʻAʻole paʻakikī ka hoʻihoʻi a kūkulu ʻana i ke code ma kahi lālā ʻē aʻe.

Hiki ke mālama ʻia nā palapala i loko o kahi papahana. A he aha ka hana me ke kaiapuni?

Manaʻo kōkua #3: Hiki iā Docker ke kōkua me ke kaiapuni.

E kōkua maoli ia i nā mea hoʻomohala Android, ʻaʻole naʻe ʻo IOS.

He laʻana kēia o kahi faila docker maʻalahi i loaʻa iā jdk a me 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

Ma hope o ke kākau ʻana i kēia faila docker (e haʻi aku wau iā ʻoe i kahi mea huna, ʻaʻole pono ʻoe e kākau, akā e kiʻi iā ia mai GitHub) a kūkulu i ke kiʻi, loaʻa iā ʻoe kahi mīkini virtual kahi e hiki ai iā ʻoe ke kūkulu i ka noi a holo i nā hoʻokolohua Junit .

ʻO nā manaʻo nui ʻelua no ke kumu o kēia maʻalahi ka scalability a me ka repeatability. Ke hoʻohana nei i ka docker, hiki iā ʻoe ke hoʻāla koke i hoʻokahi mau kaukani kūkulu hale, e loaʻa iā ia ke ʻano like me ka mea ma mua. ʻOi aku ka maʻalahi o ke ola o nā ʻenekini CI. He mea maʻalahi ka paʻi ʻana i ka android-sdk i loko o ka docker, me nā emulators ʻoi aku ka paʻakikī: pono ʻoe e hana ʻoi aku ka paʻakikī (maikaʻi, a hoʻoiho hou iā ia mai GitHub).

Manaʻo helu 4: mai poina i ka hana ʻana ʻaʻole no ka nānā ʻana, akā no nā kānaka.

ʻO ka wikiwiki a, ʻo ka mea nui loa, he mea nui ka manaʻo hoʻomaopopo no nā mea hoʻomohala: he aha ka mea i haki, ka hoʻāʻo ʻole, kahi e ʻike ai i ka buildlog.

Manaʻo kōkua #5: E hoʻomaʻamaʻa i ka wā e hoʻomohala ai i ka Hoʻohui Hoʻomau.

E hoʻomaopopo pono i ke ʻano o nā hewa āu e makemake ai e pale, ehia mau kumuwaiwai, manawa, a me ka manawa mīkini āu e makemake ai e hoʻolilo. Hiki ke hoʻoneʻe ʻia nā loiloi lōʻihi loa i ka pō. A ʻo ka poʻe i hopu i nā hewa koʻikoʻi ʻole e haʻalele loa.

Manaʻo kōkua #6: E hoʻohana i nā mea hana i mākaukau.

I kēia manawa he nui nā hui e hāʻawi i ke ao CI.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

No nā hui liʻiliʻi, he hopena maikaʻi kēia. ʻAʻole pono ʻoe e mālama i kekahi mea, e uku wale i ke kālā, kūkulu i kāu noi a holo i nā hoʻokolohua instrumentation.

Helu helu 7: ʻoi aku ka maikaʻi o nā hoʻonā i loko o kahi hui nui.

Akā ma hope a ma hope paha, me ka ulu ʻana o ka hui, e ʻoi aku ka maikaʻi o nā hoʻonā hale. Aia kekahi wahi me kēia mau hoʻoholo. Aia ke kānāwai no ka emi ʻana o ka hoʻihoʻi ʻana ma ka ʻoihana waiwai: i kēlā me kēia papahana, ʻoi aku ka paʻakikī o kēlā me kēia holomua holomua, koi hou aʻe ka hoʻopukapuka.

Hōʻike ʻo Economics i ko mākou ola holoʻokoʻa, me ka Continuous Integration. Ua kūkulu au i ka papa kuhikuhi o nā koina hana no kēlā me kēia pae o ka hoʻomohala ʻana i kā mākou Hoʻohui Hoʻomau.

ʻO ka ulu ʻana o CI i ka hui hoʻomohala kelepona

Hiki ke ʻike ʻia ua hāʻawi ʻia kekahi hoʻomaikaʻi hou a paʻakikī. Ke nānā nei i kēia pakuhi, hiki iā ʻoe ke hoʻomaopopo he pono ʻoe e hoʻomohala i ka Continuous Integration me ka hoʻonui ʻana i ka nui o ka hui. No ka hui o ʻelua mau kānaka, ʻaʻole maikaʻi ka hoʻolilo ʻana i nā lā 50 i ka hoʻomohala ʻana i kahi mahiʻai emulator kūloko. Akā i ka manawa like, no kahi hui nui, ʻaʻole e hana i ka Continuous Integration he manaʻo maikaʻi ʻole nō hoʻi, no ka mea, nā pilikia hoʻohui, hoʻoponopono kamaʻilio, etc. ʻoi aku ka lōʻihi o ka manawa.

Ua hoʻomaka mākou me ka ʻoiaʻiʻo e pono ai ka automation no ka mea he pipiʻi nā kānaka, hana hewa lākou a palaualelo. Akā, hoʻokae nā kānaka. No laila, pili kēia mau pilikia āpau i ka automation.

  • He pipiʻi ka mīkini. E hoʻomanaʻo i ka papa hana.
  • I ka wā e pili ana i ka automation, hana hewa nā kānaka.
  • I kekahi manawa ua moloā loa ka hoʻomaʻamaʻa ʻana, no ka mea, hana nā mea a pau. No ke aha e hoʻomaikaʻi ai i kahi mea ʻē aʻe, no ke aha kēia Hoʻohui Hoʻomau?

Akā, loaʻa iaʻu nā helu helu: loaʻa nā hewa i 20% o nā hui. A ʻaʻole kēia no ka kākau ʻana o kā mākou mea hoʻomohala i nā code hewa. ʻO kēia no ka mea ua maopopo ka poʻe hoʻomohala inā hana hewa lākou, ʻaʻole ia e hoʻomohala, e hopu ʻia e nā loiloi automated. No laila, hiki i nā mea hoʻomohala ke hoʻolōʻihi i ka manawa e kākau ai i nā code a me nā mea hoihoi, ma mua o ka hahai ʻana a me ka nānā ʻana i kekahi mea.

Hana Hoʻohui Hoʻomau. Akā ma ka hoʻohaʻahaʻa.

Ma ke ala, ʻaʻole wale ʻo Nikolai Nesterov e hōʻike nui iā ia iho, akā he lālā nō hoʻi ia o ke komite papahana AppsConf a me ke kōkua ʻana i nā poʻe ʻē aʻe e hoʻomākaukau i nā hōʻikeʻike kūpono no ʻoe. Hiki ke loiloi ʻia ka piha a me ka pono o ka papahana o ka ʻaha kūkā e hiki mai ana e nā kumuhana ma papa kuhikuhi. A no nā kikoʻī, e hele mai ʻApelila 22-23 i ka Infospace.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka