Tsim ib qhov project Android hauv Docker thawv

Thaum tsim ib qhov project rau Android platform, txawm tias ib qho me me, sai dua los yog tom qab koj yuav tsum cuam tshuam nrog kev txhim kho ib puag ncig. Ntxiv rau Android SDK, nws yuav tsum muaj qhov tseeb version ntawm Kotlin, Gradle, platform-tools, build-tools. Thiab yog tias ntawm tus tsim tawm lub tshuab tag nrho cov kev vam khom no tau daws kom ntau dua siv Android Studio IDE, tom qab ntawd ntawm CI / CD server txhua qhov hloov tshiab tuaj yeem ua rau mob taub hau. Thiab yog tias hauv kev txhim kho lub vev xaib Docker tau dhau los ua tus qauv daws teeb meem rau ib puag ncig, yog vim li cas ho tsis sim daws qhov teeb meem zoo sib xws hauv kev txhim kho Android siv nws ...

Rau cov neeg uas tsis paub tias Docker yog dab tsi, muab tso rau nws yooj yim, nws yog ib qho cuab yeej tsim lub npe hu ua. "containers" uas muaj tsawg kawg OS kernel thiab cov txheej txheem tsim nyog ntawm software uas peb tuaj yeem xa mus rau qhov twg peb xav tau, thaum khaws cia ib puag ncig. Yuav ua li cas raws nraim yuav nyob rau hauv peb lub thawv yog txiav txim nyob rau hauv Dockerfile, uas yog ces sib sau ua ke rau hauv ib tug duab uas yuav tsum tau launched nyob qhov twg thiab muaj idempotency zog.

Cov txheej txheem kev teeb tsa thiab cov hauv paus ntawm Docker tau piav qhia zoo kawg nkaus hauv nws official website. Yog li ntawd, saib ua ntej me ntsis, qhov no yog Dockerfile peb tau xaus nrog:

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

Peb khaws nws hauv daim nplaub tshev nrog peb qhov project Android thiab pib tsim lub thawv nrog cov lus txib

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

Parameter -t qhia lub cim lossis lub npe ntawm peb lub thawv, uas feem ntau muaj nws lub npe thiab version. Nyob rau hauv peb cov ntaub ntawv, peb hu ua nws hauv-tsim thiab nyob rau hauv lub version peb qhia ib tug txheej ntawm versions ntawm gradle, android-sdk thiab platform-cov cuab yeej. Yav tom ntej, nws yuav yooj yim dua rau peb tshawb nrhiav cov duab peb xav tau los ntawm lub npe siv qhov "version".

Tom qab kev sib dhos ua tiav, peb tuaj yeem siv peb cov duab hauv zos, peb tuaj yeem rub tawm nrog cov lus txib docker zog mus rau ib lub chaw khaws ntaub ntawv pej xeem lossis ntiag tug kom rub nws mus rau lwm lub tshuab.

Ua piv txwv, cia peb tsim ib qhov project hauv zos. Txhawm rau ua qhov no, hauv daim nplaub tshev nrog qhov project, khiav cov lus txib

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

Cia peb kawm seb nws txhais li cas:

docker khiav - cov duab tso tawm hais kom ua nws tus kheej
-rm - txhais tau tias tom qab lub thawv nres, nws tshem tawm txhua yam uas tau tsim thaum lub sijhawm nws lub neej
-v "$PWD":/home/gradle/ - mounts lub nplaub tshev tam sim no nrog peb txoj haujlwm hauv Android rau hauv lub thawv ntim ntim / tsev / qib /
-w /home/gradle - qhia cov npe ua haujlwm ntawm lub thawv
android-tsim: 5.4.1-28-27 - lub npe ntawm peb lub thawv uas peb sau
gradle assembleDebug - pab pawg sib dhos tiag uas sib sau ua ke peb qhov project

Yog tias txhua yam mus zoo, tom qab ntawd hauv ob peb vib nas this / feeb koj yuav pom ntawm koj lub vijtsam ib yam li TAM SIM NO 8m 3s! Thiab lub app / tsim / tso zis / apk nplaub tshev yuav muaj cov ntawv thov sib dhos.

Koj tuaj yeem ua lwm yam haujlwm ua haujlwm zoo ib yam - tshawb xyuas qhov project, khiav kev xeem, thiab lwm yam. Lub ntsiab kom zoo dua yog tias yog tias peb yuav tsum tsim qhov project ntawm lwm lub tshuab, peb tsis tas yuav txhawj xeeb txog kev txhim kho tag nrho ib puag ncig thiab nws yuav txaus los rub tawm cov duab tsim nyog thiab khiav qhov tsim hauv nws.

Lub thawv tsis khaws ib qho kev hloov pauv, thiab txhua lub rooj sib txoos tau pib los ntawm kos, uas, ntawm ib sab, lav tus kheej ntawm lub rooj sib txoos, tsis hais qhov twg nws tau pib, ntawm qhov tod tes, txhua zaus koj yuav tsum rub tawm tag nrho cov dependencies. thiab sau tag nrho cov cai dua, thiab qhov no tuaj yeem siv sij hawm tseem ceeb. Yog li ntawd, ntxiv rau qhov qub "txias" pib, peb muaj kev xaiv ntawm kev pib tsim thaum txuag lub npe hu ua. "cache", qhov twg peb txuag lub ~ / .gradle nplaub tshev los ntawm tsuas yog luam nws mus rau qhov haujlwm ua haujlwm nplaub tshev, thiab thaum pib ntawm kev tsim tom ntej peb rov qab los. Peb tau hloov tag nrho cov txheej txheem luam tawm rau hauv cov ntawv cais thiab cov lus txib pib nws tus kheej pib zoo li qhov no

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"

Raws li qhov tshwm sim, peb lub sijhawm nruab nrab qhov project tsim tau raug txo ob peb zaug (nyob ntawm seb muaj pes tsawg tus neeg nyob ntawm qhov project, tab sis qhov nruab nrab qhov project yog li pib sib sau ua ke hauv 1 feeb tsis yog 5 feeb).

Tag nrho cov no, tau kawg, tsuas yog ua rau kev nkag siab yog tias koj muaj koj tus kheej CI / CD server, uas koj txhawb koj tus kheej. Tab sis tam sim no muaj ntau qhov kev pabcuam huab cua uas tag nrho cov teeb meem no tau daws tau thiab koj tsis tas yuav txhawj xeeb txog nws, thiab cov khoom tsim nyog sib dhos kuj tuaj yeem teev nyob rau hauv qhov project nqis.

Tsuas yog cov neeg siv sau npe tuaj yeem koom nrog hauv daim ntawv ntsuam xyuas. Kos npe rau hauvthov.

Koj puas khaws koj lub CI/CD hauv tsev lossis siv qhov kev pabcuam thib peb?

  • Peb siv lub server sab hauv

  • Peb siv cov kev pabcuam sab nraud

  • Peb tsis siv CI/CD

  • Lwm yam

42 cov neeg siv pov npav. 16 cov neeg siv txwv tsis pub siv.

Tau qhov twg los: www.hab.com

Ntxiv ib saib