在 Gitlab CI 中将“only/ except”子句转换为“rules”子句

Str*_*ter 12 gitlab-ci

问题总结:

我的目标是添加一个rules子句来配置 Gitlab CI 作业,以便在设置环境变量或执行手动操作时运行。不幸的是,该步骤当前使用了onlyandexcept子句,因此我还必须将它们转换为rules语法,而我尚未完全掌握语法。

目前的职位定义:

deploy:
  only:
    - branches
  except:
    refs:
      - /flux-.*$/  
      - master
  stage: deploy
  when: manual
Run Code Online (Sandbox Code Playgroud)

所需更改:

我将更换

when: manual
Run Code Online (Sandbox Code Playgroud)

rules:
  - if: '$CI_ENVIRONMENT_NAME'
  - when: manual
Run Code Online (Sandbox Code Playgroud)

现在我想学习如何翻译这些only/except条款。我认为它将完全基于预定义的环境变量测试,尽管我不确定哪些变量对此翻译感兴趣。

非常感谢您的任何建议或指示。

jph*_*ynh 9

正如您所指出的,使用预定义的环境变量是使用rules. 其中许多可以用来实现同样的事情,这实际上取决于您的需求(例如:$CI_COMMIT_REF_NAMEvs $CI_COMMIT_REF_SLUGvs $CI_COMMIT_BRANCH)。

我的目标是添加一个规则子句,以配置 Gitlab CI 作业在设置环境变量或执行手动操作时运行。

只是为了确保理解您的意思:

  • 如果$CI_ENVIRONMENT_NAME则始终运行部署作业,否则如果分支不是且不 master匹配/flux-.*$/,则允许deploy手动触发作业。

那是对的吗?

如果是,一种实现如下所示。(如果需要,您还可以使用||运算符合并前 2 条规则)

deploy:
  stage: deploy
  rules:
    - if: '$CI_COMMIT_REF_NAME == "master"'
      when: never
    - if: '$CI_COMMIT_REF_NAME =~ /flux-.*$/'
      when: never
    - if: '$CI_ENVIRONMENT_NAME'
    - when: manual
Run Code Online (Sandbox Code Playgroud)

请记住,它们rules是按顺序评估的。希望有帮助。