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

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

从那时起,每当我尝试启动它时,我都无法通过命令行通过Java WebStart启动从属设备我得到“无法启动应用程序”错误

在详细信息面板中使用此function

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,但没有运气,

任何想法有人吗?

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

两种解决方案似乎即将出现:

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

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

 -jnlpCredentials {user}:{apiKey} 

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

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

 http://SERVER/user/USER/configure 

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

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

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

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

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

例外情况如下: 在此处输入图像描述

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

   Agent for Node1 Jenkins project            b16fdf4388d98e4be6910218cfb5a9b5fa999bcd8dec90264e525171a3b02fce Node1 -tunnel jenkins-slave-ip-addr -url http://jenkins-master-ip-addr:8080/  

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

  -tunnel jenkins-master-ip-addr:9080 

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