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
# Π’.ΠΊ. ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ 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.
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