如何解决Jenkins中“HTTP ERROR 403 请求无有效crumb”问题?
解决Jenkins中止构建时403无有效Crumb的问题
你的代码存在两个关键问题:
- 变量名错误:你把获取到的crumb值存在
crumb_value变量里,但POST请求里误用了未定义的crumb_json,直接导致传递的crumb无效。 - Crumb传递方式错误:Jenkins的crumb需要放在请求头中,而非JSON请求体里。
/stop接口通常不解析JSON格式参数,而是期望通过请求头携带crumb完成验证。
修正后的代码示例:
import requests # 1. 获取crumb及对应的请求头字段名(避免硬编码字段名) crumb_data = requests.get( f"https://{usr}:{psw}@<jenkins url>/crumbIssuer/api/json", verify=False ).json() crumb_header_field = crumb_data["crumbRequestField"] crumb_value = crumb_data["crumb"] # 2. 构建包含crumb的请求头 request_headers = { crumb_header_field: crumb_value } # 3. 发送POST请求中止构建 jenkins_abort = requests.post( f"https://{usr}:{psw}@<job url>/stop", headers=request_headers, verify=False ) # 可打印响应信息排查问题 print(jenkins_abort.status_code) print(jenkins_abort.text)
额外注意事项:
- 不要硬编码
Jenkins-Crumb字段名,部分Jenkins配置下该字段名可能为X-Jenkins-Crumb,通过crumbRequestField动态获取更可靠。 - 确保你的账号拥有中止构建的权限(如
Job/Build权限组中的Stop Build权限)。 verify=False仅适合测试环境,生产环境建议配置正确的SSL证书验证。
内容的提问来源于stack exchange,提问作者eresque-
相关产品推荐
相关产品推荐

