Ke kūkulu nei i kahi papahana Android ma kahi pahu Docker

I ka hoʻomohala ʻana i kahi papahana no ka Android platform, ʻo ka mea liʻiliʻi loa, ma hope a ma hope paha e pono ʻoe e hana me ke kaiapuni hoʻomohala. Ma waho aʻe o ka Android SDK, pono e loaʻa ka mana hou loa o Kotlin, Gradle, platform-tools, build-tools. A inā ma ka mīkini o ka mea hoʻomohala e hoʻopau ʻia kēia mau hilinaʻi a pau me ka hoʻohana ʻana i ka Android Studio IDE, a laila ma ka kikowaena CI / CD hiki i kēlā me kēia mea hou ke lilo i poʻo. A inā ma ka hoʻomohala pūnaewele ua lilo ʻo Docker i ka hopena maʻamau i ka pilikia o ke kaiapuni, no ke aha e hoʻāʻo ʻole ai e hoʻoponopono i kahi pilikia like i ka hoʻomohala ʻana o Android me ka hoʻohana ʻana iā ia...

No ka poʻe ʻike ʻole i ke ʻano o Docker, e waiho maʻalahi, he mea hana ia no ka hana ʻana i ka mea i kapa ʻia. ʻO nā "containers" i loaʻa kahi kernel OS liʻiliʻi a me ka hoʻonohonoho pono o nā lako polokalamu hiki iā mākou ke kau i nā wahi a mākou e makemake ai, ʻoiai e mālama ana i ke kaiapuni. ʻO ka mea maoli i loko o kā mākou pahu e hoʻoholo ʻia i ka Dockerfile, a laila e hōʻuluʻulu ʻia i kahi kiʻi hiki ke hoʻokuʻu ʻia ma nā wahi āpau a loaʻa nā waiwai idempotency.

Hōʻike maikaʻi ʻia ke kaʻina hana a me nā kumu kumu o Docker i kāna kahua pūnaewele. No laila, ke nānā nei i mua, ʻo ia ka Dockerfile a mākou i hoʻopau ai:

# Т.к. основным инструментом для сборки Android-проектов является Gradle, 
# и по счастливому стечению обстоятельств есть официальный Docker-образ 
# мы решили за основу взять именно его с нужной нам версией Gradle
FROM gradle:5.4.1-jdk8

# Задаем переменные с локальной папкой для Android SDK и 
# версиями платформы и инструментария
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=28 
    ANDROID_BUILD_TOOLS_VERSION=28.0.3

# Создаем папку, скачиваем туда SDK и распаковываем архив,
# который после сборки удаляем
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
# В следующих строчках мы создаем папку и текстовые файлы 
# с лицензиями. На оф. сайте Android написано что мы 
# можем копировать эти файлы с машин где вручную эти 
# лицензии подтвердили и что автоматически 
# их сгенерировать нельзя
    && mkdir "$ANDROID_HOME/licenses" || true 
    && echo "24333f8a63b6825ea9c5514f83c2829b004d1" > "$ANDROID_HOME/licenses/android-sdk-license" 
    && echo "84831b9409646a918e30573bab4c9c91346d8" > "$ANDROID_HOME/licenses/android-sdk-preview-license"    

# Запускаем обновление SDK и установку build-tools, platform-tools
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"

Mālama mākou iā ia i loko o ka waihona me kā mākou papahana Android a hoʻomaka i ke kūkulu ʻana i ka ipu me ke kauoha

docker build -t android-build:5.4-28-27 .

ʻO ka pākuhi -t hōʻike i ka hōʻailona a i ʻole ka inoa o kā mākou pahu, kahi maʻamau o kona inoa a me kona mana. I kā mākou hihia, ua kapa mākou iā ia he android-build a ma ka mana mākou i hōʻike i kahi hoʻonohonoho o nā mana o gradle, android-sdk a me nā mea hana platform. I ka wā e hiki mai ana, e maʻalahi iā mākou ke ʻimi i ke kiʻi e pono ai mākou ma ka inoa me ka hoʻohana ʻana i kēia "version".

Ma hope o ka pau ʻana o ka ʻaha, hiki iā mākou ke hoʻohana i kā mākou kiʻi ma ka ʻāina, hiki iā mākou ke hoʻoiho me ke kauoha hoʻokuʻu ʻana i ka pahu i kahi waihona kiʻi lehulehu a pilikino paha e hoʻoiho iā ia i nā mīkini ʻē aʻe.

