jenkins rest api调用中的一些坑

jenkins提供了一些api可以让我们远程对jenkins进行操作,

这里说一些jenkins关于安全相关的一些坑

1.跨域访问:

跨域访问我们需要通过get请求获取到/crumbIssuer/api/json,然后再请求头中添加crumbRequestField值为crumb的头信息

2.登录验证信息,一些需要登录才能操作的需要我们添加校验信息:

headers.add("Authorization", "Basic YWxsZW46YWxsZW4=");

3。token api

高版本的jenkins中,提倡使用token api ,这样我们可以通过管理token来管理对外的api权限

,在postman中我们可以直接post请求http://tokenapi:110d30bafe99e2e6c21658f655c5899f98@xx.xx.xx.xx:8080/job/allen-jenkins/build就可以进行任务构建,

这里tokenapi是用户名信息,而不是tokenid,token是创建tokenapi的时候返回的字符串

 但是在web应用中,这样是行不通的,不管怎么调用都会返回No valid crumb was included in the request,加了登录验证,加了

Crumb,加了tokenapi:110d30bafe99e2e6c21658f655c5899f98都不行。

最后通过fiddler来拦截请求发现,postman的请求最后也是加了一串Authorization头信息,

Authorization: Basic YWxsZW46MTEwZDMwYmFmZTk5ZTJlNmMyMTY1OGY2NTVjNTg5OWY5OA==

也就是说,我们加在请求中的tokenapi:110d30bafe99e2e6c21658f655c5899f98在postman中会自动转为头信息,

但是在RestTemplate中就不会,我们吧RestTEmplate中也将tokenapi:110d30bafe99e2e6c21658f655c5899f98转为Authorization头,发现,最终调用成功。

 

如果使用jenkins-rest库进行请求,则只需

JenkinsClient client = JenkinsClient.builder()
                .endPoint("http://localhost:8080")
                .credentials("allen:110d30bafe99e2e6c21658f655c5899f98")
                .build();

就可以直接进行接口调用了

 

最后是版本依赖问题:

我使用springboot 2.2.6.RELEASE版本

jenkins-rest的任何版本都无法与之兼容,后面查看依赖jar包,发现是gson的冲突,原因是jenkins-rest使用的gson版本较低,springboot使用的gson版本较高,高低版本之间有些不一样,程序启动就会出问题,低版本的无法适应springboot,高版本的不能

适应jenkins-rest,这就需要找到一个双方都能满足的中间版本

解决方法是,使用最高版本的jenkins-rest这里使用的是0.0.25(使用的gson版本是2.6),使用的springboot版本是2.2.6.RELEASE ,

gson版本是2.8.6, 然后我们在jenkins-rest依赖中排除gson,单独引入gson:

<dependency>
            <groupId>com.cdancy</groupId>
            <artifactId>jenkins-rest</artifactId>
            <version>0.0.20</version>
             <exclusions>
            <exclusion>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
            </exclusion>
        </exclusions>
       </dependency>
       
       <dependency>
         <groupId>com.google.code.gson</groupId>
         <artifactId>gson</artifactId>
         <version>2.5</version>
       </dependency>

经测试,问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值