ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Android, Π΄ΠΎΡΠΈ ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΈΡΡ, ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΡΠ½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΡΡ ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Android SDK Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Kotlin, Gradle, platform-tools, build-tools. Π Π°ΠΊΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ Π² ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΡΡΠ΅ΠΏΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Android Studio IDE, ΡΠΎΠ³Π°Π²Π° Π½Π° CI / CD ΡΡΡΠ²ΡΡΠ° Π²ΡΡΠΊΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π΅ Π² Π³Π»Π°Π²ΠΎΠ±ΠΎΠ»ΠΈΠ΅. Π Π°ΠΊΠΎ Π² ΡΠ΅Π± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Docker ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡ ΡΡΠ΅Π΄Π°ΡΠ°, ΡΠΎΠ³Π°Π²Π° Π·Π°ΡΠΎ Π½Π΅ ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π½Π΅Π³ΠΎ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Android ...
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Docker β Π°ΠΊΠΎ Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ΅Π½, ΡΠΎ ΡΠΎΠ²Π° Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ.Π½Π°Ρ. βΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈβ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΡΠ΄ΡΠΎ ββΠ½Π° ΠΠ‘ ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΠΌ, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ ΡΡΠ΅Π΄Π°ΡΠ°. ΠΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΈΠΌΠ° Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π² Dockerfile, ΠΊΠΎΠΉΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π° Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ ΠΈ ΠΈΠΌΠ° ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡ.
ΠΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅ Π½Π° Docker ΡΠ° ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΈΡ
# Π’.ΠΊ. ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ 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 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! Π Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° app/build/output/apk ΡΠ΅ ΠΈΠΌΠ° ΡΠ³Π»ΠΎΠ±Π΅Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π΄ΡΡΠ³ΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° gradle - Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ Ρ.Π½. ΠΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π΅, ΡΠ΅ Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Π΄ΡΡΠ³Π° ΠΌΠ°ΡΠΈΠ½Π°, Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΌΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ»Π°ΡΠ° ΡΡΠ΅Π΄Π°, Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π² Π½Π΅Π³ΠΎ.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ Π½Π΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π²ΡΡΠΊΠ° ΡΠ³Π»ΠΎΠ±ΠΊΠ° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΡ Π½ΡΠ»Π°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ, ΠΎΡ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π°, Π³Π°ΡΠ°Π½ΡΠΈΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΊΡΠ΄Π΅ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π°, ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΊΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΈ ΡΠΎΠ²Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ°ΡΠΎΠ²Π°, ΠΎΡΠ²Π΅Π½ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ βΡΡΡΠ΄Π΅Π½β ΡΡΠ°ΡΡ, ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΎΠ½ΡΠ°ΠΆΠ° ΠΏΡΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ.Π½Π°Ρ. "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