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

2022-09-03 01:00:57

我们最近将 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,但没有运气,

任何想法有人吗?


答案 1

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

似乎有两种解决方案正在出现:

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

答案 2

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

-jnlpCredentials {user}:{apiKey}

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

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

http://SERVER/user/USER/configure

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


推荐