GitLab CI如何配置仅根目录文件变更时触发指定任务
GitLab CI 仅根目录文件变更时运行任务配置方案
原配置失效的核心原因是./**/*通配符会匹配项目内所有层级的全部文件,包含根目录下的文件,因此只要合并请求存在任意文件变更,第一条when: never的规则就会命中,直接禁用任务,永远不会触发第二条匹配根目录变更的规则。
修正后的配置如下:
root_changes: stage: pre_build image: alpine:latest tags: ... variables: GIT_STRATEGY: none script: date rules: # 只要存在子目录下的文件变更,就不运行当前任务 - if: '$CI_MERGE_REQUEST_ID' changes: - '*/*' when: never # 仅存在根目录文件变更时运行当前任务 - if: '$CI_MERGE_REQUEST_ID' changes: - '*' when: always
匹配逻辑说明
*/*匹配所有路径中至少包含一级子目录的文件,也就是所有不在根目录的变更文件,只要命中就跳过当前任务*仅匹配根目录下的所有文件,子目录文件不会被该规则命中
效果验证
- 仅修改根目录下的file1、file2:第一条规则无匹配,走到第二条规则命中,任务正常运行
- 同时修改根目录文件和子目录文件:第一条规则命中子目录变更,任务直接禁用
- 仅修改子目录文件:第一条规则命中,任务禁用,这类变更会触发原有适配子目录的流水线任务,不会影响正常的流水线校验
内容的提问来源于stack exchange,提问作者Matej
相关产品推荐
相关产品推荐

