GitLab CI本地include配置失效,流水线无限加载且任务未完全生成
GitLab CI本地include配置失效,流水线无限加载且任务未完全生成
我太懂你这种挫败感了——GitLab CI流水线卡在无限加载,而且预期的任务还没全出来,折腾半天肯定头大。咱们来对着你的配置一步步找问题:
核心问题:Include规则的条件写错了
你看你在引入main-pipeline.yml的时候,用了这个条件:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
这个问题可不小!只有在合并请求(MR)事件触发的流水线里,CI_MERGE_REQUEST_TARGET_BRANCH_NAME这个变量才会存在,而直接提交到main分支的常规流水线里,这个变量根本就没有。这就导致main分支的流水线永远加载不到main-pipeline.yml,自然也就不会生成build:main-pipeline-dynamic_script任务。
更糟的是,这种不符合逻辑的include规则,可能会让GitLab CI的流水线解析器陷入困惑,直接引发无限加载的问题。
解决方案:修正Include的规则条件
把main-pipeline.yml的include规则改成针对分支的判断,这样main分支的常规流水线就能正确加载它了。修改后的.gitlab-ci.yml核心部分如下:
image: ruby:2.3 # Global rules on all pipelines workflow: rules: # Mask and prevent builds on noci commit SHA's - if: $CI_COMMIT_TITLE =~ /^noci/ when: never # Specific pipelines with specific rules include: - local: main-pipeline.yml rules: # 修正:判断当前分支是否为默认分支(main) - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - local: merge-request-pipeline.yml rules: # Merge requests going in will build - if: $CI_PIPELINE_SOURCE == "merge_request_event" # Catch all pipeline that will just build everything that we want all the time # NB: This will obviously only be included if we pass the global workflow check - local: shared-pipeline.yml
为什么这样改能解决问题?
- 对于MR流水线:
CI_PIPELINE_SOURCE == "merge_request_event"条件成立,会加载merge-request-pipeline.yml,同时无条件加载shared-pipeline.yml,正好生成你预期的4个任务; - 对于main分支流水线:
CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH条件成立,会加载main-pipeline.yml,加上shared-pipeline.yml,也能生成你要的4个任务; - 修正后的规则逻辑清晰,GitLab CI解析流水线时不会再出现困惑,无限加载的问题也会随之消失。
额外建议
你的GitLab版本是14.3.3,属于比较老的版本了,虽然主要问题是配置错误,但如果修正后还有小问题,可以考虑升级到14.3系列的最新小版本(比如14.3.6),修复一些已知的CI解析bug。
备注:内容来源于stack exchange,提问作者Luke Hill
相关产品推荐
相关产品推荐

