jenkins error: "No valid crumb was included in the request"

一、问题描述(Problem Description):

在jenkins中创建新任务时候选择“拷贝已存在任务”,点击OK,跳转到下一步时候弹出如下错误信息:"No valid crumb was included in the request"

jenkins new job -> copy existing job -> click OK -> "No valid crumb was included in the request"

 

二、运行环境(Environment):

apache + jboss-as-7.1.1.Final,Windows XP SP3,jdk 1.6.0_33

 

三、错误原因(Reason):

jenkins在http请求头部中放置了一个名为.crumb的token。在使用了反向代理,并且在jenkins设置中勾选了“防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits”之后此token会被转发服务器apache/nginx认为是不合法头部而去掉。导致跳转失败。

The problem is that jenkins stores its' csrf token in a http header called '.crumb', AFAIK headers must only contain alphanumerics and dashes, and apache/nginx will remove invalid headers from the request (unless configured not to).

 

四、解决方案(Solution):

1.在apache/nginx中设置ignore_invalid_headers,或者:

2.在jenkins全局安全设置中取消勾选“防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits”。

1.Set ignore_invalid_headers in your apache/nginx server, or:

2.Uncheck "Prevent Cross Site Request Forgery exploits" in jenkins global security settings.

 

【参考资料(References)】

https://issues.jenkins-ci.org/browse/JENKINS-12875

http://en.wikipedia.org/wiki/Cross-site_request_forgery

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

### Jenkins SCM API 插件使用说明 #### 配置与安装 为了利用 Jenkins 的强大功能,SCM API 插件必不可少。此插件提供了一种统一的方式来处理各种源码管理系统 (SCMs),使得不同类型的仓库可以被一致地管理和操作[^1]。 要安装该插件,在 Jenkins 中进入“Manage Jenkins”,接着点击“Manage Plugins”。在可用选项卡下搜索 `SCM API Plugin` 并进行安装。确保重启 Jenkins 实例以便使更改生效。 #### 使用方法概述 一旦成功安装并激活了 SCM API 插件,则可以在 Pipeline 或自由风格项目中定义 Source Code Management (SCM) 行为。对于基于 Groovy 的 pipeline-as-code 文件而言,通常会在 Jenkinsfile 内指定所使用的版本控制系统以及如何检出代码库: ```groovy pipeline { agent any stages { stage('Checkout') { steps { checkout([$class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[url: 'git@github.com:user/repo.git']]]) } } // 更多阶段... } } ``` 上述脚本展示了怎样通过 Git 来获取最新提交到 main 分支上的变更记录。这里的关键在于 `checkout` 步骤及其参数设置;这些都依赖于具体的 SCM 类型而有所不同。 #### 示例:GitHub 私有仓库访问控制 当涉及到私有的 GitHub 仓库时,除了基本的身份验证外还需要考虑 SSH 密钥或 OAuth Token 的配置方式。下面是一个完整的例子,它不仅涵盖了前面提到的内容还包含了安全连接所需的额外措施: ```groovy environment { GIT_CREDENTIALS_ID = credentials('my-github-token') } pipeline { agent { label 'docker' } options { skipDefaultCheckout true } environment { REPO_URL = "https://github.com/organization/private-repository" } stages { stage('Clone Repository') { steps { git branch: 'main', url: env.REPO_URL, credentialsId: "${env.GIT_CREDENTIALS_ID}" } } // 后续构建步骤... } post { always { cleanWs() } } } ``` 这段代码片段里引入了一个环境变量用于存储凭证 ID (`GIT_CREDENTIALS_ID`) 和另一个用来保存目标仓库 URL(`REPO_URL`) 。值得注意的是,`credentials()` 函数允许从 Jenkins Credential Store 获取敏感数据而不必将其硬编码进脚本之中。 #### 常见问题及解决方案 ##### Error 403 No Valid Crumb Was Included In The Request 如果遇到此类错误提示,可能是因为客户端发送给 Jenkins Server 的请求缺少必要的 CSRF Protection Token(即所谓的Crumb)。这通常是由于 REST API 请求未携带有效的 crumb 所致[^3]。解决办法是在发起任何非 GET 方法之前先调用 `/crumbIssuer/api/json?tree=crumb` 接口取得当前 session 对应的 token,并将其作为自定义 header 添加至后续请求头内: ```bash CRUMB=$(curl -u username:password http://jenkins-url/crumbIssuer/api/xml?xpath=//crumb/text()) curl -H "Jenkins-Crumb:${CRUMB}" ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值