我将Ansible(v 2.8)用作Packer模板背后的供应商,以为Jenkins主节点构建AMI。对于以前的版本,剧本已成功通过。但是,从Jenkins 2.176.3版开始,该jenkins_plugin模块已抛出:
jenkins_plugin
HTTP错误403:请求中未包含有效的屑
我已经检索了面包屑并将其注册在变量中。我尝试将其传递给jenkins_plugin该http_agent字段,但这不起作用。我尝试使用attributes,但这也无济于事。除非我缺少令人难以置信的基本知识,否则我将束手无策。
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版本中的碎屑发行者所做的更改 强制将初始令牌生成调用的Web会话ID连同碎屑一起包含在使用所述碎屑的后续调用中。
CSRF令牌(小块)现在仅对创建它们的Web会话有效,以限制攻击者获取它们的影响。使用/ crumbIssuer / api URL获取垃圾的脚本现在将无法执行受CSRF保护的操作,除非脚本在后续请求中保留了Web会话ID。
除了建议您暂时禁用CSRF之外,同一文档还建议您只能禁用新功能,而不能禁用整个CSRF,这应允许您的打包程序/可写程序按照以前的方式完成。
要禁用此改进,可以将系统属性hudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID设置为true。
编辑:
/etc/default/jenkins在我自己的剧本(Ansible 2.8.4,Ubuntu 18.04,OpenJDK 11.0.4)中添加以下行可清除CSRF问题。
/etc/default/jenkins
JAVA_ARGS="$JAVA_ARGS -Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID=true"
在工具维护人员赶上API更改之前,可能是一个足够好的拐杖。