VM 重启后 Jenkins slave 无法执行

Jenkins slave fails to execute after VM reboot

我有一个完美运行的 AWS VM,我复制了它以便为舞台和生产提供相似的环境。
我停止了 VM 来创建快照,但是现在,当我启动一个带有 jenkins slave 的构建时,我得到了这个错误:

Building remotely on <nodename> in workspace /home/ubuntu/workspace/<workspaceName>
Installing JDK 
java.io.IOException: Unable to find JDK with ID=
    at hudson.tools.JDKInstaller.locate(JDKInstaller.java:422)
    at hudson.tools.JDKInstaller.performInstallation(JDKInstaller.java:134)
    at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:68)
    at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:107)
    at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:205)
    at hudson.model.JDK.forNode(JDK.java:130)
    at hudson.model.AbstractProject.getEnvironment(AbstractProject.java:355)
    at hudson.model.Run.getEnvironment(Run.java:2228)
    at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:932)
    at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:828)
    at hudson.scm.SCM.checkout(SCM.java:484)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1274)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
    at hudson.model.Run.execute(Run.java:1738)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:381)
Finished: FAILURE

或者,我有时会得到这种精度
(介于 "Installing JDK""java.io.IOException: Unable to find JDK with ID=" 之间)

FATAL: Failed to get Environment Vars from build
java.lang.RuntimeException: Failed to get Environment Vars from build
    at jenkins.plugins.publish_over.BPPlugin.getEnvironmentVariables(BPPlugin.java:84)
    at jenkins.plugins.publish_over.BPPlugin.perform(BPPlugin.java:93)
    at jenkins.plugins.publish_over_ssh.BapSshPreBuildWrapper.setUp(BapSshPreBuildWrapper.java:64)
    at hudson.model.Build$BuildExecution.doRun(Build.java:154)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:536)
    at hudson.model.Run.execute(Run.java:1738)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:381)

我没有注意到是什么原因导致出现这些额外的线条,因为我尝试了我想到的所有方法,包括

JDK 当然已经在这里了。重新启动之前一切正常。 所以我的第一个问题是 "Why does it try to install a JDK ?"

我不知道它试图获取的 "Environment Vars",并且我不知道 VM 配置有任何变化,所以我完全没有想法。

看起来问题是 "just" 配置的 JDK 设置值从 Jenkins 中消失了。

我完全不知道为什么会这样,因为没有人会修改此设置,而且它位于需要首先打开的子菜单中,以防止操作错误。

无论如何,这是我修复它的方法。就像在 Jenkins 中设置 JAVA_HOME 值一样简单:


• 转到管理 Jenkins -> 配置系统
• 点击 "Installations JDK"
• 取消勾选"install automatically"(我的环境已经设置好了,我只需要重新设置变量)
• 设置 JAVA_HOME(在我的例子中,/usr/lib/jvm/java-7-openjdk-amd64),并且可以选择将您的安装命名为

编辑:由于其他一些构建继续失败,我不得不在我的一台旧服务器上创建一个符号链接,该服务器 java 安装在 /usr/bin/java
mkdir -p /usr/lib/jvm/java-7-openjdk-amd64/bin/
ln -s /usr/bin/java /usr/lib/jvm/java-7-openjdk-amd64/bin/java
我还在 Jenkin 的 conf 中添加了一个具有相同 /usr/lib/jvm/java-7-openjdk-amd64 值的 JAVA_HOME 环境变量。可能是多余的


我们的 Jenkins 版本是 1.609.3(签入 /var/lib/jenkins/config.xml),
如果您遇到同样的问题,请发表评论,因为我真的怀疑这个错误是由用户造成的。

我们遇到了类似的问题,但注意到系统没有安装合适的 jdk 版本。在 Jenkins 上,它看起来像是在 $JENKINS_HOME/tools/hudson.model.JDK 中安装了 jdk(在我们的例子中是 /var/lib/jenkins/tools/hudson.model.JDK/jdk8).

我们按照上述步骤进行了更新,效果非常好。

  • 转到管理 Jenkins -> 配置系统
  • 点击 "Installations JDK"
  • 取消勾选"install automatically"(我的环境已经搭建好,只需要重新设置变量即可)
  • 设置 JAVA_HOME (在我的例子中, /var/lib/jenkins/tools/hudson.model.JDK/jdk8 ),并且可以选择将您的安装命名为