GitLab CI/CD配置问题:合并请求触发流水线无响应
哦,这个问题我熟!你遇到的问题根源在于重复使用了only关键字——GitLab CI的配置里,如果同一个job下出现多个相同的顶级关键字(比如这里的两个only),后面的会直接覆盖前面的配置。
你原本想表达的是“只有当合并请求涉及json/*文件变更时才运行这个job”,但第二个only: [merge_requests]完全覆盖了第一个带changes条件的only块,导致原来的文件变更检查失效,而且单纯的merge_requests触发逻辑没有结合你需要的变更条件,所以流水线没启动。
解决方法很简单,把两个条件合并到同一个only块里就行,这样两个条件会同时生效:
test: stage: test image: darrylb/jsonlint script: - for jsonfile in json/*.json; do jsonlint "$jsonfile"; done; only: - merge_requests changes: - json/*
如果想更清晰地控制触发逻辑,也可以用GitLab推荐的rules关键字替代only,可读性更强:
test: stage: test image: darrylb/jsonlint script: - for jsonfile in json/*.json; do jsonlint "$jsonfile"; done; rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: - json/* when: always
这样配置后,只有当触发源是合并请求,并且json/*目录下的文件有变更时,这个test job才会被触发运行。
你也可以快速检查下项目的CI/CD设置,确保“合并请求流水线”是开启状态(路径:项目设置 → CI/CD → 流水线 → 合并请求流水线),不过默认情况下这个选项是启用的,大概率还是配置重复覆盖的问题。
内容的提问来源于stack exchange,提问作者beli3ver
相关产品推荐
相关产品推荐

