我使用 Ansible (v 2.8) 作为 Packer 模板背后的配置程序来为 Jenkins 主节点构建 AMI。对于以前的版本,剧本已成功通过。然而,从 Jenkins 版本 2.176.3 开始,jenkins_plugin
模块一直在抛出:
HTTP 错误 403:请求中未包含有效的碎屑
我已经检索了面包屑并将其注册在变量中。我尝试过将其传递给jenkins_plugin
与http_agent
领域,但这不起作用。我尝试使用attributes
,但这也没有帮助。除非我错过了一些非常基本的东西,否则我已经束手无策了。
- name: Get Jenkins Crumb
uri:
force_basic_auth: yes
url_username: ****
url_password: ****
url: http://localhost:8080/crumbIssuer/api/json
return_content: yes
register: jenkins_crumb
until: jenkins_crumb.content.find('Please wait while Jenkins is getting ready') == -1
retries: 10
delay: 5
- name: Install plugin
jenkins_plugin:
name: "{{ item }}"
version: latest
force_basic_auth: yes
url_username: ****
url_password: ****
http_agent: "Jenkins-Crumb:{{ jenkins_crumb.json.crumb }}"
with_items: "{{ jenkins_plugins }}"
我期望安装插件并愉快地构建 AMI。我得到的是“HTTP 错误 403:请求中未包含有效的面包屑”,并且 Packer 构建失败。
看起来像是对面包屑发行者的更改2.176 LTS 版本 https://jenkins.io/doc/upgrade-guide/2.176/#SECURITY-626强制将初始令牌生成调用的 Web 会话 ID 与使用所述碎屑的后续调用中的碎屑一起包含在内。
CSRF 令牌(碎片)现在仅对创建它们的 Web 会话有效,以限制攻击者获取它们的影响。使用 /crumbIssuer/api URL 获取 crumb 的脚本现在将无法执行受 CSRF 保护的操作,除非脚本在后续请求中保留 Web 会话 ID。
除了暂时禁用 CSRF 的建议之外,同一个文档还建议您只能禁用新功能,而不是整个 CSRF,这应该允许您的打包器/ansible 像以前那样完成,如所写。
要禁用此改进,您可以将系统属性 hudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID 设置为 true。
EDIT :
添加以下行/etc/default/jenkins
清除了我自己的剧本中的 CSRF 问题(Ansible 2.8.4、Ubuntu 18.04、OpenJDK 11.0.4)
JAVA_ARGS="$JAVA_ARGS -Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID=true"
在工具维护者赶上 API 更改之前,这可能是一个足够好的拐杖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)