په ډاکر کانټینر کې د Android پروژې رامینځته کول

کله چې د Android پلیټ فارم لپاره پروژه رامینځته کړئ ، حتی یو کوچنی ، ژر یا وروسته تاسو باید د پراختیا چاپیریال سره معامله وکړئ. د Android SDK سربیره ، دا اړینه ده چې د کوټلین ، ګریډل ، پلیټ فارم اوزار ، جوړونې وسیلې وروستۍ نسخه ولرئ. او که چیرې د پراختیا کونکي ماشین کې دا ټول انحصارونه د Android سټوډیو IDE په کارولو سره تر ډیره حده حل شي ، نو په CI/CD سرور کې هر تازه معلومات کولی شي په سر درد بدل کړي. او که د ویب پراختیا کې ډاکر د چاپیریال ستونزې معیاري حل ګرځیدلی ، نو ولې د دې په کارولو سره د Android پراختیا کې ورته ستونزې حل کولو هڅه نه کوئ ...

د هغو کسانو لپاره چې نه پوهیږي ډاکر څه شی دی ، په ساده ډول یې ویلو لپاره ، دا د تش په نامه رامینځته کولو وسیله ده. "کانټینرونه" چې لږترلږه د OS کارنل او د سافټویر اړین سیټ لري چې موږ کولی شو هرچیرې چې وغواړو ځای په ځای کړو ، پداسې حال کې چې چاپیریال ساتو. زموږ په کانټینر کې به واقعیا څه وي په ډاکرفایل کې ټاکل کیږي ، کوم چې بیا په داسې عکس کې راټولیږي چې هرچیرې پیل کیدی شي او د ایډمپوټینسي ملکیتونه لري.

د ډاکر نصبولو پروسه او اساسات په بشپړ ډول د هغه په ​​​​کې بیان شوي رسمي ویب پاڼه. له همدې امله ، یو څه مخکې ګورئ ، دا هغه ډاکرفیل دی چې موږ یې پای ته ورسوو:

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

موږ دا زموږ د Android پروژې سره په فولډر کې خوندي کوو او د کمانډ سره د کانټینر جوړول پیل کوو

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

پارسيم -t زموږ د کانټینر ټګ یا نوم مشخص کوي، کوم چې معمولا د هغې نوم او نسخه لري. زموږ په قضیه کې ، موږ دې ته د android-build په نوم وایو او په نسخه کې موږ د gradle ، android-sdk او پلیټ فارم اوزارونو نسخو سیټ ته اشاره وکړه. په راتلونکي کې، دا به زموږ لپاره اسانه وي چې د دې "نسخه" په کارولو سره د نوم په واسطه د هغه انځور لټون وکړو چې موږ ورته اړتیا لرو.

وروسته لدې چې مجلس بشپړ شو ، موږ کولی شو خپل عکس په ځایی ډول وکاروو ، موږ کولی شو دا د کمانډ سره ډاونلوډ کړو ډاکر فشار د عامه یا شخصي عکس ذخیره کولو لپاره دا نورو ماشینونو ته ډاونلوډ کړئ.

د مثال په توګه، راځئ چې په سیمه ایزه توګه یوه پروژه جوړه کړو. د دې کولو لپاره، د پروژې سره فولډر کې، کمانډ چل کړئ

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-build: 5.4.1-28-27 - زموږ د کانټینر نوم چې موږ راټول کړی
gradle assembleDebug - د غونډې اصلي ټیم چې زموږ پروژه راټولوي

که هرڅه سم وي ، نو په څو ثانیو / دقیقو کې به تاسو په خپل سکرین کې یو څه وګورئ په 8m 3s کې بریالي جوړ کړئ! او د اپلیکیشن / جوړ / محصول / apk فولډر به راټول شوي غوښتنلیک ولري.

تاسو کولی شئ په ورته ډول نور د رتبې دندې ترسره کړئ - پروژه وګورئ، ازموینې ترسره کړئ، او داسې نور. اصلي ګټه دا ده چې که موږ په کوم بل ماشین کې پروژه رامینځته کولو ته اړتیا ولرو ، موږ اړتیا نلرو چې د ټول چاپیریال نصبولو په اړه اندیښنه وکړو او دا به د اړین عکس ډاونلوډ کولو او په دې کې د جوړولو چلولو لپاره کافي وي.

کانټینر هیڅ بدلون نه ساتي ، او هر مجلس له سکریچ څخه پیل کیږي ، کوم چې له یوې خوا ، د غونډې هویت تضمینوي پرته لدې چې چیرې پیل شوی وي ، له بلې خوا ، هرځل چې تاسو باید ټول انحصار ډاونلوډ کړئ. او ټول کوډ بیا تالیف کړئ، او دا ځینې وختونه د پام وړ وخت نیسي. له همدې امله ، د معمول "سړه" پیل سربیره ، موږ د جوړونې پیل کولو اختیار لرو پداسې حال کې چې نومول شوي خوندي کول. "cache"، چیرې چې موږ د پروژې کاري فولډر ته په ساده ډول د کاپي کولو له لارې ~/.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

Add a comment