Umhlangano Android-iphrojekthi esitsheni se-Docker

Ukuthuthukisa iphrojekthi yesikhulumi Android, ngisho nencane kunazo zonke, ngokushesha noma kamuva kufanele ibhekane nesimo sentuthuko. Ngaphezu kwalokho Android I-SDK idinga inguqulo yakamuva ye-Kotlin, i-Gradle, amathuluzi epulatifomu, kanye namathuluzi okwakha. Futhi uma kusemshinini wonjiniyela, konke lokhu kuncika kuxazululwa kakhulu kusetshenziswa Android I-Studio IDE, bese kuba kuseva ye-CI/CD, yonke isibuyekezo singaphenduka ikhanda elibuhlungu. Futhi uma i-Docker isibe yisisombululo esijwayelekile senkinga yemvelo ekuthuthukisweni kwewebhu, kungani ungazami ukuxazulula inkinga efanayo ku Android-intuthuko…

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 neyethu Android-project bese usebenzisa ukwakha isitsha 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 neyethu Android- iphrojekthi eya kufolda yangaphakathi yesitsha /home/gradle/
-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

Thenga ukusingathwa okuthembekile kwamasayithi anokuvikelwa kwe-DDoS, amaseva e-VPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekile ngokuvikelwa kwe-DDoS, amaseva e-VPS VDS | ProHoster