Как создать собственный образ докера для 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

Но каждый раз, когда у нас есть фиксация , это задание загружает 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]

Должен ли я публиковать свой образ докера в докере или мы можем сделать это другим способом? Спасибо за вашу помощь.

1
задан 18 February 2019 в 14:42
1 ответ

Просто проходили через это, потому что каждый раз выглядело глупо загружать 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"]
  1. 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" .
    
  2. Тег и 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.

.
1
ответ дан 3 December 2019 в 23:07

Теги

Похожие вопросы