17

我们最近将 Jenkins 升级到了最新版本。

从那以后,我每次尝试启动它时都无法通过命令行通过 Java WebStart 启动从属服务器,我得到“无法启动应用程序”错误

在详细信息面板中

CouldNotLoadArgumentException[ Could not load file/URL specified: http://MyServer:8080/computer/Slave1/slave-agent.jnlp]
    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)

当尝试浏览到 Jenkins 站点并从那里开始午餐时,它可以正常工作,但是如果你重新启动该框,那么启动时的命令行将无法完成这项工作。

这是我试图从奴隶运行的命令

cd "C:\Program Files (x86)\Java\jre7\bin"
javaws http://MyServer:8080/computer/Slave1/slave-agent.jnlp

问题是这曾经奏效。我也尝试过更新到最新版本的 Java 但没有运气,

任何想法任何人?

4

4 回答 4

17

据推测,大部分是由于 Jenkins 论坛上的帖子,这种新行为是由于对安全问题的修复:https ://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2013- 01-04

似乎出现了两种解决方案:

  1. 下载 JNLP 文件(通过浏览器、wget、curl 等)然后在本地运行 - 可能需要额外的参数。
  2. 转到管理 Jenkins -> 配置全局安全性,然后在基于项目的矩阵授权策略下,为用户“匿名”启用“从属”部分中的“连接”。这会让你在有人模仿奴隶的地方受到攻击(但在我的情况下,在私人工作网络上 - 这不是问题。)
于 2013-01-11T14:35:01.493 回答
9

如果您想将 JNLP 文件保留在主服务器上,并且不想打开匿名用户作为从属用户连接的安全漏洞,请编辑 jenkins-slave.xml 文件以添加 -jnlpCredentials 选项以及 - jnlpUrl 选项:

-jnlpCredentials {user}:{apiKey}

其中:
user 是 Jenkins 帐户数据库中的用户名
apiKey 是用户的 API 密钥(注意这不是用户的密码)

要获取用户的 API 密钥,请进入:

http://SERVER/user/USER/configure

并单击按钮以显示该用户的 API 密钥。

于 2014-04-29T20:29:02.487 回答
1

对我来说,我必须确保在 jenkins 矩阵权限中设置了“匿名”连接,并且我必须破解从 master 发送的 JNLP 文件。

我会说这是 2.19.2 中 Jenkins 的错误。基本上,在从服务器拉下的 JNLP 文件中,包含主设备 ip 和端口的隧道参数仅被从设备 ip-addr 替换。

请参阅 engine.java 的代码,[line #308],这是引发异常的地方:

https://searchcode.com/codesearch/view/65603521/

异常看起来像: 在此处输入图像描述

最初我的 JNLP 文件看起来像:

<jnlp codebase="http://jenkins-master-ip-addr:8080/computer/Node1/" spec="1.0+">
<information>
    <title>Agent for Node1</title>
    <vendor>Jenkins project</vendor>
    <homepage href="https://jenkins-ci.org/"/>
</information>
<security>
    <all-permissions/>
</security>
<resources>
    <j2se version="1.7+"/>
    <jar href="http://jenkins-master-ip-addr:8080/jnlpJars/remoting.jar"/>
    <property name="hudson.showWindowsServiceInstallLink" value="true"/>
</resources>
<application-desc main-class="hudson.remoting.jnlp.Main">

    <argument>b16fdf4388d98e4be6910218cfb5a9b5fa999bcd8dec90264e525171a3b02fce</argument>
    <argument>Node1</argument>

    <argument>-tunnel</argument>
    <argument>jenkins-slave-ip-addr</argument>

    <argument>-url</argument>
    <argument>http://jenkins-master-ip-addr:8080/</argument>

</application-desc>

问题是上面的“-tunnel”参数。它仅包含 SLAVE 机器的 ip-addr。将其更改为 MASTER 机器的 ip-add AND PORT,修复它!以下:

    <argument>-tunnel</argument>
    <argument>jenkins-master-ip-addr:9080</argument>
于 2017-08-25T13:38:43.537 回答
0

检查命令行中的名称Slave1和jenkins节点定义是否相同。jenkins节点中的名称也应该是Slave1

于 2015-09-23T11:45:49.810 回答