在从属执行程序的maven安装(或更新)期间偶尔会出现Jenkins构建失败

时间:2012-02-28 20:33:38

标签: apache maven ant proxy jenkins

我正在使用主/多从设置在Jenkins中运行一些maven构建。这些构建主要运行正常,但是我不时地在执行的slave的控制台输出中得到这个莫名其妙的错误,并且构建就死了:

FATAL: Failed to parse /var/lib/jenkins/updates/hudson.tasks.Maven.MavenInstaller into JSON
hudson.util.IOException2: Failed to parse /var/lib/jenkins/updates/hudson.tasks.Maven.MavenInstaller into JSON
    at hudson.model.DownloadService$Downloadable.getData(DownloadService.java:216)
    at hudson.tools.DownloadFromUrlInstaller$DescriptorImpl.getInstallables(DownloadFromUrlInstaller.java:149)
    at hudson.tools.DownloadFromUrlInstaller.getInstallable(DownloadFromUrlInstaller.java:54)
    at hudson.tools.DownloadFromUrlInstaller.performInstallation(DownloadFromUrlInstaller.java:63)
    at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:61)
    at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:107)
    at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:150)
    at hudson.tasks.Maven$MavenInstallation.forNode(Maven.java:515)
    at hudson.tasks.Maven.perform(Maven.java:238)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
    at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:700)
    at hudson.model.Build$RunnerImpl.build(Build.java:178)
    at hudson.model.Build$RunnerImpl.doRun(Build.java:139)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:470)
    at hudson.model.Run.run(Run.java:1409)
    at hudson.matrix.MatrixRun.run(MatrixRun.java:146)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:238)
Caused by: net.sf.json.JSONException: A JSONObject text must begin with '{' at character 0 of 
    at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:512)
    at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:843)
    at net.sf.json.JSONObject._fromString(JSONObject.java:1064)
    at net.sf.json.JSONObject.fromObject(JSONObject.java:176)
    at net.sf.json.JSONObject.fromObject(JSONObject.java:147)
    at hudson.model.DownloadService$Downloadable.getData(DownloadService.java:213)
    ... 17 more

从属实例的主目录是/ home / jenkins,而不是/ var / lib / jenkins,它可以解释错误,但没有(我发现的任何东西,无论如何)都解释了为什么jenkins会尝试访问错误的主目录。

还有其他人遇到过这个问题吗?有关调试方式的建议吗?

[更新20120312]

此问题的直接原因是jenkins master上$ JENKINS_HOME / updates /目录中的空文件。在这种特殊情况下,主节点正在尝试解析$ JENKINS_HOME / updates / hudson.tasks.Maven.MavenInstaller并将数据发送到从属节点,以便它可以更新其maven安装。如果我手动使用我拥有的另一个jenkins安装的数据填充该文件,那么所有进程都可以正常运行。但是,由于每日(?)更新过程,文件将被另一个空文件替换,因此问题仍然存在。

这会影响所有自安装的工具(ant,java等),并且会产生很少的副作用,例如jenkins配置下的版本字段 - > maven - >从apache安装是一个文本字段而不是下拉列表。

那么,问题就变成为什么这些文件被下载为空?我找不到任何关于它们从哪里下载的参考,所以我无法直接调试链接。即使我可以,它似乎是从一个Jenkins安装工作,而不是从另一个安装。那里有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题解决了! jenkins安装面向一个apache代理,它的工作就像一个魅力......差不多。需要进行一些小调整才能使其达到无错误状态。我不得不改变:

ProxyPass         /jenkins/  http://localhost:8080/
ProxyPassReverse  /jenkins/  http://localhost:8080/

要:

ProxyPass         /jenkins/  http://localhost:8080/jenkins/
ProxyPassReverse  /jenkins/  http://localhost:8080/jenkins/

我不得不补充道:

JENKINS_ARGS="--prefix=/jenkins"

/ etc / sysconfig / jenkins 。在调整之后,一切正常。

作为旁注,让我了解代理配置的事情是,每次ajax调用都要进行两次(一次是'/ ...',一次是'/ jenkins / ......')。至少,每一个都成功了。一旦我进行了配置更改,ajax调用就是每次调用一次,性能也会提高。

这种错误配置会产生一些奇怪的副作用,所以希望这篇文章可以帮助其他人。