ڊاکر ڪنٽينر ۾ Android پروجيڪٽ جي تعمير

جڏهن Android پليٽ فارم لاءِ هڪ پروجيڪٽ ٺاهي رهيا آهيو، جيتوڻيڪ ننڍڙو هڪ، جلدي يا بعد ۾ توهان کي ترقي واري ماحول سان معاملو ڪرڻو پوندو. Android SDK کان علاوه، اهو ضروري آهي ته ڪوٽلن جو جديد نسخو، Gradle، پليٽ فارم-اوزار، تعمير-اوزار. ۽ جيڪڏهن ڊولپر جي مشين تي اهي سڀ انحصار هڪ وڏي حد تائين Android اسٽوڊيو IDE استعمال ڪندي حل ڪيا ويا آهن، پوءِ CI/CD سرور تي هر تازه ڪاري سر درد ۾ تبديل ٿي سگهي ٿي. ۽ جيڪڏهن ويب ڊولپمينٽ ۾ Docker ماحول جي مسئلي جو معياري حل بڻجي چڪو آهي، ته پوءِ ڇو نه ان کي استعمال ڪندي اينڊرائيڊ ڊولپمينٽ ۾ به ساڳيو مسئلو حل ڪرڻ جي ڪوشش ڪئي وڃي.

انهن لاءِ جيڪي نه ٿا ڄاڻن ته ڊڪر ڇا آهي، ان کي آسانيءَ سان چوڻ لاءِ، اهو هڪ اوزار آهي جنهن کي ٺاهڻ لاءِ سڏيو ويندو آهي. ”ڪنٽينر“ جن ۾ گھٽ ۾ گھٽ او ايس ڪنيل ۽ سافٽ ويئر جو ضروري سيٽ شامل ھوندو آھي جنھن کي اسين جتي چاھيون، ماحول کي محفوظ رکڻ دوران ڊيپلائي ڪري سگھون ٿا. اسان جي ڪنٽينر ۾ ڇا ٿيندو اهو طئي ڪيو ويو آهي Dockerfile ۾، جنهن کي پوءِ هڪ تصوير ۾ گڏ ڪيو ويو آهي جيڪو ڪٿي به شروع ڪري سگهجي ٿو ۽ ان ۾ idempotency ملڪيت آهي.

ڊاکر جي انسٽاليشن جي عمل ۽ بنياديات مڪمل طور تي بيان ڪيا ويا آهن سرڪاري ويب سائيٽ. تنهن ڪري، ٿورو اڳتي ڏسندي، هي آهي 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"

اسان ان کي فولڊر ۾ پنهنجي 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 ۾ ڪامياب ٿيو! ۽ ايپ / تعمير / آئوٽ / ايپ فولڊر گڏ ٿيل ايپليڪيشن تي مشتمل هوندو.

توھان ٻئي درجي جا ڪم به ساڳيءَ طرح ڪري سگھو ٿا - پروجيڪٽ چيڪ ڪريو، ٽيسٽ ھلايو، وغيره. مکيه فائدو اهو آهي ته جيڪڏهن اسان کي ڪنهن ٻئي مشين تي پروجيڪٽ ٺاهڻ جي ضرورت آهي، اسان کي پوري ماحول کي نصب ڪرڻ جي باري ۾ پريشان ٿيڻ جي ضرورت ناهي ۽ اهو ضروري تصوير ڊائون لوڊ ڪرڻ ۽ ان ۾ تعمير کي هلائڻ لاء ڪافي هوندو.

ڪنٽينر ڪنهن به تبديلي کي ذخيرو نٿو ڪري، ۽ هر اسيمبلي شروع کان شروع ڪئي وئي آهي، جيڪا، هڪ طرف، اسيمبليء جي سڃاڻپ جي ضمانت ڏئي ٿي، قطع نظر ته اهو ڪٿي شروع ڪيو ويو آهي، ٻئي طرف، هر وقت توهان کي سڀني انحصار کي ڊائون لوڊ ڪرڻو پوندو. ۽ سڀني ڪوڊ کي ٻيهر گڏ ڪريو، ۽ اهو ڪڏهن ڪڏهن اهم وقت وٺي سگھي ٿو. تنهن ڪري، عام طور تي "ٿڌ" جي شروعات کان علاوه، اسان وٽ اهو اختيار آهي ته تعمير کي شروع ڪرڻ دوران نام نهاد بچاء. "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

تبصرو شامل ڪريو