普元Devops学习笔记-devops对接jenkins提示crumb不可用问题

avatar
作者
猴君
阅读量:0

前言

普元devops需要对接jenkins,对接jenkins后,devops会调用jenkins的提供的API。

问题

新版本的jenkins提供跨域保护,即大名鼎鼎的CSRF问题。

因此,普元devops调用jenkins的时候,会出现跨域问题。

后台报错信息如下:

Caused by: com.primeton.devops.specs.exception.DevOpsRuntimeException: DEVOPS_COMMON_ACCESS_OTHER_APP_ERROR: URL[POST http://xxx.xxx.xxx.xxx:xxxx/createItem/api/json?name=build-2-PROJ001-xxljob%E6%9E%84%E5%BB%BA001-1-22] request error.[statusCode=403][errorMessage=No valid crumb was included in the request][responseDetails={ "servlet":"Stapler", "message":"No valid crumb was included in the request", "url":"/createItem/api/json", "status":"403" }]

可以看到,提示的信息是 No valid crumb was included in the request。这就是jenkins提示跨域问题。

解决办法

老版本Jenkins的CSRF保护功能只需要在 系统管理 > 全局安全配置 中便可进行打开或者关闭。让人头疼的是较高版本的Jenkins竟然在管理页面关闭不了CSRF,网上搜索到的资料有写通过 groovy代码 实现取消保护,但是笔者操作未成功,最后,Get到了一种成功的解决姿势。

在Jenkins启动前加入相关取消保护的参数配置后启动Jenkins,即可关闭CSRF,配置内容如下:

-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

我的启动命令如下:

#/bin/bash  export JINKINS_HOME=/works/devops/jenkins/home  nohup /works/apps/jdk17/bin/java -jar  -Xms64M -Xmx256M -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true  /works/devops/jenkins/jenkins.war --httpPort=9080 >/works/devops/jenkins/all.log 2>&1 & 

Jenkins若是跑在Tomcat下,只需在tomcat启动脚本中加入配置即可;若是以jar包形式部署的,只需在启动时加上配置参数即可。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!