GitLab CI配置问题:仅在MR、关联分支及master推送时构建
问题分析与修正方案
在GitLab 10.8.1这个旧版本中,你的.gitlab-ci.yml配置存在几个关键问题,直接导致了合并请求页面的CI连接错误,具体问题和修正方案如下:
1. 合并请求触发规则错误
你使用的/merge-requests/正则完全不符合GitLab 10.x版本的CI触发逻辑。这个版本中,合并请求的流水线触发需要使用**merge_requests关键字**,而不是匹配网页URL的正则。你的正则会匹配不到任何分支或触发场景,导致MR页面无法找到对应的CI流水线,进而出现"无法连接CI服务器"的错误。
2. except: branches规则冲突
except: branches会排除所有分支的推送触发,这直接和你"向master分支推送代码触发构建"的需求矛盾——master本身就是分支,这条规则会完全阻止master分支的推送触发CI。同时,当你向已开启MR的分支推送代码时,这条规则也会排除该分支的推送触发,无法满足你的第二个需求。
3. 多余的triggers规则
你配置的triggers是用于手动触发或外部系统触发CI的规则,而你的需求里并没有涉及这个场景,属于多余配置,建议移除。
满足你需求的正确配置
针对你的三个触发场景,正确的.gitlab-ci.yml配置应该是:
job: only: - merge_requests - master
为什么这个配置能满足所有需求?
- 合并请求(MR)场景:
merge_requests关键字会触发MR创建时的CI流水线。 - 向已开启MR的分支推送代码:在GitLab 10.8.1中,当某个分支已经关联了MR,向该分支推送新代码时,GitLab会自动将这次推送关联到对应的MR流水线,
merge_requests规则会覆盖这个场景。 - 向master分支推送代码:直接通过
master分支名匹配,触发CI流水线。
内容的提问来源于stack exchange,提问作者zinovyev
相关产品推荐
相关产品推荐

