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
我对这个问题很生气,我不知道如何解决它。
我们正在尝试从 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