Avakirina projeyek Android-ê di konteynerek Docker de

Dema ku projeyek ji bo platforma Android-ê pêşve dixe, hetta ya herî piçûk jî, zû an dereng divê hûn bi hawîrdora pêşkeftinê re mijûl bibin. Ji bilî SDK-ya Android-ê, pêdivî ye ku guhertoya herî dawî ya Kotlin, Gradle, platform-tools, build-tools hebe. Û heke li ser makîneya pêşdebiran hemî van pêwendiyan bi karanîna Android Studio IDE-ê bi rêjeyek mezintir têne çareser kirin, wê hingê li ser servera CI / CD, her nûvekirin dikare bibe serêş. Û heke di pêşkeftina malperê de, Docker bûye çareseriya standard a pirsgirêka jîngehê, wê hingê çima hewl nadin ku di pêşkeftina Android-ê de pirsgirêkek wusa bi wê re çareser bikin ...

Ji bo kesên ku nizanin Docker çi ye - heke ew pir hêsan e, wê hingê ev amûrek e ku meriv jê re tê gotin. "Konteyner" ku herî kêm kernelê OS-ê û komek nermalava pêdivî ye ku em dikarin li ku derê bixwazin bi cîh bikin, di heman demê de jîngehê diparêzin. Dê bi rastî di konteynera me de çi be di Dockerfile de tê destnîşankirin, ku dûv re di wêneyek ku dikare li her deverê were destpêkirin û xwedan taybetmendiyên bêhêziyê ye, tê berhev kirin.

Pêvajoya sazkirinê û bingehên Docker li ser wî xweş têne vegotin malpera fermî. Ji ber vê yekê, hinekî li pêş me dinihêre, me Dockerfilek wusa heye

# Т.к. основным инструментом для сборки 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"

Em bi projeya xweya Android-ê re wê di peldankê de hilînin û bi fermanê dest bi avakirina konteynerê dikin

docker build -t android-build:5.4-28-27 .

Parîsê -t tag an navê konteynera me, ku bi gelemperî ji nav û guhertoya wê pêk tê, destnîşan dike. Di doza me de, me jê re got android-build û di guhertoyê de me hevbendiyek guhertoyên gradle, android-sdk û platform-tools diyar kir. Di pêşerojê de, dê ji me re hêsantir be ku em bi navê "guhertoyek" li wêneyê ku em hewce ne bigerin.

Piştî ku avahî derbas bû, em dikarin wêneya xwe herêmî bikar bînin, em dikarin bi fermanê dakêşin docker push li depoyek wêneya giştî an taybet da ku wê li makîneyên din dakêşin.

Weke mînak em projeyek herêmî ava bikin. Ji bo vê yekê, di peldanka projeyê de, fermanê bimeşînin

docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug

Ka em fêm bikin ka tê çi wateyê:

docker run - fermana destpêkirina wêneyê bixwe
-rm - tê wê wateyê ku piştî sekinandina konteynerê, ew her tiştê ku di jiyana xwe de hatî afirandin jê dike
-v "$PWD":/mal/gradle/ - Peldanka heyî bi projeya meya Android-ê re li peldanka hundurê konteynerê /home/gradle/ saz dike
-w /mal/gradle - pelrêça xebatê ya konteynerê saz dike
android-build: 5.4.1-28-27 - navê konteynera me ya ku me berhev kiriye
gradle assembleDebug - tîmê avakirinê bixwe, ku projeya me berhev dike

Ger her tişt baş biçe, wê hingê piştî çend hûrdeman / hûrdem hûn ê tiştek mîna bibînin Di 8m 3s de SERKEFTÎ AVAKIRIN! Û di peldanka sepanê/avakirin/derketin/apk de dê serîlêdanek berhevkirî hebe.

Bi heman rengî, hûn dikarin karên din ên gradle bikin - projeyê kontrol bikin, ceribandinan bimeşînin, hwd. Feydeya sereke ev e ku ger hewce be ku em proje li ser makîneyek din ava bikin, ne hewce ye ku em ji sazkirina tevahî jîngehê xeman bikin, û ew ê bes be ku hûn wêneya pêwîst dakêşin û çêkirinê tê de bimeşînin.

Konteynir tu guhertinan hilnagire, û her meclîs ji sifirê ve tê dest pê kirin, ku, ji aliyekî ve, nasnameya meclîsê garantî dike bêyî ku li ku derê hatî destpêkirin, ji hêla din ve, her carê ku hûn neçar in ku hemî pêwendiyan dakêşin. û dîsa hemî kodê berhev bikin, û ev carinan dikare demek girîng bigire. Ji ber vê yekê, ji bilî destpêka "sar" ya adetî, vebijarka me heye ku em dest bi meclîsê bikin di heman demê de ya ku jê re tê gotin diparêzin. "cache", ku em peldanka ~/.gradle hildibijêrin bi tenê kopîkirina wê li peldanka xebatê ya projeyê, û di destpêka avakirina din de em wê paşde vedigerînin. Me hemî prosedurên kopîkirinê veguhezand nav nivîsarên cihêreng û fermana destpêkirinê bixwe dest pê kir ku bi vî rengî xuya bike

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"

Wekî encamek, dema avakirina projeyê ya navîn çend caran hate kêm kirin (li gorî hejmara girêdayînên li ser projeyê ve girêdayî ye, lê bi vî rengî projeya navînî di şûna 1 hûrdeman de di 5 hûrdemê de dest pê kir ku ava bike).

Hemî ev bi serê xwe maqûl e tenê heke we servera xweya CI / CD ya hundurîn hebe, ku hûn bi xwe piştgirî dikin. Lê naha gelek karûbarên ewr hene ku tê de van hemî pirsgirêk têne çareser kirin û hûn ne hewce ne ku ji vê yekê xeman bibin, û taybetmendiyên avakirina pêdivî jî dikarin di mîhengên projeyê de bêne diyar kirin.

Tenê bikarhênerên qeydkirî dikarin beşdarî anketê bibin. Têketinji kerema xwe.

Ma hûn pergala CI/CD-ya xwe ya hundurîn digirin an karûbarek partiya sêyemîn bikar tînin

  • Bikaranîna serverek navxweyî

  • Karûbarek derveyî bikar bînin

  • Em CI/CD bikar naynin

  • Din

42 bikarhêneran deng dan. 16 bikarhêner jî betal bûn.

Source: www.habr.com

Add a comment