Skip to main content

Docker-образы в CI

Образы для запуска джоб

Чтобы использовать Docker-образ на раннерах, укажите корректный путь до него. Например:

Фрагмент .gitlab-ci.yml:

stages:
- test

test: # название job
image: acr.polygon.t-technologies.ru/spirit/cicd-images/ubuntu:latest # образ
stage: test
script:
...

Build

Как работают pull и push в нашем Container Registry

Чтобы авторизоваться в Container Registry, добавьте CI/CD-переменную (например, SPIRIT_DOCKER_SA_KEY) c ключом сервисного аккаунта Spirit. Пример для Kaniko:

  1. Откройте файл .gitlab-ci.yml.

  2. Пропишите поле before-script по примерам ниже.

    Пример авторизации и сборки образа для Kaniko:

      ...
    build: # для примера
    stage: build # для примера
    image: acr.polygon.t-technologies.ru/spirit/cicd-images/base-kaniko:latest
    variables:
    IMAGE_REF: acr.polygon.t-technologies.ru/<my_tenant>/<my_docker_image> # образ, который будет собран и запушен в Container Registry
    IMAGE_TAG: $CI_COMMIT_SHA # тег образа
    before_script:
    - dp auth service-acc --key-file $SPIRIT_DOCKER_SA_KEY # в CI/CD-переменной должен лежать ключ сервис-аккаунта
    - dp auth configure-kaniko # настройка docker config для kaniko (токен действует 1 час)
    script:
    - executor --dockerfile Dockerfile # собираем образ
    --destination "${IMAGE_REF}:${IMAGE_TAG}"
    --log-timestamp --cache -v info
    - echo "pushed to ${IMAGE_REF}:${IMAGE_TAG}"
    ...

Проверить, есть ли Docker-образ в репозитории

Вы не можете пушить Docker-образ, если он уже есть в репозитории. Теги (кроме «latest», «stable») иммутабельны, поэтому у вас упадёт pipeline.

Используйте команду, чтобы проверить, есть ли образ в репозитории:

dp docker search --tenant=<tenant> --image=<image name> --tag=<tag name>

## Примеры:
# код завершения 0 - образ есть
dp docker search --tenant devplatform --image=container-registry --tag=latest
{...}

# код завершения 3 - образа нет
dp docker search --tenant devplatform --image=container-registry --tag=unknown
Not found

Пример использования в CI:

build:
stage: build
before_script:
- dp auth service-acc --key-file $DEVPLATFORM_DOCKER_SA_KEY
- dp auth configure-kaniko
- |
exit_code=0
dp docker search \
--tenant="$CI_PROJECT_NAMESPACE" \
--image="$SERVICE_NAME" \
--tag="$IMAGE_TAG" || exit_code=$?
if [ $exit_code -eq 0 ]; then echo "Image ${IMAGE_REF}:${IMAGE_TAG} already exists" && exit 0; fi
if [ $exit_code -ne 3 ]; then echo "Unexpected exit code for dp docker search $exit_code" && exit 1; fi

Как посмотреть Docker-образы через docker search