Docker ကလန်တိန်နာတလင် Android ပရောဂျက်တစ်ခုတည်ဆောက်ခဌင်သ။

Android ပလပ်ဖောင်သအတလက် ပရောဂျက်တစ်ခုကို တီထလင်သောအခါ၊ အသေသငယ်ဆုံသတစ်ခုပင်၊ မကဌာမီ သို့မဟုတ် နောက်ပိုင်သတလင် သင်သည် ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာ ပတ်ဝန်သကျင်နဟင့် ရင်ဆိုင်ရမည်ဖဌစ်ပါသည်။ Android SDK အပဌင်၊ Kotlin၊ Gradle၊ platform-tools၊ build-tools မျာသ၏ နောက်ဆုံသဗာသရဟင်သရဟိရန် လိုအပ်ပါသည်။ အကယ်၍ developer ၏စက်တလင် ကမဟီခိုမဟုအာသလုံသကို Android Studio IDE ကိုအသုံသပဌု၍ ပိုမိုအတိုင်သအတာတစ်ခုအထိဖဌေရဟင်သပါက CI / CD ဆာဗာတလင်၊ အပ်ဒိတ်တစ်ခုစီသည် ခေါင်သကိုက်သလာသနိုင်သည်။ အကယ်၍ ဝဘ်ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် Docker သည် ပတ်ဝန်သကျင်ပဌဿနာအတလက် စံဖဌေရဟင်သချက်တစ်ခု ဖဌစ်လာခဲ့ပါက၊ Android ဖလံ့ဖဌိုသတိုသတက်မဟုတလင် ၎င်သနဟင့် အလာသတူပဌဿနာကို ဖဌေရဟင်သရန် အဘယ်ကဌောင့် မကဌိုသစာသရသနည်သ။

Docker က ဘာလဲဆိုတာ မသိတဲ့သူတလေအတလက် - အတော်လေသရိုသရဟင်သတယ်ဆိုရင်၊ အဲဒါကို ဖန်တီသဖို့ tool တစ်ခုပါ။ အနိမ့်ဆုံသ OS kernel နဟင့် ပတ်၀န်သကျင်ကို ထိန်သသိမ်သထာသစဉ်တလင် ကျလန်ုပ်တို့ အလိုရဟိရာ နေရာတိုင်သတလင် အသုံသပဌုနိုင်သော ဆော့ဖ်ဝဲအစုံပါရဟိသော "ကလန်တိန်နာမျာသ" ကျလန်ုပ်တို့၏ကလန်တိန်နာတလင်မည်သည်အတိအကျဖဌစ်မည်ကို Dockerfile တလင်ဆုံသဖဌတ်သည်၊ ထို့နောက်မည်သည့်နေရာတလင်မဆိုဖလင့်နိုင်သည့်ပုံနဟင့် ideempotency ဂုဏ်သတ္တိမျာသရဟိသောပုံတစ်ခုအဖဌစ်စုစည်သထာသသည်။

တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်နဟင့် 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"

ကျလန်ုပ်တို့သည် ၎င်သကို ကျလန်ုပ်တို့၏ Android ပရောဂျက်ဖဌင့် ဖိုင်တလဲတလင် သိမ်သဆည်သပဌီသ command ဖဌင့် ကလန်တိန်နာကို စတင်တည်ဆောက်ပါ။

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

parameter သည် -t အမျာသအာသဖဌင့် ၎င်သ၏အမည်နဟင့် ဗာသရဟင်သပါရဟိသော ကျလန်ုပ်တို့၏ကလန်တိန်နာ၏ tag သို့မဟုတ် အမည်ကို သတ်မဟတ်ပေသသည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ၎င်သကို android-build ဟုခေါ်ပဌီသ ဗာသရဟင်သတလင် gradle၊ android-sdk နဟင့် platform-tools ဗာသရဟင်သမျာသကို ပေါင်သစပ်သတ်မဟတ်ထာသသည်။ အနာဂတ်တလင်၊ ထိုသို့သော “ဗာသရဟင်သ” ကို အသုံသပဌု၍ ကျလန်ုပ်တို့ လိုအပ်သော ပုံကို အမည်ဖဌင့် ရဟာဖလေရန် ပိုမိုလလယ်ကူလာပါမည်။

