Ukuphuhlisa iprojekthi yeqonga Android, nokuba yeyona incinci, kungekudala kufuneka ijongane nemeko yophuhliso. Ukongeza, Android I-SDK ifuna inguqulelo yamva nje yeKotlin, Gradle, platform-tools, kunye ne build-tools. Kwaye ukuba ikwi machine yomphuhlisi, zonke ezi xhomekeke kuzo zisonjululwa kakhulu kusetyenziswa Android I-Studio IDE, emva koko kwiseva ye-CI/CD, lonke uhlaziyo lunokuba yintloko ebuhlungu. Kwaye ukuba iDocker iye yaba sisisombululo esiqhelekileyo kwingxaki yokusingqongileyo kuphuhliso lwewebhu, kutheni ungazami ukusombulula ingxaki efanayo kwi Android-uphuhliso…
Kwabo bangaziyo ukuba yintoni iDocker, ukuyibeka ngokulula, sisixhobo sokwenza into ebizwa. "Iikhonteyina" eziqulethe i-kernel encinci ye-OS kunye neseti eyimfuneko yesoftware esinokuyisebenzisa naphi na apho sifuna khona, ngelixa sigcina okusingqongileyo. Yintoni kanye kanye eya kuba kwisikhongozeli sethu sichongiwe kwi-Dockerfile, ethi emva koko idityaniswe ibe ngumfanekiso onokuthi uqaliswe naphi na kwaye uneempawu ze-idempotency.
Inkqubo yofakelo kunye neziseko zeDocker zichazwe ngokugqibeleleyo kweyakhe . Ke ngoko, sijonge phambili kancinci, le yiDockerfile esigqibe ngayo:
# Т.к. основным инструментом для сборки 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"
Siyigcina kwifolda kunye neyethu Android-projekthi kwaye usebenzise i-container yokwakha ngomyalelo
docker build -t android-build:5.4-28-27 .IParamu -t ixela ithegi okanye igama lesikhongozeli sethu, esihlala sinegama kunye noguqulelo. Kwimeko yethu, siyibiza ngokuba yi-android-build kwaye kwinguqulelo sibonise isethi yeenguqulelo ze-gradle, i-android-sdk kunye nezixhobo zeqonga. Kwixesha elizayo, kuya kuba lula ukuba sikhangele umfanekiso esiwudingayo ngegama sisebenzisa le "nguqulelo".
Emva kokuba indibano igqityiwe, sinokusebenzisa umfanekiso wethu kwindawo, sinokuyikhuphela ngomyalelo docker push kwindawo yokugcina umfanekiso kawonke wonke okanye yabucala ukuyikhuphela kwabanye oomatshini.
Njengomzekelo, makhe iprojekthi ekuhlaleni. Ukwenza oku, kwifolda eneprojekthi, sebenzisa umyalelo
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebugMakhe sibone ukuba ithetha ukuthini:
docker ugijime - Umyalelo wokuqaliswa komfanekiso ngokwawo
-rm — kuthetha ukuba emva kokuba isitya simile, sisusa yonke into edalwe ngexesha lokuphila kwayo
-v "$PWD":/home/grale/ - ifaka ifolda yangoku kunye neyethu Android- iprojekthi kwifolda yangaphakathi yesikhongozeli /home/gradle/
-w /home/gradle — ichaza uluhlu olusebenzayo lwesingxobo
android-ukwakha:5.4.1-28-27 - igama lesikhongozeli sethu esiyiqokelele
i-gradle assembleDebug - elona qela lendibano elihlanganisa iprojekthi yethu
Ukuba yonke into ihamba kakuhle, emva kwemizuzwana/imizuzu uya kubona into enje kwiscreen sakho YAKHA IMPUMELELO kwi-8m 3s! Kwaye i-app/build/output/apk folder iya kuqulatha isicelo esidityanisiweyo.
Unokwenza eminye imisebenzi yegradle ngendlela efanayo-jonga iprojekthi, qhuba iimvavanyo, njl. Inzuzo ephambili kukuba ukuba sifuna ukwakha iprojekthi kunoma yimuphi omnye umatshini, akufuneki sikhathazeke ngokufaka yonke indawo engqongileyo kwaye kuya kukwanela ukukhuphela umfanekiso ofunekayo kwaye usebenze ukwakha kuyo.
Isikhongozeli asigcini naluphi na utshintsho, kwaye indibano nganye iqalwa ukusuka ekuqaleni, leyo, kwelinye icala, iqinisekisa ubuni bendibano kungakhathaliseki ukuba iqaliswe phi, kwelinye icala, ixesha ngalinye kufuneka ukhuphele zonke izinto ezixhomekeke kuyo. kwaye uqokelele yonke ikhowudi kwakhona, kwaye oku kungathatha ixesha elibalulekileyo ngamanye amaxesha. Ngoko ke, ukongeza kwisiqalo "esibandayo" esiqhelekileyo, sinokukhetha ukuqala ukwakha ngelixa sigcina into ebizwa. "i-cache", apho sigcina khona i ~/.gradle ifolda ngokuyikhuphela ngokulula kwifolda yokusebenza yeprojekthi, kwaye ekuqaleni kolwakhiwo olulandelayo siyayibuyisela. Sihambise zonke iinkqubo zokukopa kwizikripthi ezahlukeneyo kwaye umyalelo wokuqaliswa ngokwawo waqala ukujongeka ngolu hlobo
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"Ngenxa yoko, ixesha lethu lokwakhiwa kweprojekthi liye lancitshiswa amaxesha amaninzi (kuxhomekeke kwinani lokuxhomekeka kwiprojekthi, kodwa iprojekthi eqhelekileyo ngoko yaqala ukuhlanganiswa ngomzuzu we-1 endaweni yemizuzu emi-5).
Konke oku, kunjalo, kuyavakala kuphela ukuba uneyakho yangaphakathi i-CI/CD iseva, ozixhasayo. Kodwa ngoku kukho iinkonzo ezininzi zefu apho zonke ezi ngxaki zixazululwa kwaye akufanele ukhathazeke ngazo, kwaye iipropati zendibano eziyimfuneko nazo zingachazwa kwizicwangciso zeprojekthi.
Ngabasebenzisi ababhalisiweyo kuphela abanokuthatha inxaxheba kuphando. , ndiyacela.
Ngaba uyayigcina inkqubo ye-CI/CD yakho ngaphakathi okanye usebenzisa inkonzo yomntu wesithathu?
Sisebenzisa iseva yangaphakathi
Sisebenzisa inkonzo yangaphandle
Asisebenzisi i-CI/CD
Okunye
Bangama-42 abasebenzisi abavotileyo. Abasebenzisi abali-16 abakhange.
umthombo: www.habr.com
