如何在Windows服务器上安装Jenkins的slave-agent.jnlp文件时解决错误

46次阅读
没有评论

问题描述

想要在运行在Red Hat Enterprise Linux 7.x上的Jenkins(版本2.89.2)的主节点上,将Windows Server 2016作为从节点。他尝试从Windows服务器的Jenkins Web界面安装slave-agent.jnlp文件。他在以管理员身份打开的PowerShell中运行以下命令:

javaws -verbose C:\Users\Administrator\Downloads\slave-agent.jnlp

然后他收到以下错误:

Error: The field <jnlp><application-desc><argument> has an invalid value:Launch File<jnlp codebase="http://FQDNofJenkinsServer:8080/computer/FQDNofWindowsSlave/" spec="1.0+"><information><title>Agent for FQDNofWindowsSlave</title><vendor>Jenkins project</vendor><homepage href="https://jenkins-ci.org/"/></information><security><all-permissions/></security><resources><j2se version="1.8+"/><jar href="http://FQDNofJenkinsServer:8080/jnlpJars/remoting.jar"/></resources><application-desc main-class="hudson.remoting.jnlp.Main"><argument>32ba31ca5f150c2b3491802b0b60e56574d970a9e601cebad656a113fe325a85</argument><argument>FQDNofWindowsSlave</argument><argument>-workDir</argument><argument/><argument>-internalDir</argument><argument/><argument>-url</argument><argument>http://FQDNofJenkinsServer:8080/</argument></application-desc></jnlp>ExceptionBadFieldException[ The field <jnlp><application-desc><argument> has an invalid value: ,]    at com.sun.javaws.jnl.XMLFormat$10.visitElement(Unknown Source)    at com.sun.javaws.jnl.XMLUtils.visitElements(Unknown Source)    at com.sun.javaws.jnl.XMLFormat.buildApplicationDesc(Unknown Source)    at com.sun.javaws.jnl.XMLFormat.process(Unknown Source)    at com.sun.javaws.jnl.XMLFormat.parse(Unknown Source)    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)    at com.sun.javaws.Main.launchApp(Unknown Source)    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)    at com.sun.javaws.Main.access$000(Unknown Source)    at com.sun.javaws.Main$1.run(Unknown Source)    at java.lang.Thread.run(Unknown Source)

用户期望命令能够正常工作,但是他不理解错误信息。他应该怎么办?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你的错误信息中有两个空参数:

<application-desc main-class="hudson.remoting.jnlp.Main">
  <argument>32ba31ca5f150c2b3491802b0b60e56574d970a9e601cebad656a113fe325a85</argument>
  <argument>FQDNofWindowsSlave</argument>
  <argument>-workDir</argument>
  <argument/>
  <argument>-internalDir</argument>
  <argument/>
  <argument>-url</argument>
  <argument>http://FQDNofJenkinsServer:8080/</argument>
</application-desc>

你的错误信息中有一个逗号:

BadFieldException[ The field  has an  invalid value: ,]

在互联网上的其他错误信息中,也有逗号分隔的错误参数列表:

BadFieldException[ The field codebase has an invalid value:  $$codebase,$$codebase]

所以我猜测这两个空参数是问题所在。

方案2

Jenkins提供了agent.jar和一个用于从节点连接到主节点的密钥。确保节点正确配置(Manage Jenkins → Manage Nodes → Node)。
确保Windows节点上存在Java 1.8。在Windows机器上下载agent.jar文件,并使用Windows命令提示符运行Jenkins提供的命令。

java -jar agent.jar -jnlpUrl http://localhost:8080/computer/example/slave-agent.jnlp -secret e6073ce49423ed54df4a24f918973f50dc760dd440013d3b30403c4a2c7501fd -workDir "c:\jenkins"

以上是两种解决方案,你可以根据自己的情况选择其中一种来解决问题。

正文完