• Spinnaker调用Jenkins API 返回403错误


    感谢:

    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

    整个配置文件:

    1. kind: Deployment
    2. apiVersion: extensions/v1beta1
    3. metadata:
    4. name: jenkins
    5. namespace: infra
    6. labels:
    7. name: jenkins
    8. spec:
    9. replicas: 1
    10. selector:
    11. matchLabels:
    12. name: jenkins
    13. template:
    14. metadata:
    15. labels:
    16. app: jenkins
    17. name: jenkins
    18. spec:
    19. volumes:
    20. - name: data
    21. nfs:
    22. server: hdss7-200
    23. path: /data/nfs-volume/jenkins_home
    24. - name: docker
    25. hostPath:
    26. path: /run/docker.sock
    27. type: ''
    28. containers:
    29. - name: jenkins
    30. image: harbor.od.com:180/infra/jenkins:v2.319.1
    31. imagePullPolicy: IfNotPresent
    32. ports:
    33. - containerPort: 8080
    34. protocol: TCP
    35. env:
    36. - name: JAVA_OPTS
    37. value: -Xmx512m -Xms512m -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
    38. volumeMounts:
    39. - name: data
    40. mountPath: /var/jenkins_home
    41. - name: docker
    42. mountPath: /run/docker.sock
    43. imagePullSecrets:
    44. - name: harbor
    45. securityContext:
    46. runAsUser: 0
    47. strategy:
    48. type: RollingUpdate
    49. rollingUpdate:
    50. maxUnavailable: 1
    51. maxSurge: 1
    52. revisionHistoryLimit: 7
    53. progressDeadlineSeconds: 600



     

     

  • 相关阅读:
    【Linux 进程间通信】信号量
    ES6之Symbol.hasInstance
    通过shiro进行按钮及页面访问url的权限控制
    元数据治理利器 - Apache Atlas
    软件测试人需要掌握的测试知识架构体系(上)
    【Java基础】分支结构之switch语句及for循环结构
    VOP —— Noise
    Python——读取MySQL数据并导出到Excel
    SpringBoot:使用Spring Batch实现批处理任务
    C语言王国——深入自定义类型(联合体、枚举)
  • 原文地址:https://blog.csdn.net/Jerry00713/article/details/126129861