Docker контейнерт Android төслийг бүтээх

Андройд платформд зориулж төсөл боловсруулахдаа хамгийн жижиг ч гэсэн эрт орой хэзээ нэгэн цагт та хөгжлийн орчинтой харьцах хэрэгтэй. Android SDK-ээс гадна Kotlin, Gradle, platform-tools, build-tools-ийн хамгийн сүүлийн хувилбартай байх шаардлагатай. Хэрэв хөгжүүлэгчийн машин дээр эдгээр бүх хамаарлыг Android Studio IDE ашиглан илүү их хэмжээгээр шийдсэн бол CI / CD сервер дээр шинэчлэлт бүр толгойны өвчин болж хувирдаг. Хэрэв вэб хөгжүүлэлтийн хувьд Docker нь хүрээлэн буй орчны асуудлын стандарт шийдэл болсон бол Android хөгжүүлэлт дээр үүнтэй ижил төстэй асуудлыг шийдэж яагаад болохгүй гэж ...

Докер гэж юу болохыг мэдэхгүй хүмүүсийн хувьд хэрэв энэ нь маш энгийн бол энэ нь гэж нэрлэгддэг зүйлийг бий болгох хэрэгсэл юм. Хамгийн бага үйлдлийн системийн цөм, шаардлагатай программ хангамжийг агуулсан "контейнер" бөгөөд бид хүрээлэн буй орчныг хадгалахын зэрэгцээ хүссэн газартаа байрлуулж болно. Манай чингэлэгт яг юу байх вэ гэдгийг Dockerfile-д тодорхойлсон бөгөөд дараа нь түүнийг хаана ч ажиллуулж болохуйц дүрс болгон угсардаг бөгөөд idpotency шинж чанартай байдаг.

Суулгах үйл явц болон Docker-ийн үндсийг түүний дээр маш сайхан дүрсэлсэн байдаг албан ёсны вэбсайт. Тиймээс, бага зэрэг урагшаа харахад бидэнд ийм Dockerfile байна

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

Бид үүнийг Андройд төслийнхөө хавтсанд хадгалаад командын тусламжтайгаар контейнер барьж эхэлнэ

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

Үзүүлэлт -t нь ихэвчлэн түүний нэр, хувилбараас бүрддэг манай савны шошго эсвэл нэрийг тохируулдаг. Манай тохиолдолд бид үүнийг android-build гэж нэрлэсэн бөгөөд хувилбарт бид gradle, android-sdk болон platform-tools хувилбаруудын хослолыг зааж өгсөн. Ирээдүйд ийм "хувилбар" ашиглан өөрт хэрэгтэй зургийг нэрээр нь хайх нь бидэнд илүү хялбар байх болно.

Барилга дууссаны дараа бид зургаа дотооддоо ашиглаж болно, бид үүнийг тушаалаар татаж авах боломжтой докер түлхэх бусад машинд татаж авахын тулд нийтийн эсвэл хувийн зургийн агуулах руу .

Жишээлбэл, орон нутагт төсөл барьчихъя. Үүнийг хийхийн тулд төслийн хавтсанд тушаалыг ажиллуулна уу

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

Энэ нь юу гэсэн үг болохыг олж мэдье:

боомтын гүйгч - зураг эхлүүлэх команд өөрөө
-рм - савыг зогсоосны дараа амьдралынхаа туршид бий болсон бүх зүйлийг устгана гэсэн үг юм
-v "$PWD":/home/gradle/ - Манай Android төсөлтэй одоогийн фолдерыг контейнерийн дотоод хавтас /home/gradle/ руу холбоно.
-w /home/gradle - савны ажлын лавлахыг тохируулна
Android-бүтээл: 5.4.1-28-27 - бидний цуглуулсан савны нэр
gradle assembleDebug - манай төслийг угсардаг барилгын баг өөрөө

Хэрэв бүх зүйл зүгээр болвол хэдэн секунд / минутын дараа та иймэрхүү зүйлийг харах болно 8м 3 секундэд АМЖИЛТТАЙ БАРИЛНА! Мөн app/build/output/apk хавтсанд угсарсан програм байх болно.

Үүний нэгэн адил та бусад даалгавруудыг гүйцэтгэж болно - төслийг шалгах, тест ажиллуулах гэх мэт. Гол давуу тал нь хэрэв бид өөр ямар нэгэн машин дээр төслийг бүтээх шаардлагатай бол бид бүхэл бүтэн орчныг суулгах талаар санаа зовох хэрэггүй бөгөөд шаардлагатай зургийг татаж аваад дотор нь бүтээх ажлыг гүйцэтгэхэд хангалттай.

Контейнер нь ямар ч өөрчлөлтийг хадгалахгүй бөгөөд угсралт бүрийг эхнээс нь эхлүүлдэг бөгөөд энэ нь нэг талаас угсралтын байршлаас үл хамааран угсралтын шинж чанарыг баталгаажуулдаг, нөгөө талаас та бүх хамаарлыг татаж авах шаардлагатай болдог. мөн бүх кодыг дахин эмхэтгэх ба энэ нь заримдаа ихээхэн цаг зарцуулдаг. Тиймээс, ердийн "хүйтэн" эхлэлээс гадна бид угсралтыг эхлүүлэх гэж нэрлэгддэг зүйлийг хадгалах боломжтой. "кэш", бид ~/.gradle фолдерыг төслийн ажлын хавтсанд хуулж аваад хадгалдаг бөгөөд дараагийн бүтээцийн эхэнд буцааж буцааж өгдөг. Бид бүх хуулбарлах процедурыг тусдаа скрипт болгон шилжүүлж, эхлүүлэх команд нь өөрөө иймэрхүү харагдаж эхлэв

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"

Үүний үр дүнд төсөл барих дундаж хугацаа хэд дахин багассан (төслийн хамаарлын тооноос хамаарч, гэхдээ дундаж төсөл 1 минутын оронд 5 минутын дотор баригдаж эхэлсэн).

Хэрэв та өөрөө дэмждэг өөрийн дотоод CI / CD сервертэй бол энэ бүхэн утга учиртай болно. Гэхдээ одоо эдгээр бүх асуудлыг шийдсэн олон үүл үйлчилгээ байдаг бөгөөд та үүнд санаа зовох хэрэггүй бөгөөд шаардлагатай бүтээх шинж чанаруудыг төслийн тохиргоонд зааж өгч болно.

Зөвхөн бүртгэлтэй хэрэглэгчид санал асуулгад оролцох боломжтой. Нэвтрэх, гуйя.

Та CI/CD системээ дотооддоо хадгалдаг уу эсвэл гуравдагч талын үйлчилгээг ашигладаг уу

  • Дотоод сервер ашиглах

  • Гадаад үйлчилгээг ашиглах

  • Бид CI/CD ашигладаггүй

  • Бусад

42 хэрэглэгч санал өгсөн. 16 хэрэглэгч түдгэлзсэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх