Ukwakha iphrojekthi ye-Android esitsheni se-Docker

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 iwebhusayithi esemthethweni. Ngakho-ke, uma sibheka phambili kancane, le yi-Dockerfile esigcine 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 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. Ngena ngemvume, wamukelekile.

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

Engeza amazwana