【问题标题】:Gitlab schedule jobs with `rules` are not running and can't be triggered带有“规则”的 Gitlab 计划作业未运行且无法触发
【发布时间】:2020-11-02 15:19:46
【问题描述】:

我想在预定的上下文中运行一个或多个作业,因此使用特定规则来声明它。 问题是管道既不会由我的计划配置触发,也不会在我通过调度管道 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

我知道调度作业的第二条规则是不需要的,但即使没有这条规则,管道也无法正常运行。

【问题讨论】:

标签: gitlab gitlab-ci


【解决方案1】:

不幸的是,对于 Workflows 的逻辑,Gitlab 非常棘手。 如果您为您的工作使用 Workflow 部分和 Rules 条件,您必须明确声明“计划”类型的工作流部分中的管道以在您的配置中启用它:

workflow:                                                 
    rules:
      - if: '$CI_PIPELINE_SOURCE == "schedule"'
      ...

或者您可以在配置中启用所有类型的管道,只需在 workflow:rules

末尾添加
workflow:                                                 
  rules:
    ...
    - when: always

在其他方式中,使用except/only 表示计划的作业,它会起作用,但前提是您的工作流程条件满足:

only:
  - schedules

如果您使用 include 选项,此方法可能会出现 merging conflicts。 因为合并允许您扩展和覆盖字典映射,但您不能将项目添加或修改到包含的数组。因此,您显然必须在最后包含的 YAML 中声明所有先前添加的 workflow:rules 数组项或使用anchors

详情请见issue

【讨论】:

    【解决方案2】:

    您可以使用only

    例如

    scheduled-job:
      only:
        - schedules
    

    https://docs.gitlab.com/ee/ci/pipelines/schedules.html

    但是,当在其他工作中重用 sn-p 时, 不要将规则与only / except 一起使用。

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多