Lapho uthuthukisa iphrojekthi yesikhulumi se-Android, ngisho nencane kakhulu, ngokushesha noma kamuva kufanele ubhekane nendawo yokuthuthukisa. Ngokungeziwe ku-Android SDK, kuyadingeka ukuthi ube nenguqulo yakamuva ye-Kotlin, Gradle, amathuluzi epulatifomu, amathuluzi okwakha. Futhi uma emshinini womthuthukisi konke lokhu kuncika kuxazululwa ngezinga elikhulu kusetshenziswa i-Android Studio IDE, khona-ke kuseva ye-CI/CD isibuyekezo ngasinye singaphenduka ikhanda. Futhi uma ekuthuthukisweni kwewebhu i-Docker isiphenduke isixazululo esijwayelekile senkinga yemvelo, kungani ungazami ukuxazulula inkinga efanayo ekuthuthukisweni kwe-Android usebenzisa...
Kulabo abangazi ukuthi i-Docker iyini, ukuyibeka kalula, iyithuluzi lokudala lokho okubizwa. βiziqukathiβ eziqukethe i-OS kernel encane kanye nesethi edingekayo yesofthiwe esingayisebenzisa nomaphi lapho sithanda khona, kuyilapho silondoloza imvelo. Okuzoba ku-container yethu kunqunywa ku-Dockerfile, ebese ihlanganiswa ibe yisithombe esingethulwa noma yikuphi futhi esinezici ze-idempotency.
Inqubo yokufaka kanye nezisekelo ze-Docker zichazwe kahle 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 kufolda ngephrojekthi yethu ye-Android futhi siqale ukwakha isiqukathi ngomyalo
docker build -t android-build:5.4-28-27 .
Ipharamitha -t icacisa ithegi noma igama lesiqukathi sethu, ngokuvamile esinegama laso nenguqulo. Esimeni sethu, siyibize nge-android-build futhi enguqulweni sabonisa isethi yezinguqulo ze-gradle, i-android-sdk namathuluzi epulatifomu. Ngokuzayo, kuzoba lula ngathi ukucinga isithombe esisidingayo ngegama sisebenzisa le "nguqulo".
Ngemuva kokuthi umhlangano usuqedile, singasebenzisa isithombe sethu endaweni, singasilanda ngomyalo i-docker push endaweni yokugcina izithombe yomphakathi noma yangasese ukuze uyilande kweminye imishini.
Njengesibonelo, masakhe iphrojekthi endaweni. Ukuze wenze lokhu, kufolda enephrojekthi, sebenzisa umyalo
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug
Ake sithole ukuthi kusho ukuthini:
i-docker igijima - umyalo wokwethulwa kwesithombe ngokwawo
-rm β kusho ukuthi ngemva kokuma kwesitsha, sisusa yonke into edalwe ngesikhathi sokuphila kwayo
-v "$PWD":/home/gradle/ - ifaka ifolda yamanje nephrojekthi yethu ye-Android kufolda yangaphakathi yesiqukathi /ikhaya/grale/
-w /home/gradle - icacisa uhla lwemibhalo olusebenzayo lwesitsha
android-build:5.4.1-28-27 - igama lesiqukathi sethu esisiqoqile
gradle assembleDebug - Ithimba langempela lomhlangano elihlanganisa iphrojekthi yethu
Uma konke kuhamba kahle, ngemuva kwemizuzwana/imizuzu uzobona esikrinini sakho into efana nale YAKHA NGEMPUMELELO ku-8m 3s! Futhi ifolda ye-app/build/output/apk izoqukatha uhlelo lokusebenza oluhlanganisiwe.
Ungenza eminye imisebenzi ye-Gradle ngendlela efanayo - hlola iphrojekthi, sebenzisa izivivinyo, njll. Inzuzo eyinhloko yukuthi uma sidinga ukwakha iphrojekthi kunoma yimuphi omunye umshini, akudingeki sikhathazeke ngokufaka yonke imvelo futhi kuyoba okwanele ukulanda isithombe esidingekayo bese uqhuba ukwakha kuyo.
Isiqukathi asigcini noma yiziphi izinguquko, futhi umhlangano ngamunye wethulwa kusukela ekuqaleni, okuyinto, ngakolunye uhlangothi, eqinisekisa ubunikazi bomhlangano kungakhathaliseki ukuthi yethulwa kuphi, ngakolunye uhlangothi, isikhathi ngasinye lapho kufanele ulande konke okuncikile. futhi uhlanganise yonke ikhodi futhi, futhi lokhu kungathatha isikhathi esibalulekile ngezinye izikhathi. Ngakho-ke, ngaphezu kokuqala "okubandayo" okujwayelekile, sinenketho yokuqala ukwakha ngenkathi silondoloza okuthiwa. βinqolobaneβ, lapho sigcina khona ifolda engu-~/.gradle ngokumane siyikopishele kufolda yokusebenza yephrojekthi, futhi ekuqaleni kokwakhiwa okulandelayo siyibuyisela emuva. Sihambise zonke izinqubo zokukopisha emibhalweni ehlukene futhi umyalo wokuqalisa ngokwawo waqala ukubukeka kanje
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 yalokho, isikhathi sethu sokwakha iphrojekthi esijwayelekile sancishiswa izikhathi eziningana (kuye ngokuthi inani lokuncika kuphrojekthi, kodwa iphrojekthi evamile yaqala ukuqoqwa ngomzuzu ongu-1 esikhundleni semizuzu emi-5).
Konke lokhu, kunjalo, kunengqondo kuphela uma uneseva yakho yangaphakathi ye-CI/CD, ozisekelayo. Kodwa manje kunezinsizakalo eziningi zamafu lapho zonke lezi zinkinga zixazululwa khona futhi akudingeki ukhathazeke ngakho, futhi izakhiwo ezidingekayo zomhlangano nazo zingacaciswa kuzilungiselelo zephrojekthi.
Abasebenzisi ababhalisiwe kuphela abangabamba iqhaza kuhlolovo.
Ingabe uyalugcina uhlelo lwakho lwe-CI/CD lusendlini noma usebenzisa isevisi yomuntu wesithathu?
-
Sisebenzisa iseva yangaphakathi
-
Sisebenzisa isevisi yangaphandle
-
Asisebenzisi i-CI/CD
-
Okunye
Bangu-42 abasebenzisi abavotile. Abasebenzisi abangu-16 bagobile.
Source: www.habr.com