Данный .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 проекта.