Byggja Android verkefni í Docker gámi

Þegar þú þróar verkefni fyrir Android vettvang, jafnvel lítið verkefni, verður fyrr eða síðar að takast á við þróunarumhverfið. Til viðbótar við Android SDK er nauðsynlegt að hafa nýjustu útgáfuna af Kotlin, Gradle, vettvangsverkfærum, byggingarverkfærum. Og ef á vél þróunaraðilans eru allar þessar ósjálfstæði leystar í meira mæli með Android Studio IDE, þá á CI/CD þjóninum getur hver uppfærsla breyst í höfuðverk. Og ef í vefþróun Docker hefur orðið staðlað lausn á umhverfisvandamálinu, af hverju ekki að reyna að leysa svipað vandamál í Android þróun með því að nota það...

Fyrir þá sem ekki vita hvað Docker er, til að segja það einfaldlega, það er tæki til að búa til svokallaða. „gáma“ sem innihalda lágmarks OS kjarna og nauðsynlegan hugbúnað sem við getum sett upp hvar sem við viljum, á sama tíma og umhverfið varðveitt. Hvað nákvæmlega verður í ílátinu okkar er ákvarðað í Dockerfile, sem síðan er sett saman í mynd sem hægt er að ræsa hvar sem er og hefur eigin getuleysi.

Uppsetningarferlinu og grunnatriðum Docker er fullkomlega lýst í hans opinber vefsíða. Þess vegna, þegar við lítum aðeins fram á veginn, þá er þetta Dockerfile sem við enduðum með:

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

Við vistum það í möppunni með Android verkefninu okkar og byrjum að byggja ílátið með skipuninni

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

Viðfang -t tilgreinir merkið eða nafnið á ílátinu okkar, sem venjulega samanstendur af nafni þess og útgáfu. Í okkar tilviki kölluðum við það android-build og í útgáfunni bentum við á safn af útgáfum af gradle, android-sdk og platform-tools. Í framtíðinni verður auðveldara fyrir okkur að leita að myndinni sem við þurfum með nafni með því að nota þessa „útgáfu“.

Eftir að samsetningunni er lokið getum við notað myndina okkar á staðnum, við getum hlaðið henni niður með skipuninni hafnarverkamaður ýta í opinbera eða einkamyndageymslu til að hlaða því niður á aðrar vélar.

Sem dæmi skulum við byggja verkefni á staðnum. Til að gera þetta skaltu keyra skipunina í möppunni með verkefninu

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

Við skulum reikna út hvað það þýðir:

skipakví - sjálft myndaræsingarskipunin
-rm — þýðir að eftir að gámurinn stöðvast eyðir hann öllu sem varð til á líftíma hans
-v "$PWD":/home/gradle/ - setur núverandi möppu með Android verkefninu okkar í innri gámamöppuna /home/gradle/
-w /home/gradle — tilgreinir vinnuskrá ílátsins
Android-smíði:5.4.1-28-27 — nafnið á ílátinu okkar sem við söfnuðum
gradle assembleDebug — raunverulegt samsetningarteymi sem setur saman verkefnið okkar

Ef allt gengur vel, þá muntu sjá eitthvað eins og á skjánum þínum eftir nokkrar sekúndur/mínútur BYGGING Árangursrík á 8m 3s! Og app/build/output/apk mappan mun innihalda samsetta forritið.

Þú getur framkvæmt önnur stig verkefni á svipaðan hátt - athugaðu verkefnið, keyrt próf osfrv. Helsti kosturinn er sá að ef við þurfum að byggja verkefnið á einhverri annarri vél, þá þurfum við ekki að hafa áhyggjur af því að setja upp allt umhverfið og það verður nóg að hlaða niður nauðsynlegri mynd og keyra bygginguna í henni.

Gámurinn geymir engar breytingar og hver samsetning er ræst frá grunni, sem annars vegar tryggir auðkenni samstæðunnar óháð því hvar það er ræst, hins vegar í hvert skipti sem þú þarft að hlaða niður öllum ósjálfstæðum og safnaðu saman öllum kóðanum aftur, og þetta getur stundum tekið töluverðan tíma. Þess vegna, til viðbótar við venjulega „kalda“ byrjun, höfum við möguleika á að hefja byggingu á meðan að vista svokallaða. „skyndiminni“, þar sem við vistum ~/.gradle möppuna með því einfaldlega að afrita hana í vinnumöppu verkefnisins og í upphafi næstu smíði skilum við henni aftur. Við færðum allar afritunaraðferðir í aðskildar forskriftir og sjálf ræsingarskipunin fór að líta svona út

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"

Fyrir vikið var meðalverkefnisbyggingartími okkar styttur nokkrum sinnum (fer eftir fjölda ósjálfstæðra verkefnisins, en meðalverkefnið byrjaði þannig að setja saman á 1 mínútu í stað 5 mínútur).

Allt þetta er auðvitað bara skynsamlegt ef þú ert með þinn eigin innri CI/CD miðlara sem þú styður sjálfur. En nú eru margar skýjaþjónustur þar sem öll þessi vandamál eru leyst og þú þarft ekki að hafa áhyggjur af því, og einnig er hægt að tilgreina nauðsynlega samsetningareiginleika í verkefnastillingunum.

Aðeins skráðir notendur geta tekið þátt í könnuninni. Skráðu þig inn, takk.

Geymir þú CI/CD kerfið þitt inni eða notar þriðja aðila þjónustu?

  • Við notum innri netþjón

  • Við notum ytri þjónustu

  • Við notum ekki CI/CD

  • Annað

42 notendur kusu. 16 notendur sátu hjá.

Heimild: www.habr.com

Bæta við athugasemd