ಡಾಕರ್ ಕಂಟೈನರ್‌ನಲ್ಲಿ ಆಂಡ್ರಾಯ್ಡ್ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದು

ಆಂಡ್ರಾಯ್ಡ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಾಗಿ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವಾಗ, ಚಿಕ್ಕದಾದರೂ ಸಹ, ಬೇಗ ಅಥವಾ ನಂತರ ನೀವು ಅಭಿವೃದ್ಧಿ ಪರಿಸರವನ್ನು ಎದುರಿಸಬೇಕಾಗುತ್ತದೆ. Android SDK ಜೊತೆಗೆ, ಕೋಟ್ಲಿನ್, ಗ್ರೇಡಲ್, ಪ್ಲಾಟ್‌ಫಾರ್ಮ್-ಟೂಲ್‌ಗಳು, ಬಿಲ್ಡ್-ಟೂಲ್‌ಗಳ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿರುವುದು ಅವಶ್ಯಕ. ಮತ್ತು ಡೆವಲಪರ್‌ನ ಯಂತ್ರದಲ್ಲಿ ಈ ಎಲ್ಲಾ ಅವಲಂಬನೆಗಳನ್ನು Android ಸ್ಟುಡಿಯೋ IDE ಬಳಸಿಕೊಂಡು ಹೆಚ್ಚಿನ ಪ್ರಮಾಣದಲ್ಲಿ ಪರಿಹರಿಸಿದರೆ, ನಂತರ CI/CD ಸರ್ವರ್‌ನಲ್ಲಿ ಪ್ರತಿ ನವೀಕರಣವು ತಲೆನೋವಾಗಿ ಪರಿಣಮಿಸಬಹುದು. ಮತ್ತು ವೆಬ್ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಡಾಕರ್ ಪರಿಸರ ಸಮಸ್ಯೆಗೆ ಪ್ರಮಾಣಿತ ಪರಿಹಾರವಾಗಿ ಮಾರ್ಪಟ್ಟಿದ್ದರೆ, ಅದನ್ನು ಬಳಸಿಕೊಂಡು ಆಂಡ್ರಾಯ್ಡ್ ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಇದೇ ರೀತಿಯ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ಏಕೆ ಪ್ರಯತ್ನಿಸಬಾರದು ...

ಡಾಕರ್ ಎಂದರೇನು ಎಂದು ತಿಳಿದಿಲ್ಲದವರಿಗೆ, ಸರಳವಾಗಿ ಹೇಳುವುದಾದರೆ, ಇದು ಕರೆಯಲ್ಪಡುವದನ್ನು ರಚಿಸುವ ಸಾಧನವಾಗಿದೆ. ಪರಿಸರವನ್ನು ಸಂರಕ್ಷಿಸುವಾಗ ನಾವು ಎಲ್ಲಿ ಬೇಕಾದರೂ ನಿಯೋಜಿಸಬಹುದಾದ ಕನಿಷ್ಠ OS ಕರ್ನಲ್ ಮತ್ತು ಅಗತ್ಯವಿರುವ ಸಾಫ್ಟ್‌ವೇರ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುವ “ಕಂಟೇನರ್‌ಗಳು”. ನಮ್ಮ ಕಂಟೇನರ್‌ನಲ್ಲಿ ನಿಖರವಾಗಿ ಏನಿದೆ ಎಂಬುದನ್ನು ಡಾಕರ್‌ಫೈಲ್‌ನಲ್ಲಿ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ನಂತರ ಅದನ್ನು ಎಲ್ಲಿಯಾದರೂ ಪ್ರಾರಂಭಿಸಬಹುದಾದ ಮತ್ತು ಐಡೆಂಪೊಟೆನ್ಸಿ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುವ ಚಿತ್ರಕ್ಕೆ ಜೋಡಿಸಲಾಗುತ್ತದೆ.

ಡಾಕರ್‌ನ ಅನುಸ್ಥಾಪನಾ ಪ್ರಕ್ರಿಯೆ ಮತ್ತು ಮೂಲಭೂತ ಅಂಶಗಳನ್ನು ಅವನಲ್ಲಿ ಸಂಪೂರ್ಣವಾಗಿ ವಿವರಿಸಲಾಗಿದೆ ಅಧಿಕೃತ ವೆಬ್ಸೈಟ್. ಆದ್ದರಿಂದ, ಸ್ವಲ್ಪ ಮುಂದೆ ನೋಡಿದಾಗ, ಇದು ನಾವು ಕೊನೆಗೊಂಡ ಡಾಕರ್‌ಫೈಲ್ ಆಗಿದೆ:

# Т.к. основным инструментом для сборки 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 ಮತ್ತು ಪ್ಲಾಟ್‌ಫಾರ್ಮ್-ಟೂಲ್‌ಗಳ ಆವೃತ್ತಿಗಳ ಗುಂಪನ್ನು ಸೂಚಿಸಿದ್ದೇವೆ. ಭವಿಷ್ಯದಲ್ಲಿ, ಈ "ಆವೃತ್ತಿ" ಅನ್ನು ಬಳಸಿಕೊಂಡು ಹೆಸರಿನ ಮೂಲಕ ನಮಗೆ ಅಗತ್ಯವಿರುವ ಚಿತ್ರವನ್ನು ಹುಡುಕಲು ನಮಗೆ ಸುಲಭವಾಗುತ್ತದೆ.

