#yaml #cicd #gitlab-ci.yml
Вопрос:
я ищу решение для выполнения задания CI/CD только для master
и tags
, но в то же время я хотел бы проверить, Dockerfile
существует ли, что требует использования rules
Чего я хочу достичь
Я хотел бы создавать изображения Docker только для master
и tags
без ограничений для конкретной записи тегов. Раньше я мог добиться чего-то подобного с помощью only
gitlab-ci.yml
only: - master - tags
К сожалению, однако, с only
этим мне пришлось бы отказаться от своего чека на «Док-файл», поэтому я переключился на rules
.
Проблема с rules
Однако проблема в rules
том, что до сих пор единственным способом найти решение здесь является использование регулярных выражений. Это значительно ограничивает конвенцию в отношении тегов.
В моем примере 0-9.0-9.0-9
Будут запрещены другие обозначения, 1.0.0.1 или 1.0.0-альфа, которые должны быть определены и реализованы отдельно для каждого проекта.
Неужели нет возможности справиться с этим более элегантно?
Build Images: stage: Build lt;lt;: *docker lt;lt;: *registry rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_TAG =~ "/[0-9].[0-9].[0-9]/g" - if: $CI_COMMIT_BRANCH exists: - Dockerfile script: - | if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then tag="latest" echo "Running on default branch '$CI_DEFAULT_BRANCH'" else tag="$CI_COMMIT_TAG" echo "Running on branch 'tag/$CI_COMMIT_TAG'" fi - docker build --pull -t "$CI_REGISTRY_IMAGE/testing:${tag}" . - docker push "$CI_REGISTRY_IMAGE/testing:${tag}"
Редактировать:
Это if: $CI_COMMIT_TAG =~ "/[0-9].[0-9].[0-9]/g"
не работает должным образом