በ Docker ኮንቴይነር ውስጥ የአንድሮይድ ፕሮጀክት መገንባት

ለአንድሮይድ መድረክ ፕሮጀክት ሲገነቡ፣ ትንሹም ቢሆን ፈጥኖም ይሁን ዘግይቶ የእድገት አካባቢውን መቋቋም አለብዎት። ከ አንድሮይድ ኤስዲኬ በተጨማሪ የኮትሊን፣ ግራድል፣ የመሳሪያ ስርዓት-መሳሪያዎች፣ የግንባታ መሳሪያዎች የቅርብ ጊዜ ስሪት ማግኘት ያስፈልጋል። እና በገንቢው ማሽን ላይ እነዚህ ሁሉ ጥገኞች አንድሮይድ ስቱዲዮ IDE በመጠቀም በከፍተኛ መጠን ከተፈቱ በሲአይ/ሲዲ አገልጋይ ላይ እያንዳንዱ ዝመና ወደ ራስ ምታት ሊቀየር ይችላል። እና በድር ልማት ዶከር ለአካባቢ ችግር መደበኛ መፍትሄ ከሆነ ለምን አንድሮይድ ልማትን በመጠቀም ተመሳሳይ ችግር ለመፍታት አይሞክሩም…

ዶከር ምን እንደሆነ ለማያውቁ, በቀላሉ ለማስቀመጥ, የሚባሉትን ለመፍጠር መሳሪያ ነው. አነስተኛ የስርዓተ ክወና ከርነል እና በፈለግንበት ቦታ ልናሰማራ የምንችለውን አስፈላጊ የሶፍትዌር ስብስብ የያዙ “ኮንቴይነሮች” አካባቢን በመጠበቅ ላይ። በእቃ መያዛችን ውስጥ በትክክል ምን እንደሚሆን በ 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 የመያዣችን መለያ ወይም ስም ይገልፃል፣ እሱም አብዛኛውን ጊዜ ስሙን እና ስሪቱን ያካትታል። በእኛ ሁኔታ አንድሮይድ-build ብለን እንጠራዋለን እና በስሪት ውስጥ የግራድል ፣ አንድሮይድ-ኤስዲክ እና የመሳሪያ ስርዓት-መሳሪያዎች ስሪቶችን አመልክተናል። ለወደፊቱ, ይህንን "ስሪት" በመጠቀም የምንፈልገውን ምስል በስም መፈለግ ቀላል ይሆንልናል.

ስብሰባው ካለቀ በኋላ ምስላችንን በአካባቢው መጠቀም እንችላለን, በትእዛዙ ማውረድ እንችላለን ዶከር መግፋት ወደ ሌሎች ማሽኖች ለማውረድ ወደ ይፋዊ ወይም የግል ምስል ማከማቻ።

ለምሳሌ በአገር ውስጥ ፕሮጀክት እንገንባ። ይህንን ለማድረግ ከፕሮጀክቱ ጋር ባለው አቃፊ ውስጥ ትዕዛዙን ያሂዱ

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

ምን ማለት እንደሆነ እንወቅ፡-

ዳኮለር ሩጫ - የምስል ማስጀመሪያ ትእዛዝ ራሱ
-አር - መያዣው ከቆመ በኋላ በህይወቱ ውስጥ የተፈጠረውን ሁሉ ይሰርዛል ማለት ነው
-v "$PWD":/home/gradle/ - የአሁኑን ማህደር ከአንድሮይድ ፕሮጄክታችን ጋር ወደ የውስጥ መያዣ አቃፊ /ቤት/ግራድል/ ይሰካል
-ወ/ቤት/ግራድል - የመያዣውን የሥራ ማውጫ ይገልጻል
አንድሮይድ-ግንባታ፡5.4.1-28-27 - የሰበሰብነው የእቃ መያዣችን ስም
gradle assembleደብግ - ፕሮጀክታችንን የሚሰበስብ ትክክለኛው የስብሰባ ቡድን

ሁሉም ነገር ጥሩ ከሆነ፣ በጥቂት ሰከንዶች/ደቂቃ ውስጥ እንደዚህ ያለ ነገር በስክሪኑ ላይ ያያሉ። በ 8 ሜትር 3 ሰከንድ ውስጥ ስኬታማ ይገንቡ! እና አፕ/ግንባታ/ውፅዓት/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/ሲዲ አገልጋይ ካለህ ብቻ ነው፣ ይህም እራስህን የምትደግፈው። አሁን ግን እነዚህ ሁሉ ችግሮች የሚፈቱባቸው ብዙ የደመና አገልግሎቶች አሉ እና ስለሱ መጨነቅ አያስፈልገዎትም, እና አስፈላጊዎቹ የመሰብሰቢያ ባህሪያት በፕሮጀክቱ ቅንብሮች ውስጥ ሊገለጹ ይችላሉ.

በዳሰሳ ጥናቱ ውስጥ የተመዘገቡ ተጠቃሚዎች ብቻ መሳተፍ ይችላሉ። ስግን እንእባክህን።

የእርስዎን የሲአይ/ሲዲ ስርዓት በቤት ውስጥ ያስቀምጣሉ ወይም የሶስተኛ ወገን አገልግሎት ይጠቀማሉ?

  • የውስጥ አገልጋይ እንጠቀማለን።

  • የውጭ አገልግሎት እንጠቀማለን።

  • CI/CD አንጠቀምም።

  • ሌላ

42 ተጠቃሚዎች ድምጽ ሰጥተዋል። 16 ተጠቃሚዎች ድምፀ ተአቅቦ አድርገዋል።

ምንጭ: hab.com

አስተያየት ያክሉ