Spinnaker调用Jenkins API 返回403错误
让人头疼的是较高版本的Jenkins竟然在管理页面关闭不了CSRF,网上搜索到的资料有写通过 groovy代码 实现取消保护,但是笔者操作未成功,最后,Get到了一种成功的解决姿势。前段时间,k8s生产环境中选择使用Spinnaker + Jenkins实现CI/CD,但是我在Spinnaker执行构建走到调用jenkins的时候出错。因为Spinnaker是通过跨站的方式调用Jenkins,那么
感谢:
Spinnaker调用Jenkins API 返回403错误 - 走看看
https://www.jianshu.com/p/6c7ae50e1784
场景
前段时间,k8s生产环境中选择使用Spinnaker + Jenkins实现CI/CD,但是我在Spinnaker执行构建走到调用jenkins的时候出错
然后我去检查一下Jenkins的日志发现,出现以下报错:
[root@hdss7-22 ~]# 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
更多推荐
所有评论(0)