Jenkins CLI:使用匿名权限而不是用户定义的权限

Jenkins CLI: using Anonymous permissions instead of the user defined ones

我对这个问题很生气,我不知道如何解决它。

我们正在尝试从 Windows 中央存储库上的挂钩触发 Jenkins 构建。这实际上是在旧的 Jenkins 服务器 (LTS 1.580.1) 上工作。

我们之前的做法是使用存储在文件中的 SSH 私钥调用 Jenkins CLI。

奇怪的是:

C:\Users\Username\jenkins>java -jar jenkins-cli.jar -s http://hostname:8080 -i ci.key list-jobs

hudson.security.AccessDeniedException2: jenkins_ci is missing the Overall/Read permission
         at hudson.security.ACL.checkPermission(ACL.java:58)
         at hudson.model.Node.checkPermission(Node.java:417)
         at hudson.cli.CLICommand.main(CLICommand.java:236)
         at hudson.cli.CliManagerImpl.main(CliManagerImpl.java:92)
         at sun.reflect.GeneratedMethodAccessor345.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
         at java.lang.reflect.Method.invoke(Method.java:483)
         at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:320)
         at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:295)
         at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:254)
         at hudson.remoting.UserRequest.perform(UserRequest.java:121)
         at hudson.remoting.UserRequest.perform(UserRequest.java:49)
         at hudson.remoting.Request.run(Request.java:324)
         at hudson.remoting.InterceptingExecutorService.call(InterceptingExecutorService.java:68)
         at hudson.cli.CliManagerImpl.call(CliManagerImpl.java:63)
         at hudson.remoting.CallableDecoratorAdapter.call(CallableDecoratorAdapter.java:18)
         at hudson.remoting.CallableDecoratorList.call(CallableDecoratorList.java:21)
         at jenkins.util.ContextResettingExecutorService.call(ContextResettingExecutorService.java:46)
         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
         at java.lang.Thread.run(Thread.java:745)

jenkins_ci 用户是一个 Active Directory 服务帐户,主要处理所有事情。在 Jenkins 安全矩阵中,我拥有与该服务帐户相同的权限。

当我使用我的 ssh 密钥和 运行 完全相同的命令时,它非常有效。

如果我 运行 它说我是谁 "jenkins_ci" 但是如果我更改匿名权限然后 jenkins_ci 开始工作。 它似乎没有读取定义的用户权限,而是使用匿名权限。

有什么让它发挥作用的想法吗?这是我应该向 Jenkins 报告的错误还是我遗漏了什么?

谢谢!

好吧,经过几个小时的努力,我得到了一个 "happy idea" 并且它成功了。

我们的 Jenkins 正在使用 LDAP 针对 Active Directory 进行身份验证。

不知何故,Jenkins 创建的用户(及其用户文件夹)是: "jenkins_ci"(小写),我们的 Active Directory 帐户是 "JENKINS_CI"(大写)。

Jenkins 安全性似乎区分大小写

我停止了 Jenkins,删除了主机上的用户文件夹,然后才启动了 Jenkins。 新文件夹现在称为 JENKINS_CI,现在 CLI 正在运行。

java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml

我可以 运行 使用下面的命令 link

https://wiki.jenkins-ci.org/display/JENKINS/Disable+security