Gitlab CI 通过 API 使用工作流规则触发管道

Gitlab CI Trigger pipeline by API with workflow rules

我的主要管道中有以下工作流程规则:

   workflow:
      rules:
        - if: '$CI_MERGE_REQUEST_IID == null'
          when: never
        - if: '$CI_MERGE_REQUEST_TITLE =~ /Draft:/'
          when: never
        - if: '$CI_MERGE_REQUEST_TITLE =~ /WIP:/'
          when: never
        - if: '$CI_PIPELINE_TRIGGERED =~ "true"'
          when: always
        - when: always

问题是当我尝试使用以下 curl 请求触发它时,它告诉我管道已被工作流规则过滤掉,我无法弄清楚出了什么问题。

这是我尝试使用的 curl 请求:

curl --verbose -X POST -F token=$TRIGGER_TOKEN -F ref=BRANCH_NAME https://gitlab_url/api/v4/projects/357/trigger/pipeline"

问题似乎与 Gitlab 如何评估规则有关。引用自 https://docs.gitlab.com/ee/ci/jobs/job_control.html#specify-when-jobs-run-with-rules
规则会按顺序进行评估,直到出现第一个匹配项。找到匹配项后,该作业将包含在管道中或从管道中排除,具体取决于配置

例如,在您的情况下,第一个评估的规则是

- if: '$CI_MERGE_REQUEST_IID == null'
  when: never

如果合并请求iid为null,gitlab将不会评估其他规则。 并停止执行

如果规则不匹配,那么它将按照相同的原则依次评估下一条规则