Как сделать собственный образ докера для Gitlab CI
Я имею 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]
Должен ли я опубликовать свой образ докера на док-станции или мы можем сделать это другим способом? Спасибо за вашу помощь.
0 ответов
Просто прошел через это, потому что казалось, глупо загружать 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.