ಅಸೆಂಬ್ಲಿ ಪೂರ್ಣಗೊಂಡ ನಂತರ, ನಾವು ನಮ್ಮ ಚಿತ್ರವನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಬಳಸಬಹುದು, ನಾವು ಅದನ್ನು ಆಜ್ಞೆಯೊಂದಿಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು ಡಾಕರ್ ಪುಶ್ ಇತರ ಯಂತ್ರಗಳಿಗೆ ಅದನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾರ್ವಜನಿಕ ಅಥವಾ ಖಾಸಗಿ ಇಮೇಜ್ ರೆಪೊಸಿಟರಿಗೆ.

ಉದಾಹರಣೆಗೆ, ಸ್ಥಳೀಯವಾಗಿ ಯೋಜನೆಯನ್ನು ನಿರ್ಮಿಸೋಣ. ಇದನ್ನು ಮಾಡಲು, ಯೋಜನೆಯೊಂದಿಗೆ ಫೋಲ್ಡರ್ನಲ್ಲಿ, ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸಿ

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 - ನಾವು ಸಂಗ್ರಹಿಸಿದ ನಮ್ಮ ಪಾತ್ರೆಯ ಹೆಸರು
ಗ್ರೇಡಲ್ ಅಸೆಂಬಲ್ ಡಿಬಗ್ - ನಮ್ಮ ಯೋಜನೆಯನ್ನು ಜೋಡಿಸುವ ನಿಜವಾದ ಅಸೆಂಬ್ಲಿ ತಂಡ

ಎಲ್ಲವೂ ಸರಿಯಾಗಿ ನಡೆದರೆ, ಒಂದೆರಡು ಸೆಕೆಂಡುಗಳಲ್ಲಿ/ನಿಮಿಷಗಳಲ್ಲಿ ನಿಮ್ಮ ಪರದೆಯ ಮೇಲೆ ನೀವು ಏನನ್ನಾದರೂ ನೋಡುತ್ತೀರಿ 8 ಮೀ 3 ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ ಯಶಸ್ವಿಯಾಗಿ ನಿರ್ಮಿಸಿ! ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್/ಬಿಲ್ಡ್/ಔಟ್‌ಪುಟ್/ಎಪಿಕೆ ಫೋಲ್ಡರ್ ಜೋಡಿಸಲಾದ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ.

ನೀವು ಇತರ ಗ್ರ್ಯಾಡ್ಲ್ ಕಾರ್ಯಗಳನ್ನು ಇದೇ ರೀತಿಯಲ್ಲಿ ನಿರ್ವಹಿಸಬಹುದು - ಯೋಜನೆಯನ್ನು ಪರಿಶೀಲಿಸಿ, ಪರೀಕ್ಷೆಗಳನ್ನು ಚಲಾಯಿಸಿ, ಇತ್ಯಾದಿ. ಮುಖ್ಯ ಪ್ರಯೋಜನವೆಂದರೆ ನಾವು ಯಾವುದೇ ಇತರ ಯಂತ್ರದಲ್ಲಿ ಯೋಜನೆಯನ್ನು ನಿರ್ಮಿಸಬೇಕಾದರೆ, ಸಂಪೂರ್ಣ ಪರಿಸರವನ್ನು ಸ್ಥಾಪಿಸುವ ಬಗ್ಗೆ ನಾವು ಚಿಂತಿಸಬೇಕಾಗಿಲ್ಲ ಮತ್ತು ಅಗತ್ಯವಾದ ಚಿತ್ರವನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಅದರಲ್ಲಿ ಬಿಲ್ಡ್ ಅನ್ನು ರನ್ ಮಾಡಲು ಸಾಕು.

ಕಂಟೇನರ್ ಯಾವುದೇ ಬದಲಾವಣೆಗಳನ್ನು ಸಂಗ್ರಹಿಸುವುದಿಲ್ಲ, ಮತ್ತು ಪ್ರತಿ ಅಸೆಂಬ್ಲಿಯನ್ನು ಮೊದಲಿನಿಂದ ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತದೆ, ಇದು ಒಂದು ಕಡೆ, ಅಸೆಂಬ್ಲಿಯನ್ನು ಎಲ್ಲಿ ಪ್ರಾರಂಭಿಸಿದರೂ ಅದರ ಗುರುತನ್ನು ಖಾತರಿಪಡಿಸುತ್ತದೆ, ಮತ್ತೊಂದೆಡೆ, ಪ್ರತಿ ಬಾರಿ ನೀವು ಎಲ್ಲಾ ಅವಲಂಬನೆಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಾ ಕೋಡ್ ಅನ್ನು ಮತ್ತೆ ಕಂಪೈಲ್ ಮಾಡಿ, ಮತ್ತು ಇದು ಕೆಲವೊಮ್ಮೆ ಗಮನಾರ್ಹ ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ಆದ್ದರಿಂದ, ಸಾಮಾನ್ಯ "ಶೀತ" ಪ್ರಾರಂಭದ ಜೊತೆಗೆ, ಕರೆಯಲ್ಪಡುವದನ್ನು ಉಳಿಸುವಾಗ ನಾವು ನಿರ್ಮಾಣವನ್ನು ಪ್ರಾರಂಭಿಸುವ ಆಯ್ಕೆಯನ್ನು ಹೊಂದಿದ್ದೇವೆ. "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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