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.
Ma hope o ke kākau ʻana i ke code, pono ʻoe e hōʻoia:
Ke hana nei.
ʻ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.
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.
No ka hana ʻana i kēia, ua kākau mākou i kahi palapala bash maʻalahi premerge.sh:
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:
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.
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.
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.
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.
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.
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.
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.
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.
ʻ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.
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.
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.
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.