Ṣiṣe iṣẹ akanṣe Android kan ninu apoti Docker kan

Nigbati o ba n ṣe agbekalẹ iṣẹ akanṣe kan fun pẹpẹ Android, paapaa ọkan ti o kere julọ, laipẹ tabi ya o ni lati koju agbegbe idagbasoke. Ni afikun si Android SDK, o jẹ dandan lati ni titun ti ikede Kotlin, Gradle, Syeed-irinṣẹ, Kọ-irinṣẹ. Ati pe ti o ba wa lori ẹrọ olupilẹṣẹ gbogbo awọn igbẹkẹle wọnyi ni ipinnu si iwọn nla nipa lilo IDE Studio Studio Android, lẹhinna lori olupin CI/CD imudojuiwọn kọọkan le yipada si orififo. Ati pe ti o ba wa ni idagbasoke wẹẹbu Docker ti di ojutu boṣewa si iṣoro agbegbe, lẹhinna kilode ti o ko gbiyanju lati yanju iṣoro kanna ni idagbasoke Android nipa lilo rẹ…

Fun awọn ti ko mọ kini Docker jẹ, lati sọ ni irọrun, o jẹ ohun elo fun ṣiṣẹda ohun ti a pe. “awọn apoti” ti o ni ekuro OS pọọku ati eto sọfitiwia pataki ti a le ran lọ si ibikibi ti a fẹ, lakoko titọju ayika. Kini gangan yoo wa ninu apo eiyan wa ni ipinnu ni Dockerfile, eyiti a pejọ lẹhinna sinu aworan ti o le ṣe ifilọlẹ nibikibi ti o ni awọn ohun-ini idempotency.

Ilana fifi sori ẹrọ ati awọn ipilẹ ti Docker jẹ apejuwe ni pipe ninu tirẹ aaye ayelujara osise. Nitorinaa, wiwa siwaju diẹ, eyi ni Dockerfile ti a pari pẹlu:

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

A fipamọ sinu folda pẹlu iṣẹ akanṣe Android wa ki o bẹrẹ si kọ eiyan naa pẹlu aṣẹ naa

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

Apaadi -t ni pato awọn tag tabi orukọ ti wa eiyan, eyi ti o maa oriširiši ti awọn oniwe orukọ ati version. Ninu ọran wa, a pe ni android-build ati ninu ẹya ti a tọka si ṣeto awọn ẹya ti gradle, android-sdk ati awọn irinṣẹ pẹpẹ. Ni ojo iwaju, yoo rọrun fun wa lati wa aworan ti a nilo nipasẹ orukọ nipa lilo "ẹya" yii.

Lẹhin ti apejọ naa ti pari, a le lo aworan wa ni agbegbe, a le ṣe igbasilẹ pẹlu aṣẹ naa docker titari si ibi ipamọ aworan ti gbogbo eniyan tabi ikọkọ lati ṣe igbasilẹ si awọn ẹrọ miiran.

Fun apẹẹrẹ, jẹ ki a kọ iṣẹ akanṣe ni agbegbe. Lati ṣe eyi, ninu folda pẹlu iṣẹ akanṣe, ṣiṣe aṣẹ naa

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

Jẹ ká ro ero ohun ti o tumo si:

ṣiṣe docker - pipaṣẹ ifilọlẹ aworan funrararẹ
-rm — tumo si wipe lẹhin ti awọn eiyan duro, o pa ohun gbogbo ti o ti a da nigba aye re
-v "$PWD":/ile/gradle/ - gbe folda lọwọlọwọ pẹlu iṣẹ akanṣe Android wa sinu folda eiyan inu / ile / gradle /
-w /ile/gradle - pato awọn ṣiṣẹ liana ti awọn eiyan
Android-kọ: 5.4.1-28-27 — awọn orukọ ti wa eiyan ti a gba
gradle assembleDebug - ẹgbẹ apejọ gangan ti o ṣajọpọ iṣẹ akanṣe wa

Ti ohun gbogbo ba lọ daradara, lẹhinna ni iṣẹju-aaya / iṣẹju diẹ iwọ yoo rii loju iboju rẹ nkankan bi Aṣeyọri ni 8m 3s! Ati app / kọ / o wu / apk folda yoo ni ohun elo ti o pejọ.

O le ṣe awọn iṣẹ-ṣiṣe gradle miiran ni ọna kanna - ṣayẹwo iṣẹ akanṣe, ṣiṣe awọn idanwo, ati bẹbẹ lọ. Anfani akọkọ ni pe ti a ba nilo lati kọ iṣẹ akanṣe lori eyikeyi ẹrọ miiran, a ko nilo lati ṣe aniyan nipa fifi sori ẹrọ gbogbo agbegbe ati pe yoo to lati ṣe igbasilẹ aworan ti o yẹ ati ṣiṣe itumọ ninu rẹ.

Eiyan naa ko tọju awọn iyipada eyikeyi, ati pe apejọ kọọkan ti ṣe ifilọlẹ lati ibere, eyiti, ni apa kan, ṣe iṣeduro idanimọ ti apejọ laibikita ibiti o ti ṣe ifilọlẹ, ni apa keji, ni gbogbo igba ti o ni lati ṣe igbasilẹ gbogbo awọn igbẹkẹle. ki o si sakojo gbogbo awọn koodu lẹẹkansi, ki o si yi le ma gba significant akoko. Nitorinaa, ni afikun si ibẹrẹ “tutu” deede, a ni aṣayan lati bẹrẹ kọ lakoko fifipamọ ohun ti a pe. “kaṣe”, nibiti a ti fipamọ folda ~/ .gradle nipa didakọ rẹ nirọrun si folda iṣẹ iṣẹ naa, ati ni ibẹrẹ ti kọ atẹle a da pada pada. A gbe gbogbo awọn ilana didaakọ sinu awọn iwe afọwọkọ lọtọ ati aṣẹ ifilọlẹ funrararẹ bẹrẹ lati dabi eyi

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"

Gẹgẹbi abajade, akoko kikọ iṣẹ akanṣe apapọ wa dinku ni ọpọlọpọ igba (da lori nọmba awọn igbẹkẹle lori iṣẹ akanṣe naa, ṣugbọn iṣẹ akanṣe apapọ nitorinaa bẹrẹ lati pejọ ni iṣẹju 1 dipo iṣẹju 5).

Gbogbo eyi, dajudaju, nikan ni oye ti o ba ni olupin CI / CD ti inu rẹ, eyiti o ṣe atilẹyin fun ararẹ. Ṣugbọn ni bayi ọpọlọpọ awọn iṣẹ awọsanma wa ninu eyiti gbogbo awọn iṣoro wọnyi ti yanju ati pe o ko ni lati ṣe aniyan nipa rẹ, ati pe awọn ohun-ini apejọ pataki le tun ṣe pato ninu awọn eto iṣẹ akanṣe.

Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa. wọle, Jowo.

Ṣe o tọju eto CI/CD rẹ sinu ile tabi lo iṣẹ ẹnikẹta?

  • A nlo olupin inu

  • A lo ohun ita iṣẹ

  • A ko lo CI/CD

  • Omiiran

42 olumulo dibo. 16 olumulo abstained.

orisun: www.habr.com

Fi ọrọìwòye kun