ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° Android, Π΄ΠΎΡΠΈ ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΈΡΡ, ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΡΠ½ΠΎ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ²Π°ΡΠ΅ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ°ΡΠ° ΡΡΠ΅Π΄Π°. ΠΡΠ²Π΅Π½ Android SDK Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Kotlin, Gradle, platform-tools ΠΈ build-tools. Π Π°ΠΊΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ΅Π·ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΠ½ΠΎ ΡΡΠ΅Π· Android Studio IDE, ΡΠΎ Π½Π° CI/CD ΡΡΡΠ²ΡΡΠ° Π²ΡΡΠΊΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π΅ Π² Π³ΠΎΠ»ΠΎΠ²ΠΎΠ±ΠΎΠ»ΠΈΠ΅. Π Π°ΠΊΠΎ Π·Π° ΡΠ΅Π± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΠΊΠΎΠ»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π° ΡΡΠ°Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡ Ρ Docker, Π·Π°ΡΠΎ Π΄Π° Π½Π΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ΡΠΈΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ Π² Android ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°...
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Docker β Π² Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠΈΡ Π²ΠΈΠ΄, ΡΠΎΠ²Π° Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ.Π½. βΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈβ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΡΠ΄ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³ΡΡΡΠ°ΠΌΠ΅ ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅, Π·Π°ΠΏΠ°Π·Π²Π°ΠΉΠΊΠΈ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠΊΠΎΠ»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°. ΠΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π² 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 push Π² ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠ΅Π½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠΌ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΎ. ΠΠ° ΡΠ΅Π»ΡΠ° Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°.
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebugΠΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΡ:
docker run β ΡΠ°ΠΌΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π°.
-rm β ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ»Π΅Π΄ ΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠΉ ΠΈΠ·ΡΡΠΈΠ²Π° Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΆΠΈΠ²ΠΎΡΠ° ΠΌΡ.
-v "$PWD":/home/gradle/ β ΠΌΠΎΠ½ΡΠΈΡΠ° ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° Ρ Π½Π°ΡΠΈΡ Android ΠΏΡΠΎΠ΅ΠΊΡ Π²ΡΠ² Π²ΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° /home/gradle/
-w /home/gradle β Π·Π°Π΄Π°Π²Π° ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
android-build:5.4.1-28-27 β ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ
ΠΌΠ΅.
gradle assembleDebug β Π΅ΠΊΠΈΠΏΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ±ΠΈΡΠ° Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π²ΡΡΠ²ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ/ΠΌΠΈΠ½ΡΡΡ Π½Π° Π΅ΠΊΡΠ°Π½Π° Π²ΠΈ ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ BUILD SUCCESSFUL in 8m 3s! Π ΠΏΠ°ΠΏΠΊΠ°ΡΠ° app/build/output/apk ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ±ΡΠ°Π½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΈ Π΄ΡΡΠ³ΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° gradle β ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ Ρ.Π½. ΠΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π΅, ΡΠ΅ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Π΄ΡΡΠ³Π° ΠΌΠ°ΡΠΈΠ½Π°, Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΌΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»Π°ΡΠ° ΡΡΠ΅Π΄Π°, Π° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΎΠ±ΡΠ°Π· ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ Π½Π΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π²ΡΡΠΊΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΡ Π½ΡΠ»Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΌΡΡΡΠΎΡΠΎ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, Π° ΠΎΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π»ΠΈΡ ΠΊΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²ΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ½Π΅ΠΌΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ°ΡΠΎΠ²Π°, ΠΎΡΠ²Π΅Π½ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ βΡΡΡΠ΄Π΅Π½β ΡΡΠ°ΡΡ, ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΠΏΡΠΈΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Ρ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ.Π½. βΠΊΠ΅Ρβ, ΠΊΡΠ΄Π΅ΡΠΎ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ~/ .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 ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
