Gitlab-CI – Сборка и публикация Docker-образа при создании тега

Данный .gitlab-ci.yml конфиг нацелен на автоматическую сборку и публикацию Docker-образа в Docker Hub только при пуше тега, соответствующего версии (например, 1.2.3).

workflow:
  rules:
    - if: '$CI_COMMIT_TAG =~ /\d+\.\d+\.\d+/'
      when: always
    - when: never

stages:
  - build_and_push

variables:
  IMAGE_NAME: $DOCKERHUB_USERNAME/myapp

build_and_push:
  stage: build_and_push
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $IMAGE_NAME:$CI_COMMIT_TAG .
    - docker tag $IMAGE_NAME:$CI_COMMIT_TAG $IMAGE_NAME:latest
    - echo "$DOCKERHUB_PASSWORD" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
    - docker push $IMAGE_NAME:$CI_COMMIT_TAG
    - docker push $IMAGE_NAME:latest

Что делает пайплайн:

Условие запуска (rules):
Пайплайн срабатывает только если имя тега ($CI_COMMIT_TAG) соответствует шаблону x.y.z (например, 1.0.0). Все остальные коммиты игнорируются.
Стадия build_and_push:
Используется образ docker:latest и сервис docker:dind для запуска Docker внутри пайплайна.
Выполняется сборка образа с тегом x.y.z и дополнительной меткой latest.
Производится логин в Docker Hub с использованием переменных DOCKERHUB_USERNAME и DOCKERHUB_PASSWORD.
Образ пушится в Docker Hub по двум тегам: с номером версии и latest.
Переменные:
IMAGE_NAME формируется как $DOCKERHUB_USERNAME/myapp.
Примечания:
Убедись, что переменные DOCKERHUB_USERNAME и DOCKERHUB_PASSWORD заданы в настройках CI/CD проекта.

Прокрутить вверх