Kupanga pulojekiti ya nsanjayi Android, ngakhale kakang'ono kwambiri, posachedwa kapena mtsogolo kayenera kuthana ndi malo otukuka. Kuphatikiza apo Android SDK imafuna mtundu waposachedwa wa Kotlin, Gradle, zida za nsanja, ndi zida zomangira. Ndipo ngati zili pamakina a wopanga mapulogalamu, kudalirana konseku kumathetsedwa pogwiritsa ntchito Android Studio IDE, kenako pa seva ya CI/CD, zosintha zilizonse zimatha kukhala mutu wopweteka. Ndipo ngati Docker yakhala yankho lokhazikika pa vuto la chilengedwe pakupanga mawebusayiti, bwanji osayesa kuthetsa vuto lofananalo mu Android-chitukuko…
Kwa iwo omwe sadziwa kuti Docker ndi chiyani - ngati ndizosavuta, ndiye kuti ichi ndi chida chopangira zomwe zimatchedwa. "Zotengera" zomwe zili ndi OS kernel yocheperako komanso pulogalamu yofunikira yomwe titha kuyika kulikonse komwe tikufuna, ndikusunga chilengedwe. Zomwe zidzakhale m'chidebe chathu zimatsimikiziridwa mu Dockerfile, yomwe imasonkhanitsidwa kukhala chithunzi chomwe chitha kukhazikitsidwa kulikonse ndipo chimakhala ndi katundu wa idempotency.
Njira yokhazikitsira ndi zoyambira za Docker zikufotokozedwa bwino zake . Chifukwa chake, kuyang'ana patsogolo pang'ono, tili ndi Dockerfile yotere
# Т.к. основным инструментом для сборки 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"
Timasunga mu chikwatu ndi chathu Android-kuyendetsa ndikuyendetsa chidebe chomanga ndi lamulo
docker build -t android-build:5.4-28-27 .chizindikiro -t imayika chizindikiro kapena dzina la chidebe chathu, chomwe nthawi zambiri chimakhala ndi dzina lake ndi mtundu wake. Kwa ife, tidayitcha kuti android-build ndipo mu mtunduwo tidatchula mitundu ya gradle, android-sdk ndi nsanja ya zida. M'tsogolomu, zidzakhala zosavuta kuti tifufuze chithunzi chomwe tikufuna ndi dzina pogwiritsa ntchito "mtundu" wotere.
Pambuyo pakumangako, titha kugwiritsa ntchito chithunzi chathu kwanuko, titha kutsitsa ndi lamulo kukankha docker kumalo osungira zithunzi zapagulu kapena zachinsinsi kuti mutsitse kumakina ena.
Mwachitsanzo, tiyeni tipange pulojekiti yakumaloko. Kuti muchite izi, mu chikwatu cha polojekiti, yendetsani lamulo
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebugTiyeni tione tanthauzo lake:
docker akuthamanga - lamulo loyambitsa chithunzi lokha
-rm - zikutanthauza kuti atayimitsa chidebecho, amachotsa zonse zomwe zidapangidwa pamoyo wake
-v "$PWD":/home/gradle/ - imayika chikwatu chomwe chilipo ndi chathu Android- pulojekiti ku chikwatu chamkati cha chidebe /home/gradle/
-w /home/gradle - imakhazikitsa chikwatu chogwirira ntchito cha chidebecho
android-build: 5.4.1-28-27 - dzina la chidebe chathu chomwe tatolera
gradle assembleDebug - gulu lomanga lokha, lomwe limasonkhanitsa polojekiti yathu
Ngati zonse zikuyenda bwino, pambuyo pa masekondi / mphindi zingapo mudzawona zina PANGANI BWINO mu 8m 3s! Ndipo mufoda ya app/build/output/apk padzakhala ntchito yosonkhanitsidwa.
Momwemonso, mutha kuchita ntchito zina zapang'onopang'ono - onani pulojekiti, kuyesa mayeso, ndi zina. Ubwino waukulu ndikuti ngati tikufuna kumanga pulojekiti pamakina ena aliwonse, sitiyenera kudandaula za kukhazikitsa chilengedwe chonse, ndipo zidzakhala zokwanira kukopera chithunzi chofunikira ndikuyendetsa kumangamo.
Chidebecho sichisunga zosintha zilizonse, ndipo msonkhano uliwonse umayambika, womwe, kumbali imodzi, umatsimikizira kuti msonkhanowo ndi ndani mosasamala kanthu komwe wayambika, kumbali ina, nthawi iliyonse yomwe muyenera kutsitsa zodalira zonse. ndikuphatikizanso ma code onse, ndipo izi zitha kutenga nthawi yayitali. Choncho, kuwonjezera pa chiyambi "chozizira" chokhazikika, tili ndi mwayi woyambitsa msonkhano ndikusunga zomwe zimatchedwa. "cache", komwe timasunga chikwatu cha ~/.gradle mwa kungochikopera ku chikwatu chogwira ntchito cha polojekitiyi, ndipo kumayambiriro kwa chomanga chotsatira timachibwezeretsanso. Tinasuntha njira zonse zokopera m'malemba osiyana ndipo lamulo loyambitsa lidayamba kuwoneka chonchi
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"Chotsatira chake, pafupifupi nthawi yomanga pulojekiti inachepetsedwa kangapo (malingana ndi chiwerengero cha kudalira pa polojekitiyi, koma polojekitiyi inayamba kumangidwa mu 1 miniti m'malo mwa mphindi 5).
Zonsezi zokha zimakhala zomveka ngati muli ndi seva yanu yamkati ya CI / CD, yomwe inuyo mumathandizira. Koma tsopano pali mautumiki ambiri amtambo omwe mavuto onsewa amathetsedwa ndipo simuyenera kudandaula nazo, ndipo zofunikira zomangamanga zingathenso kufotokozedwa muzokonzekera polojekiti.
Ogwiritsa ntchito olembetsedwa okha ndi omwe angatenge nawo gawo pa kafukufukuyu. chonde.
Kodi mumasunga dongosolo lanu la CI/CD mkati kapena mumagwiritsa ntchito gulu lachitatu
Kugwiritsa ntchito seva yamkati
Kugwiritsa ntchito ntchito zakunja
Sitigwiritsa ntchito CI/CD
Zina
Ogwiritsa ntchito 42 adavota. Ogwiritsa 16 adakana.
Source: www.habr.com
