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

如何用GitLab CI的only关键字按标签后缀选择执行指定任务?

问题解决思路

核心问题分析

你当前的配置有两个关键错误,导致两个任务同时运行:

  1. only条件逻辑关系错误:only列表中的项是逻辑或关系,你同时写了tags和正则表达式条件,只要流水线是标签触发的(满足tags条件),不管标签是否匹配正则,任务都会执行。
  2. 正则表达式语法错误:^*-stage的写法不符合正则规范,*是量词不能单独放在开头,且没有限制匹配结尾,导致正则无法精准匹配以-stage/-prod结尾的标签。

修正后的配置

直接使用GitLab内置变量CI_COMMIT_TAG,调整only条件为变量表达式,确保只有标签匹配指定后缀时才执行任务:

deploy-on-staging:
  stage: deploy
  image: ubuntu:20.04
  before_script:
    - apt-get update
  script:
    - echo "It's here in stage"
    - echo "$CI_COMMIT_TAG"
  only:
    variables:
      - $CI_COMMIT_TAG =~ /.*-stage$/


deploy-on-prod:
  stage: deploy
  image: ubuntu:20.04
  script:
    - echo "It's here in prod"
  only:
    variables:
      - $CI_COMMIT_TAG =~ /.*-prod$/

关键说明

  • 去掉自定义的TagName变量,直接用内置的CI_COMMIT_TAG,避免额外变量引用的潜在问题。
  • 正则表达式/.*-stage$/的作用:
    • .*匹配任意长度的任意字符
    • -stage匹配固定后缀
    • $确保匹配字符串结尾,避免类似test-stage-1的标签误触发
  • only:variables中的条件默认是逻辑与,只有当CI_COMMIT_TAG存在(即标签流水线)且匹配正则时,任务才会执行。

额外验证建议

如果需要确认正则是否生效,可以在script中添加测试命令:

- if [[ $CI_COMMIT_TAG =~ .*-stage$ ]]; then echo "Tag matches staging pattern"; else echo "Tag does not match"; fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:35:34