E like me ka laʻana, e kūkulu kākou i kahi papahana ma ka ʻāina. No ka hana ʻana i kēia, i loko o ka waihona me ka papahana, e holo i ke kauoha

docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug

E noʻonoʻo kākou i ke ʻano o ia mea:

holo ka hana - ke kauoha hoʻolele kiʻi ponoʻī
-rm - ʻo ia hoʻi, ma hope o ka pau ʻana o ka pahu, holoi ʻia nā mea a pau i hana ʻia i kona wā e ola ana
-v "$PWD":/home/gradle/ - kau i ka waihona o kēia manawa me kā mākou papahana Android i loko o ka waihona ipu kūloko / home / gradle /
-w /home/gradle - kuhikuhi i ka papa kuhikuhi hana o ka ipu
Android-kūkulu: 5.4.1-28-27 - ka inoa o kā mākou ipu i hōʻiliʻili ai
gradle assembleDebug - ka hui hui maoli e hōʻuluʻulu i kā mākou papahana

Inā holo maikaʻi nā mea a pau, a laila i loko o ʻelua mau kekona / mau minuke e ʻike ʻoe ma kāu pale i kahi mea like KUKULU ANA i ka 8m 3s! A e loaʻa i ka app/build/output/apk folder ka noi i hui ʻia.

Hiki iā ʻoe ke hana i nā hana gradle ʻē aʻe ma ke ʻano like - nānā i ka papahana, holo i nā hoʻokolohua, etc. ʻO ka pōmaikaʻi nui inā pono mākou e kūkulu i ka papahana ma kekahi mīkini ʻē aʻe, ʻaʻole pono mākou e hopohopo e pili ana i ka hoʻokomo ʻana i ke kaiapuni holoʻokoʻa a lawa ia e hoʻoiho i ke kiʻi kūpono a holo i ke kūkulu ʻana i loko.

ʻAʻole mālama ka pahu i nā hoʻololi, a hoʻomaka ʻia kēlā me kēia hui mai ka ʻohi ʻana, ka mea, ma kekahi ʻaoʻao, e hōʻoiaʻiʻo i ka ʻike o ka ʻaha me ka nānā ʻole i kahi i hoʻokuʻu ʻia ai, ma ka ʻaoʻao ʻē aʻe, i kēlā me kēia manawa e hoʻoiho i nā hilinaʻi āpau. a hōʻuluʻulu hou i nā code āpau, a hiki i kēia ke lawe i kekahi manawa nui. No laila, ma kahi o ka hoʻomaka "anu" maʻamau, loaʻa iā mākou ke koho e hoʻomaka i ke kūkulu ʻana i ka wā e mālama ai i ka mea i kapa ʻia. "cache", kahi e mālama ai mākou i ka waihona ~/.gradle ma ke kope wale ʻana iā ia i ka waihona hana o ka papahana, a i ka hoʻomaka ʻana o ke kūkulu aʻe e hoʻihoʻi mākou iā ia. Ua hoʻoneʻe mākou i nā kaʻina hana kope a pau i nā palapala ʻokoʻa a ua hoʻomaka ke ʻano o ke kauoha hoʻomaka e like me kēia

docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 /bin/bash -c "./pre.sh; gradle assembleDebug; ./post.sh"

ʻO ka hopena, ua hoʻemi ʻia kā mākou manawa kūkulu papahana i nā manawa he nui (ma muli o ka nui o nā mea hilinaʻi i ka papahana, akā ua hoʻomaka ka awelika o ka papahana e ʻākoakoa i loko o 1 mau minuke ma kahi o 5 mau minuke).

ʻO kēia mau mea a pau, ʻoiaʻiʻo, kūpono wale nō inā loaʻa iā ʻoe kāu kikowaena CI / CD kūloko, āu e kākoʻo ai iā ʻoe iho. Akā i kēia manawa he nui nā lawelawe kapuaʻi kahi i hoʻoponopono ʻia ai kēia mau pilikia āpau a ʻaʻole pono ʻoe e hopohopo e pili ana iā ia, a hiki ke kuhikuhi ʻia nā pono hui pono i nā hoʻonohonoho papahana.

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

Mālama ʻoe i kāu ʻōnaehana CI/CD i loko o ka hale a hoʻohana paha i kahi lawelawe ʻaoʻao ʻekolu?

  • Hoʻohana mākou i kahi kikowaena kūloko

  • Hoʻohana mākou i kahi lawelawe waho

  • ʻAʻole mākou hoʻohana i ka CI/CD

  • ʻO kekahi

42 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 16.

Source: www.habr.com

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