У меня 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
Но каждый раз, когда у нас есть фиксация
, это задание загружает SDK
и т. Д. Как я могу захватить этот контейнер с помощью этого SDK
? Должен ли я делать коммит
для контейнера докеров?
docker commit -m "Что вы сделали с образом" -a "Имя автора" 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"]
Build
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" .
Тег и push
docker тег image_name YOUR_DOCKER_REPO/YOUR_DOCKER_IMAGE:recent
регистрационный номер докера docker.io
docker push YOUR_DOCKER_REPO/YOUR_DOCKER_IMAGE:recent
Тогда вы бы использовали это изображение вместо openjdk8. Это работает. Это довольно просто и бреет около 6 минут моего трубопровода. Вам все еще нужно запустить chmod +x ./gradlew
в вашем до_script
. Теоретически, вы можете убедиться, что gradlew исполняется в git'е. Но это может быть не очень надежно, когда над ним работают люди (вообще) и особенно при использовании Windows.