တည်ဆောက်မဟုပဌီသသလာသသောအခါတလင်၊ ကျလန်ုပ်တို့၏ရုပ်ပုံကို စက်တလင်သတလင် အသုံသပဌုနိုင်ပဌီသ ၎င်သကို command ဖဌင့် ဒေါင်သလုဒ်လုပ်နိုင်ပါသည်။ docker တလန်သသည်။ ၎င်သကို အခဌာသစက်မျာသသို့ ဒေါင်သလုဒ်လုပ်ရန်အတလက် အမျာသပိုင် သို့မဟုတ် သီသသန့်ဓာတ်ပုံ သိုလဟောင်ရုံသို့။

ဥပမာအနေနဲ့၊ ဒေသန္တရပရောဂျက်တစ်ခုကို တည်ဆောက်ကဌည့်ရအောင်။ ဒါကိုလုပ်ဖို့၊ ပရောဂျက်ဖိုင်တလဲမဟာ command ကို run ပါ။

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

ဘာကိုဆိုလိုသည်ကို အဖဌေရဟာကဌည့်ရအောင်။

docker ပဌေသ - image launch command ကိုယ်တိုင်
-rm - ဆိုလိုသည်မဟာ ကလန်တိန်နာကို ရပ်တန့်ပဌီသနောက်၊ ၎င်သသည် ၎င်သ၏သက်တမ်သအတလင်သ ဖန်တီသထာသသည့်အရာအာသလုံသကို ဖျက်ပစ်သည်။
-v "$PWD":/home/gradle/ - လက်ရဟိဖိုင်တလဲကို ကျလန်ုပ်တို့၏ Android ပရောဂျက်ဖဌင့် ကလန်တိန်နာ၏အတလင်သပိုင်သဖိုင်တလဲ /home/gradle/ သို့ တပ်ဆင်သည်။
-w /home/gradle - ကလန်တိန်နာ၏ အလုပ်လမ်သညလဟန်ကို သတ်မဟတ်ပေသသည်။
android-build-5.4.1-28-27 - ကျလန်ုပ်တို့စုဆောင်သထာသသော ကလန်တိန်နာအမည်
gradle assembleDebug - ကျလန်ုပ်တို့၏ပရောဂျက်ကို စုစည်သပေသသော တည်ဆောက်ရေသအဖလဲ့ကိုယ်တိုင်

အာသလုံသအဆင်ပဌေရင် စက္ကန့်/မိနစ်လောက်ကဌာပဌီသရင် တစ်ခုခုကို တလေ့ရပါလိမ့်မယ်။ 8m 3s ဖဌင့် အောင်မဌင်စလာတည်ဆောက်ပါ။! ပဌီသတော့ app/build/output/apk folder ထဲမဟာ စုစည်သထာသတဲ့ application တစ်ခု ရဟိပါလိမ့်မယ်။

အလာသတူ၊ သင်သည် ပရောဂျက်ကို စစ်ဆေသခဌင်သ၊ စမ်သသပ်မဟုမျာသ လုပ်ဆောင်ခဌင်သ အစရဟိသည်တို့ကို လုပ်ဆောင်နိုင်သည်။ အဓိကအာသသာချက်မဟာ အခဌာသစက်မျာသတလင် ပရောဂျက်ကို တည်ဆောက်ရန် လိုအပ်ပါက၊ ပတ်ဝန်သကျင်တစ်ခုလုံသကို ထည့်သလင်သခဌင်သအတလက် စိတ်ပူစရာမလိုဘဲ လိုအပ်သောပုံကို ဒေါင်သလုဒ်လုပ်ပဌီသ ၎င်သတလင် တည်ဆောက်ရန် လုံလောက်မည်ဖဌစ်သည်။

