为何仅Git标签触发的GitLab CI Job会同时运行两个任务
问题根因
sync_s3:nonprod任务未显式排除标签推送事件。GitLab CI的规则默认对分支推送、标签推送等所有默认触发事件生效,你仅为生产任务配置了标签推送的匹配条件,但未限制非生产任务的触发事件类型,只要推送标签时满足非生产任务的changes规则,就会触发该任务。- 标签推送场景下的
changes判定逻辑:推送标签时,GitLab会对比当前标签对应提交与上一个同类型标签的提交差异,只要pp2目录在差异范围内,sync_s3:nonprod的changes规则就会命中,进而触发任务。
解决方案
在sync_s3:nonprod的规则中新增标签推送事件的排除规则即可,修改后的配置如下:
sync_s3:nonprod: stage: sync:nonprod rules: # 新增规则:标签推送场景下直接跳过该任务 - if: $CI_COMMIT_TAG when: never - changes: - pp2/* extends: .sync_s3 variables: AWS_ENV: nonprod FOLDER_ENV: pp2/ tags: - gaming_nonprod
如果需要更严谨的限定,也可以直接显式指定非生产任务仅在分支推送场景下生效:
sync_s3:nonprod: stage: sync:nonprod rules: # 仅当为分支推送且pp2目录有变更时触发 - if: $CI_COMMIT_BRANCH changes: - pp2/* extends: .sync_s3 variables: AWS_ENV: nonprod FOLDER_ENV: pp2/ tags: - gaming_nonprod
两种方案都可以实现只有sync_s3:prod任务在推送符合条件的标签时触发的预期。
内容的提问来源于stack exchange,提问作者Amir Damirov
相关产品推荐
相关产品推荐

