0

我正在寻找一种解决方案来执行 CI/CD 作业mastertags但同时我想检查是否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"正常工作

4

0 回答 0