尝试使用-secret选项通过JNLP命令行启动Jenkins slave时获取401 Unauthorized错误

时间:2017-12-29 21:23:23

标签: jenkins cmd jnlp jenkins-slave

我试图通过命令行通过JNLP启动我的Jenkins slave,以便我可以将命令放在任务调度程序中。但是,只有当我使用-secret选项和Jenkins生成的密钥时,我才面临身份验证问题。如果我使用与Jenkins相同的用户名密码传递-auth选项,则工作正常。

java -jar slave.jar -jnlpUrl http://<jenkins host>:<port>/jenkins/computer/<Slave name>/slave-agent.jnlp -secret <secret_key> -workDir "C:\Jenkins\Robot"

注意:我尝试执行的命令是从Jenkins页面复制的。

它出现以下错误:

 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDirINFO: Using C:\Jenkins\Robot\remoting as a remoting work directory Both error and output logs will be printed to C:\Jenkins\Robot\remoting Not use http_proxy property or environment variable which is invalid: unknown protocol: one.proxy.att.com Failing to obtain http://<host:port>/jenkins/computer/<job>/slave-agent.jnlp?encrypt=true
 java.io.IOException: Failed to load http://<host:port>/jenkins/computer/<job>//slave-agent.jnlp?encrypt=true: 401 Unauthorized
         at hudson.remoting.Launcher.parseJnlpArguments(Launcher.java:485)
         at hudson.remoting.Launcher.run(Launcher.java:316)
         at hudson.remoting.Launcher.main(Launcher.java:277)
 Waiting 10 seconds before retry

但是,如果我按如下方式更改命令,则会成功运行。

java -jar slave.jar -jnlpUrl http://<jenkins host>:<port>/jenkins/computer/<Slave name>/slave-agent.jnlp/slave-agent.jnlp -auth <user>:<pass> -workDir "C:\Jenkins\Robot"

我无法将我的凭据保留在启动文件中,因为它将保留在公共共享存储库中。请帮忙。

2 个答案:

答案 0 :(得分:0)

我认为您的问题可能来自安全管理。 您是否在全局安全性中为JNLP代理启用了TCP端口?

转到Manage Jenkins>全局安全性,Enable TCP port for JNLP agents,选择Fixed并填充您在jnlpUrl中使用的端口,然后选择Java Web Start Agent Protocol/4并保存配置。

其他文档here

答案 1 :(得分:-1)

我有类似的问题。我通过允许匿名访问Jenkins来解决此问题(该选项在Manage Jenkins页的Kerberos properties部分中提供-我们使用Kerberos Single Sign-On插件进行Jenkins身份验证,因此不确定其他身份验证插件如何工作)。

如果启用匿名访问,我还建议限制匿名访问的范围。