You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Gerrit Trigger插件代码拉取失败求助

Jenkins Gerrit Trigger插件拉取Gerrit代码失败问题排查

问题现象

已完成Gerrit Trigger插件配置,Jenkins任务可被Gerrit事件成功触发,但Git插件拉取代码时失败,控制台报错如下:

git fetch --tags --force --progress -- ssh://jenkins_user@:/software/ refs/heads/master # timeout=10
ERROR: Checkout failed
java.lang.NullPointerException
at com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser$GetGerritEventRevision.invoke(GerritTriggerBuildChooser.java:222)
at com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser$GetGerritEventRevision.invoke(GerritTriggerBuildChooser.java:213)
at hudson.plugins.git.GitSCM$BuildChooserContextImpl.actOnBuild(GitSCM.java:1066)
at com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser.getCandidateRevisions(GerritTriggerBuildChooser.java:109)
at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:1148)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1306)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:129)
at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:159)
at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:70)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:312)
at hudson.model.ResourceController.execute(ResourceController.java:101)
at hudson.model.Executor.run(Executor.java:442)
ERROR: Maximum checkout retry attempts reached, aborting
Finished: FAILURE

已完成的排查操作

  • 可在Jenkins主节点本地拉取目标仓库(不含Gerrit变更),凭证有效
  • 将Git插件的「选择策略」改为「默认」,手动覆盖refspec和分支(不使用Gerrit变量),拉取成功
  • 尝试修改refspec为refs/changes/:refs/changes/*(提示“Specification is invalid.”)、构建分支为*$GERRIT_REFSPEC等多种组合,均无效
  • Gerrit Trigger、Git及Git Client插件已更新至最新版本
  • 修改任务的「Name」字段,匹配其他未使用Gerrit Trigger的正常任务,问题依旧
  • 调整仓库URL为$GERRIT_SCHEME://jenkins_user@$GERRIT_HOST:$GERRIT_PORT/$GERRIT_PROJECT,未解决问题

当前环境版本

  • Jenkins:2.401.1
  • Git插件:5.2.0
  • Gerrit Trigger插件:2.39.1
  • Git Client插件:4.5.0

解决思路建议

  1. 检查Gerrit事件变量传递完整性
    报错中的NullPointerException说明Gerrit Trigger传递给Git插件的事件数据存在缺失。进入Jenkins任务的「构建触发器」配置,确认「Gerrit Trigger」的「Advanced」选项中是否勾选了对应事件类型,同时检查Gerrit服务器配置是否正确传递GERRIT_REFSPEC、GERRIT_PROJECT等核心变量。

  2. 修正Refspec格式
    有效的Gerrit变更refspec格式应为refs/changes/*:refs/changes/*,之前的配置缺少通配符导致格式无效。配置Git插件时设置该Refspec,同时将分支指定为$GERRIT_BRANCH,构建选择策略保持为Gerrit Trigger默认选择器。

  3. 验证Gerrit权限与SSH配置
    确认Gerrit服务器中jenkins_user账号拥有对应项目的「Read」权限,且Jenkins凭证中的私钥与Gerrit账号公钥匹配。同时检查Gerrit服务器是否允许Jenkins节点的IP访问。

  4. 降级Git插件版本
    最新版Git插件(5.2.0)可能与Gerrit Trigger插件(2.39.1)存在兼容性问题,尝试将Git插件降级至5.0.0或更低版本,同时保持Git Client插件版本匹配,验证是否解决空指针问题。

  5. 开启Gerrit Trigger DEBUG日志
    在Jenkins的「Manage Jenkins」→「System Log」中开启Gerrit Trigger的DEBUG日志,查看触发构建时是否有事件数据丢失的报错,定位变量传递失败的具体原因。


内容的提问来源于stack exchange,提问作者cberk1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:34:58