GitLab CI配置疑问:指定路径提交触发任务的rules与only设置
GitLab CI 路径触发任务的规则配置问题解答
我的需求是仅当代码提交到指定路径时运行任务,查了GitLab关于rules的官方文档但理解不深,遇到了配置问题:
无效的rules配置
test: stage: test script: - some commands rules: - changes: - limited/path/* - when: always stages: - test
有效的only配置
test: stage: test script: - some commands only: changes: - limited/path/* stages: - test
疑问解答
1. 是否因为rules配置中缺少- if: $CI_COMMIT_BRANCH导致第一个脚本失效?
不是。问题的根本原因是你的rules里两条规则是独立判断的:第一条检查路径变更,第二条直接设置when: always——这意味着不管第一条是否满足,第二条都会生效,任务永远会运行,直接覆盖了路径检查的逻辑,所以达不到预期效果。
2. 是否需要移除rules中的when: always?
必须移除,或者调整规则结构把条件和when放在同一条规则里。正确的rules配置写法如下:
test: stage: test script: - some commands rules: - changes: - limited/path/* # when: on_success # 这行可选,默认就是on_success - when: never # 不满足路径变更时,直接跳过任务 stages: - test
这样配置后,只有当limited/path/*下的文件有变更时,任务才会触发;否则任务不会运行,和only配置的效果一致。
3. 能否认为only是rules的子概念?
不能。only/except和rules是GitLab CI中控制任务执行的两套不同语法:
only/except是旧版的简洁语法,逻辑是"包含/排除",只要满足其中一个条件就会触发任务rules是新版功能更丰富的语法,按顺序逐条判断规则,匹配到第一条满足的规则后就停止判断,还能支持动态设置任务的变量、标签等属性。rules可以完全覆盖only/except的功能,但两者的判断逻辑有明显差异,不存在子概念的关系。
内容的提问来源于stack exchange,提问作者Lunartist
相关产品推荐
相关产品推荐

