在使用java调用jenkins REST API时,使用登陆的用户名和密码连接调用api报错:hudson.security.AccessDeniedException2: anonymous is missing the Overall/Read permission
这里将密码改为生成的用户token就可以正常连接

一、使用jenkins-client调用jenkins REST API

1、引入pom依赖

<!-- https://mvnrepository.com/artifact/com.offbytwo.jenkins/jenkins-client -->
<dependency>
    <groupId>com.offbytwo.jenkins</groupId>
    <artifactId>jenkins-client</artifactId>
    <version>0.3.8</version>
</dependency>

2、测试连接的java代码

@Slf4j
public class Test {
    public static  void main(String[] args) throws Exception {
        String url = "http://192.168.225.1:8080";
        String username = "admin";
        String password = "1234abcd";
        String jobName = "demo-pipeline";
        # 连接Jenkins Server
        JenkinsServer jenkins = new JenkinsServer(new URI(url), username, password);
        # 获取版本号
        JenkinsVersion version = jenkins.getVersion();
        log.info(version.getLiteralVersion());
        # 根据job名称获取XML的配置
        String jobXml = jenkins.getJobXml(jobName);
        log.info(jobXml);
        JobWithDetails job = jenkins.getJob(jobName);
        Optional.ofNullable(job).ifPresent(val -> {
            log.info(val.getUrl());

运行上面的代码,控制台显示如下错误:

2020-09-15 07:00:29.148+0000 [id=14]	WARNING	h.i.i.InstallUncaughtExceptionHandler#handleException: Caught unhandled exception with ID 5951bc12-986b-4f66-9d59-0ba9c1073def
hudson.security.AccessDeniedException2: anonymous is missing the Overall/Read permission
	at hudson.security.ACL.checkPermission(ACL.java:79)
	at hudson.security.AccessControlled.checkPermission(AccessControlled.java:47)
	at jenkins.model.Jenkins.getTarget(Jenkins.java:4792)
	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:721)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694)
	at org.kohsuke.stapler.Stapler.service(Stapler.java:240)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:620)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.Dispatcher.include(Dispatcher.java:121)
	at hudson.security.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:171)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)
	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)
	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)
	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)
	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1618)
	at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:36)

二、解决方法

我们打开JenkinsServer的源码,如下图所示,推荐我们用token进行连接,所以我们需要将密码改为token
在这里插入图片描述
如何获取用户的token,在Jenkins中通过如下方式生成token
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后将我们的密码改为token就可以正常连接Jenkins Server了。

一、使用jenkins-client调用jenkins REST API1、引入pom依赖&lt;!-- https://mvnrepository.com/artifact/com.offbytwo.jenkins/jenkins-client --&gt;&lt;dependency&gt; &lt;groupId&gt;com.offbytwo.jenkins&lt;/groupId&gt; &lt;artifactId&gt;jenkins-client&lt;/artifac 解决方案如下: 在Jenkins中,用户的权限可以在JENKINSHOME/config.xml中进行配置。其中JENKINS_HOME/config.xml中进行配置。其中JENKINSH​OME/config.xml中进行配置。其中JENKINS_HOME为jenkins安装的路径
1. 使用脚本将已经创建好的虚拟机加入slave中,主要使用的工具的 jenkinscli,参考文章:https://blog.csdn.net/qq_33873431/article/details/80348544,中间遇到的问题 "ERROR: anonymous is missing the Overall/Read permission" 解决方法是加入认证 https://www.jeffgeerling.com/blog/2018/fixing-jenkins-cli-error-ano
import hudson.model.* def q = Jenkins.instance.queue q.items.findAll { it.task.name.startsWith('JobName') }.each { q.cancel(it.task) } “JobName”可替换 上一篇正好是用户权限的配置,这一篇介绍的是jenkins因配置权限错误导致的无法登录的解决方法。 Jenkins权限配置,可参考下列链接: https://blog.csdn.net/GX_1_11_real/article/details/99429802 Access Denied admin is missing the Overall/Read permissio...
本文将介绍怎样配置jenkins,使其能够支持基于角色的项目权限管理。 因为jenkins默认的权限管理体系不支持用户组或角色的配置,因此须要安装第三发插件来支持角色的配置。本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin 一、配置插件...
https://www.cnblogs.com/yangxia-test/p/4368778.html https://blog.csdn.net/xlyrh/article/details/51384837 Jenkins的授权和访问控制 https://blog.csdn.net/cdnight/article/details/81078191 全面排错 提示hu...
Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from git.yunwei.ctid/172.18.60.9:52714 at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1743) at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357) at hudson.remoting.Channel.call(Channel.java:957) at hudson.FilePath.act(FilePath.java:1070) at hudson.FilePath.act(FilePath.java:1059) at hudson.FilePath.mkdirs(FilePath.java:1244) at hudson.model.AbstractProject.checkout(AbstractProject.java:1202) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:574) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:499) at hudson.model.Run.execute(Run.java:1818) at hudson.matrix.MatrixRun.run(MatrixRun.java:153) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429) java.nio.file.AccessDeniedException: /var/lib/jenkins
根据提供的错误日志,看起来是Jenkins节点在尝试创建目录时发生了权限拒绝的错误。具体来说,它试图在`/var/lib/jenkins`目录下创建目录时遇到了`java.nio.file.AccessDeniedException`异常。 要解决此问题,您可以尝试以下解决方法: 1. 检查文件系统权限:确保Jenkins用户(通常是`jenkins`用户)对`/var/lib/jenkins`目录具有适当的写入权限。您可以使用`ls -l /var/lib`命令检查该目录的权限设置,并使用`chmod`命令更改权限。 2. 检查Jenkins用户的所属组:确保Jenkins用户所属的组具有对`/var/lib/jenkins`目录的写入权限。您可以使用`id jenkins`命令查看Jenkins用户所属的组,并使用`chown`命令更改文件夹的所有者和所属组。 3. 检查SELinux或AppArmor等安全模块:如果您的系统启用了SELinux或AppArmor等安全模块,它们可能会限制Jenkins对文件系统的访问权限。您可以根据您的操作系统和安全模块的具体配置,调整相关规则以允许Jenkins访问所需的目录。 4. 检查磁盘空间:确保磁盘上有足够的可用空间,以便Jenkins可以在`/var/lib/jenkins`目录下创建所需的目录。 请注意,具体的解决方法可能会因您的操作系统和Jenkins配置而有所不同。如果问题仍然存在,请提供更多的详细信息和环境配置,以便我们可以更好地帮助您解决问题。