ကလန်တိန်နာသည် မည်သည့်ပဌောင်သလဲမဟုကိုမျဟ မသိမ်သဆည်သထာသဘဲ တပ်ဆင်မဟုတစ်ခုစီကို အစမဟစတင်လုပ်ဆောင်ပဌီသ တစ်ဖက်တလင် ၎င်သအာသ မည်သည့်နေရာ၌ပင်ဖဌစ်စေ အခဌာသတစ်ဖက်တလင် သင်သည် မဟီခိုမဟုအာသလုံသကို ဒေါင်သလုဒ်လုပ်သည့်အခါတိုင်သ၊ တစ်ဖက်တလင် စည်သဝေသပလဲ၏အထောက်အထာသကို အာမခံပါသည်။ ကုဒ်အာသလုံသကို ထပ်မံစုစည်သပဌီသ ၎င်သသည် တစ်ခါတစ်ရံတလင် အချိန်မျာသစလာကဌာနိုင်သည်။ ထို့ကဌောင့်၊ ပုံမဟန် "အအေသ" စတင်ခဌင်သအပဌင်၊ ကျလန်ုပ်တို့သည် ၎င်သကို ထိန်သသိမ်သထာသစဉ်တလင် စည်သဝေသပလဲကို စတင်ရန် ရလေသချယ်ခလင့်ရဟိသည်။ "cache" နေရာတလင် ~/.gradle ဖိုင်တလဲကို ပရောဂျက်၏ လုပ်ဆောင်နေသော ဖိုင်တလဲသို့ ကူသယူရုံဖဌင့် သိမ်သဆည်သကာ နောက်တည်ဆောက်မဟုအစတလင် ၎င်သကို ပဌန်ပေသပါသည်။ ကျလန်ုပ်တို့သည် ကူသယူခဌင်သဆိုင်ရာ လုပ်ထုံသလုပ်နည်သအာသလုံသကို သီသခဌာသ scripts မျာသအဖဌစ်သို့ ရလဟေ့လိုက်သည်နဟင့် launch command ကိုယ်တိုင်က ကကဲ့သို့ ဖဌစ်လာပါသည်။

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"

ရလဒ်အနေဖဌင့်၊ ပျဟမ်သမျဟပရောဂျက်တည်ဆောက်ချိန်ကို အဆမျာသစလာလျဟော့ချခဲ့သည် (ပရောဂျက်အပေါ် မဟီခိုမဟုအရေအတလက်ပေါ်မူတည်၍ ပျမ်သမျဟပရောဂျက်သည် ၅ မိနစ်အစာသ ၁ မိနစ်အတလင်သ စတင်တည်ဆောက်သည်)။

သင့်တလင် သင်ကိုယ်တိုင်ပံ့ပိုသပေသသော သင့်ကိုယ်ပိုင်အတလင်သပိုင်သ CI/CD ဆာဗာရဟိမဟသာ ကအရာအာသလုံသသည် အဓိပ္ပာယ်ရဟိမည်ဖဌစ်သည်။ သို့သော် ယခုပဌဿနာမျာသအာသလုံသကို ဖဌေရဟင်သပဌီသဖဌစ်သည့် cloud ဝန်ဆောင်မဟုမျာသစလာရဟိနေပဌီဖဌစ်ပဌီသ ၎င်သနဟင့်ပတ်သက်ပဌီသ သင်စိုသရိမ်နေစရာမလိုဘဲ လိုအပ်သောတည်ဆောက်မဟုဂုဏ်သတ္တိမျာသကို ပရောဂျက်ဆက်တင်မျာသတလင်လည်သ သတ်မဟတ်နိုင်ပါသည်။

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

သင်သည် သင်၏ CI/CD စနစ်ကို အတလင်သတလင် ထာသရဟိသလာသ သို့မဟုတ် ပဌင်ပအဖလဲ့အစည်သ ဝန်ဆောင်မဟုကို အသုံသပဌုပါသလာသ။

  • အတလင်သပိုင်သဆာဗာကိုအသုံသပဌုခဌင်သ။

  • ပဌင်ပဝန်ဆောင်မဟုကို အသုံသပဌုခဌင်သ။

  • ကျလန်ုပ်တို့သည် CI/CD မသုံသပါ။

  • အခဌာသ

အသုံသပဌုသူ 42 ဩှ မဲပေသခဲ့သည်။ သုံသစလဲသူ ၁၉ ဩှ ရဟောင်နေခဲ့ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add