简介:本文介绍了解决 Jenkins 报错“Error 403 No valid crumb was included in the request”的方法。该问题通常是由于 CSRF (Cross-Site Request Forgery) 保护导致的。文章提供了三种可能的解决方法:手动获取 crumb、使用 Jenkins API Token 和禁用 CSRF 保护。通过这些方法,你可以成功解决该问题并顺利执行 Jenkins 任务。
在使用 Jenkins 进行持续集成时,可能会遇到一个常见的错误:“Error 403 No valid crumb was included in the request”。这个错误通常是由于 CSRF (Cross-Site Request Forgery) 保护导致的。以下是一些可能的解决方法:
Jenkins 通过 CSRF 保护来防止跨站请求伪造攻击。当用户尝试执行某些敏感操作(如构建项目)时,Jenkins 会要求提供“crumb”。如果请求中没有包含有效的“crumb”,就会返回“Error 403 No valid crumb was included in the request”错误。
http://[YOUR_JENKINS_URL]/crumbIssuer/api/jsoncrumb 值复制下来。crumb 值添加到请求头中。http://[YOUR_JENKINS_URL]/configureGlobalSecurity请注意,上述示例代码中的
import requestsimport json# 获取 crumb 的示例代码(方法一)crumb_url = 'http://[YOUR_JENKINS_URL]/crumbIssuer/api/json'response = requests.get(crumb_url)data = json.loads(response.text)crumb = data['crumb']# 使用 API Token 的示例代码(方法二)api_token = '[YOUR_API_TOKEN]' # 从 Jenkins 个人设置中生成一个新的 API Tokenheaders = {'Authorization': 'Bearer ' + api_token}# 发送请求的示例代码(包含 crumb 或 API Token)url = 'http://[YOUR_JENKINS_URL]/job/[JOB_NAME]/build' # 替换为实际的 Jenkins job URLresponse = requests.post(url, headers=headers) # 如果使用 crumb,将 headers 更改为包含 crumb 的字典print(response.text)
[YOUR_JENKINS_URL]、[JOB_NAME] 和 [YOUR_API_TOKEN] 需要替换为实际的值。另外,如果你的 Jenkins 实例启用了身份验证,还需要在请求中包含用户名和密码。你可以使用 requests.auth 来实现这一点。