GitLab CI作业规则配置:特定标签推送且目录变更时运行
解决方法
你的需求是让「推送指定标签」和「src目录有变更」两个条件同时生效,正确的配置需要调整表达式写法并优化路径匹配,具体如下:
修正后的CI配置
semver_tag: stage: semver_tag image: mkver:1.0 script: - TAG=$(git mkver next) - echo "Next tag is $TAG..." - git mkver tag rules: - if: '$CI_COMMIT_TAG == "staging" || $CI_COMMIT_TAG == "production"' changes: - src/**/* # 匹配src目录下所有文件(含子目录),若只需直接文件则保留src/* when: always - when: never
关键说明
- 表达式加单引号:把
if条件用单引号包裹,避免YAML解析时误处理||符号,保证标签判断逻辑准确。 - 路径匹配优化:
src/*仅能匹配src目录下的直接文件,若有子文件夹,改用src/**/*才能覆盖所有层级的文件变更。 - 逻辑与关系:GitLab CI规则条目里的
if和changes默认是同时满足的逻辑,因此只有当推送的是staging/production标签,且src目录存在变更时,才会触发该作业。
如果需要强制和特定分支(比如main)对比变更,可在changes中添加compare_to参数(需GitLab 13.9及以上版本支持):
changes: - src/**/* compare_to: main
内容的提问来源于stack exchange,提问作者jonnybinthemix
相关产品推荐
相关产品推荐

