我想在计划的上下文中运行一个或多个作业,因此使用特定的规则像这样声明它。 问题是管道既不会由我的调度配置触发,也不会在我通过调度管道UI手动触发时触发。我只是根本看不到任何触发的预定管道。
Gitlab版本:12.9.2
gitlab-ci.yml(部分):
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
non-scheduled-job:
...
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
scheduled-job:
...
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: always
- if: '$CI_PIPELINE_SOURCE != "schedule"'
when: never
我知道不需要调度作业的第二条规则,但是即使没有此规则,管道也无法正常运行。
答案 0 :(得分:1)
不幸的是,至于工作流逻辑,Gitlab 非常细枝末节。 如果您使用 Workflow 部分和 Rules 条件来处理您的工作,您必须明确声明“计划”类型的工作流部分中的管道以在您的配置中启用它:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
...
或者您可以在配置中启用所有类型的管道,只需在 workflow:rules
末尾添加workflow:
rules:
...
- when: always
以其他方式,use 可以使用 except/only 符号表示计划作业,它会起作用,但前提是您的工作流程条件满足:
only:
- schedules
如果您使用 include 选项,此方法可能会出现 merging conflicts。 因为合并允许您扩展和覆盖字典映射,但您不能向包含的数组添加或修改项目。因此,您必须在最后包含的 YAML 中明确声明所有先前添加的 workflow:rules 数组项或使用 anchors。
有关详细信息,请参阅 issue。
答案 1 :(得分:0)
您可以使用only
。
例如
scheduled-job:
only:
- schedules
https://docs.gitlab.com/ee/ci/pipelines/schedules.html
但是,当在其他作业中重用该代码段时,
不要与only
/ except
一起使用规则。