在Jenkins上通过Java Web Start启动从属代理时出现问题

时间:2013-01-11 11:44:28

标签: java jenkins java-web-start

我们最近将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网站并从那里进行午餐时,IT WORKS然后如果你重新启动该框,则启动时的命令行无法完成工作。

这是我试图从奴隶

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

问题是这曾经起作用了。 我也尝试更新到最新版本的Java,但没有运气,

任何想法?

4 个答案:

答案 0 :(得分:16)

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

似乎有两种解决方案:

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

答案 1 :(得分:9)

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

-jnlpCredentials {user}:{apiKey}

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

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

http://SERVER/user/USER/configure

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

答案 2 :(得分:1)

对我来说,我必须确保我有#34;匿名"连接设置在jenkins矩阵权限和我不得不破解从主发送的JNLP文件。

我想说这是詹金斯在2.19.2中的错误。基本上,在从服务器下拉的JNLP文件中,包含主IP和端口的隧道参数仅被替换为slave ip-addr。

请参阅engine.java的代码,[line#308],它是抛出异常的地方:

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

异常看起来像: enter image description here

最初我的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>

问题是&#34; -tunnel&#34; arg上面。它仅包含SLAVE机器的ip-addr。将此更改为MASTER机器的ip-add AND PORT,修复它!下面:

    <argument>-tunnel</argument>
    <argument>jenkins-master-ip-addr:9080</argument>

答案 3 :(得分:0)

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