我正在寻找一种解决方案来执行 CI/CD 作业master
,tags
但同时我想检查是否Dockerfile
存在,这需要使用rules
我想达到什么
我只想为特定的标记符号构建 Docker 映像,master
并且tags
不受限制。我曾经能够通过only
gitlab-ci.yml
only:
- master
- tags
然而不幸的是,only
我不得不放弃对“Dockerfile”的检查,所以我切换到rules
.
有问题rules
但是,问题rules
在于,到目前为止,在这里找到解决方案的唯一方法是使用正则表达式。这极大地限制了标签的约定。
在我的例子中
0-9.0-9.0-9
其他符号将被禁止,1.0.0.1 或 1.0.0-alpha,必须为每个项目单独定义和实施。
有没有更优雅的处理方式?
Build Images:
stage: Build
<<: *docker
<<: *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"
正常工作