当前位置:网站首页>Spinnaker调用Jenkins API 返回403错误
Spinnaker调用Jenkins API 返回403错误
2022-08-04 00:00:00 【Jerry00713】
感谢:
Spinnaker调用Jenkins API 返回403错误 - 走看看
https://www.jianshu.com/p/6c7ae50e1784
场景
前段时间,k8s生产环境中选择使用Spinnaker + Jenkins实现CI/CD,但是我在Spinnaker执行构建走到调用jenkins的时候出错

然后我去检查一下Jenkins的日志发现,出现以下报错:
[[email protected] ~]# kubectl logs -f jenkins-56d9fd55f9-xrtgz -n infra
WARNING hudson.security.csrf.CrumbFilter#doFilter: No valid crumb was included in request for /job/dubbo-demo-slave/buildWithParameters by admin. Returning 403.原因
因为Spinnaker是通过跨站的方式调用Jenkins,那么Jenkins默认是开启CSRF保护,所以jenkins就会返回一个403报错
解决
老版本解决方案:
把CSRF保护的勾取消即可。


新版本解决方案:
老版本Jenkins的CSRF保护功能只需要在 系统管理 > 全局安全配置 中便可进行打开或者关闭。让人头疼的是较高版本的Jenkins竟然在管理页面关闭不了CSRF,网上搜索到的资料有写通过 groovy代码 实现取消保护,但是笔者操作未成功,最后,Get到了一种成功的解决姿势。
在Jenkins启动前加入相关取消保护的参数配置后启动Jenkins,即可关闭CSRF,配置内容如下:
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
Jenkins若是跑在Tomcat下,只需在tomcat启动脚本中加入配置即可;若是以jar包形式部署的,只需在启动时加上配置参数即可。
笔者Jenkins是部署在k8s环境中,故启动参数配置在yaml文件中,如下:
cat dp.yaml |grep csrf -C5

整个配置文件:
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: jenkins
namespace: infra
labels:
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
name: jenkins
template:
metadata:
labels:
app: jenkins
name: jenkins
spec:
volumes:
- name: data
nfs:
server: hdss7-200
path: /data/nfs-volume/jenkins_home
- name: docker
hostPath:
path: /run/docker.sock
type: ''
containers:
- name: jenkins
image: harbor.od.com:180/infra/jenkins:v2.319.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
env:
- name: JAVA_OPTS
value: -Xmx512m -Xms512m -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
volumeMounts:
- name: data
mountPath: /var/jenkins_home
- name: docker
mountPath: /run/docker.sock
imagePullSecrets:
- name: harbor
securityContext:
runAsUser: 0
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600
边栏推荐
猜你喜欢
随机推荐
2022-08-03:以下go语言代码输出什么?A:2;B:3;C:1;D:0。 package main import “fmt“ func main() { slice := []i
Unity intercepts 3D images and the implementation of picture-in-picture PIP
用两个栈模拟队列
免费的公共WiFi不要乱连,遭中间人攻击了吧?
HNUCM 2022年暑假ACM搜索专项练习
LeetCode 0155. 最小栈
The Beijing E-sports Metaverse Forum was successfully held
HNUCM 您好中国
20年将投资美国约2000亿美元,三星电子财大气粗的样子真好看
Shell编程之循环语句与函数
[Miscellaneous] How to install the specified font into the computer and then use the font in the Office software?
状态机实验
米哈游--测试开发提前批
POE交换机全方位解读(下)
2022/8/3 Exam Summary
七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间
现货白银需要注意八大事项
It will invest about 200 billion US dollars in the United States in 20 years, and Samsung Electronics looks so handsome
SRE运维解密-什么是SRE:DevOps模型的具体实践!
Jmeter-断言









