у меня есть CI
на Gitlab
для создания моего приложения для Android. Это пример моего .gitlab-ci.yml
:
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "28"
ANDROID_BUILD_TOOLS: "28.0.2"
ANDROID_SDK_TOOLS: "4333796"
before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/tools/bin/sdkmanager --licenses
- set -o pipefail
stages:
- build
- test
lintDebug:
stage: build
script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
debugTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug
Но каждый раз у нас commit
, эта работа загружается SDK
и т. д. Как я могу захватить этот контейнер с помощью этого SDK
? Должен ли я сделать commit
для контейнера докеров? docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
Мой бегун /etc/gitlab-runner/config.toml
:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "MYAPP-CI-ANDROID"
url = "https://gitlab.com/"
token = "vNcmGuDwWwz9ZwwFOz-z"
executor = "docker"
[runners.docker]
tls_verify = false
image = "openjdk:8-jdk"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
Должен ли я публиковать свой образ докера в докере или мы можем сделать это другим способом? Спасибо за вашу помощь.
Просто прошел через это, потому что загружать SDK каждый раз казалось глупым. Для этого довольно просто создать собственный образ докера.
FROM openjdk:8-jdk
ARG ANDROID_COMPILE_SDK="29"
ARG ANDROID_BUILD_TOOLS="29.0.1"
ARG ANDROID_SDK_TOOLS="4333796"
# Update and Install some packages
RUN apt-get --quiet update --yes && \
apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
# Install Android SDK
RUN wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip && \
unzip -d android-sdk-linux android-sdk.zip
RUN echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null && \
echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null && \
echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
ENV ANDROID_HOME=$PWD/android-sdk-linux
#RUN chmod +x ./gradlew
RUN yes | android-sdk-linux/tools/bin/sdkmanager --licenses
CMD ["jshell"]
Построить
docker build -t image_name \
--build-arg ANDROID_COMPILE_SDK="29" \
--build-arg ANDROID_BUILD_TOOLS="29.0.1" \
--build-arg ANDROID_SDK_TOOLS="4333796" .
Отметьте и нажмите
docker tag image_name YOUR_DOCKER_REPO/YOUR_DOCKER_IMAGE:latest
docker login docker.io
docker push YOUR_DOCKER_REPO/YOUR_DOCKER_IMAGE:latest
Тогда вы бы использовали это изображение вместо openjdk8. Оно работает. Это довольно просто и сокращает мой конвейер примерно на 6 минут. Тебе все еще нужно бежать chmod +x ./gradlew
в твоем before_script
. Теоретически вы можете убедиться, что gradlew исполняется в git. Но это может быть не очень надежным, когда над ним работают (вообще) люди, особенно при использовании Windows.