GitLab CI配置workflow规则后流水线未执行问题排查
GitLab CI Workflow Rules 不触发流水线的问题分析
问题描述
您好,我的英语不太流利,以下是我的问题:我编写了一个简单的GitLab CI流水线,用于测试带rules的workflow关键字,配置如下:
image: docker:rc-dind stages: - build-socle workflow: rules: - changes: - "!/README.md" when: always build-socle: stage: build-socle script: - echo "Lancement de la construction de l'image socle"我理解该流水线应在除README.md外的任意文件修改时触发,但修改项目中的myscript.sh文件后,流水线并未启动,请问可能的原因是什么?
问题原因及解决方案
1. Changes规则的否定语法错误
GitLab CI的changes规则中,否定路径的正确写法是- !"README.md",而非将感叹号包含在引号内的"!/README.md"。后者会被识别为一个名为!/README.md的具体文件路径,而非排除README.md的规则,导致没有任何变更能匹配该条件,流水线自然不会启动。
2. Workflow规则逻辑不完整
原规则仅定义了单一匹配条件,但该条件无法匹配任何实际文件变更。需要调整规则逻辑,先匹配所有文件变更,再排除README.md,或者直接使用否定路径:
修正后的配置方案一(推荐)
image: docker:rc-dind stages: - build-socle workflow: rules: - changes: - "**/*" except: - "README.md" when: always build-socle: stage: build-socle script: - echo "Lancement de la construction de l'image socle"
修正后的配置方案二
image: docker:rc-dind stages: - build-socle workflow: rules: - if: '$CI_COMMIT_BRANCH' changes: - !"README.md" when: always build-socle: stage: build-socle script: - echo "Lancement de la construction de l'image socle"
3. 额外检查点
- 确认
myscript.sh已被提交到Git仓库,未被添加到.gitignore文件中。 - 检查GitLab项目的CI/CD设置是否启用了流水线触发功能。
内容的提问来源于stack exchange,提问作者Nicolas VIOLLIN
相关产品推荐
相关产品推荐

