αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„ Android αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž»αž„ Docker

αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš Android αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžαžΌαž…αž”αŸ†αž•αž»αžαž€αŸαžŠαŸ„αž™ αž˜αž·αž“αž™αžΌαžšαž˜αž·αž“αž†αžΆαž”αŸ‹αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž”αžšαž·αž™αžΆαž€αžΆαžŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎ Android SDK αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž˜αžΆαž“αž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαž“αŸƒ Kotlin, Gradle, platform-tools, build-tools αŸ” αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αžšαž·αžαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎ Android Studio IDE αž“αŸ„αŸ‡αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ CI/CD αžšαžΆαž›αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž’αžΆαž…αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžšαžˆαžΊαž€αŸ’αž”αžΆαž›αŸ” αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αŸαž αž‘αŸ†αž–αŸαžš Docker αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž”αžšαž·αžŸαŸ’αžαžΆαž“ αž“αŸ„αŸ‡αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž˜αž·αž“αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Android αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαžΆ...

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αžŠαžΉαž„β€‹αžαžΆ Docker αž‚αžΊβ€‹αž‡αžΆβ€‹αž’αŸ’αžœαžΈβ€‹αž“αŸ„αŸ‡ αž”αžΎβ€‹αž“αž·αž™αžΆαž™β€‹αž²αŸ’αž™β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž‘αŸ… αžœαžΆβ€‹αž‡αžΆβ€‹αž§αž”αž€αžšαžŽαŸβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž‚αŸβ€‹αž αŸ…β€‹αžαžΆ DockerαŸ” β€œαž€αž»αž„αžαžΊαž“αŸαžšβ€ αžŠαŸ‚αž›αž˜αžΆαž“αžαžΊαžŽαŸ‚αž› OS αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αž αž“αž·αž„αžŸαŸ†αžŽαž»αŸ†αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αžΉαž„αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Dockerfile αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž‘αŸ…αž‡αžΆαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž’αžΆαž…αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„ αž“αž·αž„αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹ 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 αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž„αŸ’αž€αžΎαžαž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ

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

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš -t αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€ αž¬αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαŸ‚αž›αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„αž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αžΆαž“αž αŸ…αžœαžΆαžαžΆ android-build αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž€αŸ†αžŽαŸ‚ gradle, android-sdk αž“αž·αž„ platform-toolsαŸ” αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αžœαžΆαž“αžΉαž„αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαžΆαž˜αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎ "αž€αŸ†αžŽαŸ‚" αž“αŸαŸ‡αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž™αžΎαž„αž’αžΆαž…αž‘αžΆαž‰αž™αž€αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αžšαž»αž‰ docker αž‘αŸ…αž€αžΆαž“αŸ‹αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αžŸαžΆαž’αžΆαžšαžŽαŸˆ αž¬αž―αž€αž‡αž“ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αžœαžΆαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž…αžΌαžšαž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž‡αžΆαž˜αž½αž™αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ

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

αžαŸ„αŸ‡αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αžαžΆαžαžΎαžœαžΆαž˜αžΆαž“αž“αŸαž™αž™αŸ‰αžΆαž„αžŽαžΆαŸ–

αžšαžαŸ‹ docker - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž”αžΎαž€αžšαžΌαž”αž—αžΆαž–αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”
-αžšαŸ‰αžΆαž˜ β€” αž˜αžΆαž“β€‹αž“αŸαž™β€‹αžαžΆ αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž€αž»αž„αžαžΊαž“αŸαžšβ€‹αžˆαž”αŸ‹ αžœαžΆβ€‹αž›αž»αž”β€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž€αŸ’αž“αž»αž„β€‹αž’αŸ†αž‘αž»αž„β€‹αž–αŸαž›β€‹αž‡αžΈαžœαž·αžβ€‹αžšαž”αžŸαŸ‹β€‹αžœαžΆαŸ”
-v "$PWD":/home/gradle/ - αž—αŸ’αž‡αžΆαž”αŸ‹αžαžαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αž˜αŸ’αžšαŸ„αž„ Android αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžαž’αž»αž„αžαžΆαž„αž€αŸ’αž“αž»αž„ /home/gradle/
-w /home/gradle - αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αž‰αŸ’αž‡αžΈαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž€αž»αž„αžαžΊαž“αŸαžš
αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš Android αž”αž„αŸ’αž€αžΎαžαŸ– 5.4.1-28-27 - αžˆαŸ’αž˜αŸ„αŸ‡αž’αž»αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ‚αž›αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αŸ”
gradle assembleDebug - αž€αŸ’αžšαž»αž˜αž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’ αž“αŸ„αŸ‡αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž–αžΈαžšαž”αžΈαžœαž·αž“αžΆαž‘αžΈ/αž“αžΆαž‘αžΈ αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αž’αŸ’αžœαžΈαž˜αž½αž™αž“αŸ…αž›αžΎαž’αŸαž€αŸ’αžšαž„αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžŸαžΆαž„αžŸαž„αŸ‹αž”αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™αž€αŸ’αž“αž»αž„αž‘αŸ†αž αŸ† 8m 3s! αž αžΎαž™αžαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ/build/output/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/CD αžαžΆαž„αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžŠαŸ‚αž›αž’αŸ’αž“αž€αž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αž›αž½αž“αž―αž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αžΆαž“αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž–αž–αž€αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž αžΎαž™αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž–αŸ’αžšαž½αž™αž”αžΆαžšαž˜αŸ’αž—αž’αŸ†αž–αžΈαžœαžΆαž‘αŸ αž αžΎαž™αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸαž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž•αž„αžŠαŸ‚αžšαŸ”

αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αž‘αž„αŸ‹αž˜αžαž·αž“αŸαŸ‡αŸ” αž…αžΌαž›αžŸαžΌαž˜αŸ”

αžαžΎαž’αŸ’αž“αž€αžšαž€αŸ’αžŸαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI/CD αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸ‡ αž¬αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ?

  • αž™αžΎαž„αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαžΆαž„αž€αŸ’αž“αž»αž„

  • αž™αžΎαž„αž”αŸ’αžšαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαžΆαž„αž€αŸ’αžšαŸ…

  • αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎ CI/CD αž‘αŸαŸ”

  • αž•αŸ’αžŸαŸαž„αž‘αŸ€αž

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 42 αž“αžΆαž€αŸ‹αž”αžΆαž“αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αžαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ ៧៨ αž“αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