You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab CI中配置两种不同触发规则的工作流?

GitLab CI 配置双触发规则流水线方案

要实现普通推送触发流水线和仅提交标题以-deploy结尾时触发流水线的需求,需修正原配置中的语法错误,并规避GitLab CI的workflow全局唯一性限制。以下是可行的配置方案:


方案一:给每个Job单独设置触发规则(推荐)

这种方式更灵活,避免全局配置冲突,确保符合条件的Job才会执行。

主配置文件 .gitlab-ci.yml

stages:
  - pre
  - build

include:
  - local: ci/a.gitlab-ci.yml
  - local: ci/b.gitlab-ci.yml

部署专用流水线 ci/a.gitlab-ci.yml

仅在提交标题以-deploy结尾时触发:

test-job1-deploy:
  stage: pre
  script:
    - echo "部署流水线执行pre阶段"
  tags:
    - x86
  rules:
    - if: '$CI_COMMIT_TITLE =~ /-deploy$/'

test-job2-deploy:
  stage: build
  script:
    - echo "部署流水线执行build阶段"
  tags:
    - x86
  rules:
    - if: '$CI_COMMIT_TITLE =~ /-deploy$/'

通用流水线 ci/b.gitlab-ci.yml

所有推送均触发(排除部署类提交):

test-job1-regular:
  stage: pre
  script:
    - echo "通用流水线执行pre阶段"
  tags:
    - x86
  rules:
    - if: '$CI_COMMIT_TITLE !~ /-deploy$/'

test-job2-regular:
  stage: build
  script:
    - echo "通用流水线执行build阶段"
  tags:
    - x86
  rules:
    - if: '$CI_COMMIT_TITLE !~ /-deploy$/'

方案二:通过全局Workflow控制文件引入

利用workflow定义全局变量,仅引入符合条件的流水线配置文件:

主配置文件 .gitlab-ci.yml

workflow:
  rules:
    # 标记部署类提交
    - if: '$CI_COMMIT_TITLE =~ /-deploy$/'
      variables:
        PIPELINE_TYPE: "deploy"
    # 标记普通提交
    - if: '$CI_COMMIT_TITLE !~ /-deploy$/'
      variables:
        PIPELINE_TYPE: "regular"

stages:
  - pre
  - build

# 仅在对应流水线类型下引入配置文件
include:
  - local: ci/a.gitlab-ci.yml
    rules:
      - if: '$PIPELINE_TYPE == "deploy"'
  - local: ci/b.gitlab-ci.yml
    rules:
      - if: '$PIPELINE_TYPE == "regular"'

部署专用流水线 ci/a.gitlab-ci.yml

无需额外规则,仅在被引入时执行:

test-job1:
  stage: pre
  script:
    - echo "部署流水线执行pre阶段"
  tags:
    - x86

test-job2:
  stage: build
  script:
    - echo "部署流水线执行build阶段"
  tags:
    - x86

通用流水线 ci/b.gitlab-ci.yml

无需额外规则,仅在被引入时执行:

test-job1:
  stage: pre
  script:
    - echo "通用流水线执行pre阶段"
  tags:
    - x86

test-job2:
  stage: build
  script:
    - echo "通用流水线执行build阶段"
  tags:
    - x86

关键修正说明

  1. 正则匹配语法:原配置中用==匹配正则是错误的,GitLab CI中需用:
    • =~:表示正则匹配(判断字符串符合正则规则)
    • !~:表示正则不匹配(判断字符串不符合正则规则)
  2. 避免Workflow冲突:GitLab CI中全局workflow只能定义一份,多文件定义会导致覆盖失效,因此推荐方案一的Job级规则配置,或方案二的条件引入方式。
  3. Job名称唯一性:方案一中需为两个流水线的Job设置不同名称(如test-job1-deploy和test-job1-regular),防止重名覆盖配置。

内容的提问来源于stack exchange,提问作者Gian Alessio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:25:24