ඩොකර් කන්ටේනරයක ඇන්ඩ්‍රොයිඩ් ව්‍යාපෘතියක් තැනීම

ඇන්ඩ්රොයිඩ් වේදිකාව සඳහා ව්යාපෘතියක් සංවර්ධනය කරන විට, කුඩාම එක පවා, ඉක්මනින් හෝ පසුව ඔබට සංවර්ධන පරිසරය සමඟ කටයුතු කිරීමට සිදු වේ. Android SDK වලට අමතරව, Kotlin, Gradle, platform-tools, build-tools හි නවතම අනුවාදයක් තිබීම අවශ්‍ය වේ. සංවර්ධකයාගේ යන්ත්‍රය මත මෙම සියලු පරායත්තතා Android Studio IDE භාවිතයෙන් බොහෝ දුරට විසඳා ඇත්නම්, CI / CD සේවාදායකයේ, සෑම යාවත්කාලීනයක්ම හිසරදයක් බවට පත්විය හැකිය. වෙබ් සංවර්ධනයේදී, ඩොකර් පාරිසරික ගැටලුවට සම්මත විසඳුම බවට පත්ව තිබේ නම්, ඇන්ඩ්‍රොයිඩ් සංවර්ධනයේදී ඒ හා සමාන ගැටළුවක් විසඳීමට උත්සාහ නොකරන්නේ මන්ද ...

ඩොකර් යනු කුමක්දැයි නොදන්නා අය සඳහා - එය තරමක් සරල නම්, මෙය ඊනියා නිර්මාණය කිරීම සඳහා මෙවලමකි. පරිසරය පවත්වා ගනිමින් අපට අවශ්‍ය ඕනෑම තැනකට යෙදවිය හැකි අවම OS කර්නලය සහ අවශ්‍ය මෘදුකාංග කට්ටලය අඩංගු "කන්ටේනර්". අපගේ කන්ටේනරයේ හරියටම කුමක් වේද යන්න තීරණය වන්නේ ඩොකර්ෆයිල් තුළ වන අතර, එය ඕනෑම තැනක දියත් කළ හැකි සහ අයිඩෙන්සි ගුණ ඇති රූපයකට එකලස් කරනු ලැබේ.

ස්ථාපනය කිරීමේ ක්‍රියාවලිය සහ ඩොකර්ගේ මූලික කරුණු ඔහුගේ මත අලංකාර ලෙස විස්තර කර ඇත නිල වෙබ් අඩවිය. ඒ නිසා පොඩ්ඩක් ඉස්සරහට බැලුවම අපිට එහෙම 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/ - අපගේ ඇන්ඩ්‍රොයිඩ් ව්‍යාපෘතිය සමඟ වත්මන් ෆෝල්ඩරය බහාලුම් අභ්‍යන්තර ෆෝල්ඩරය /home/gradle/ වෙත සවි කරයි
-w / home/gradle - බහාලුම්වල වැඩ කරන නාමාවලිය සකසයි
android-build:5.4.1-28-27 - අපි එකතු කර ඇති අපගේ බහාලුම් නම
gradle assembleDebug - අපගේ ව්‍යාපෘතිය එකලස් කරන ගොඩනැගීමේ කණ්ඩායමම

සෑම දෙයක්ම හොඳින් සිදුවුවහොත්, තත්පර / මිනිත්තු කිහිපයකට පසු ඔබට එවැනි දෙයක් පෙනෙනු ඇත මීටර් 8 තත්ත්පර 3 කින් සාර්ථක ලෙස ගොඩනඟන්න! ඒවගේම app/build/output/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

අදහස් එක් කරන්න