Xa uphuhlisa iprojekthi yeqonga le-Android, nokuba lincinci, ngokukhawuleza okanye kamva kufuneka ujongane nommandla wophuhliso. Ukongeza kwi-Android SDK, kuyimfuneko ukuba ube nenguqulo yakamuva ye-Kotlin, i-Gradle, i-platform-izixhobo, izixhobo zokwakha. Kwaye ukuba kumatshini womphuhlisi zonke ezi zixhomekeke zixazululwa kwinqanaba elikhulu usebenzisa i-Android Studio IDE, ngoko kwi-CI / CD iseva uhlaziyo ngalunye lunokujika lube yintloko. Kwaye ukuba kuphuhliso lwewebhu iDocker iye yaba sisisombululo esiqhelekileyo kwingxaki yokusingqongileyo, kutheni ungazami ukusombulula ingxaki efanayo kuphuhliso lwe-Android usebenzisa yona...
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
# Π’.ΠΊ. ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ 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 neprojekthi yethu ye-Android kwaye siqale ukwakha isikhongozeli 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 assembleDebug
Makhe 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/ - inyusa ifolda yangoku kunye neprojekthi yethu ye-Android kwifolda yangaphakathi yesikhongozeli / ekhaya / i-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.
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