我最近升级到 Jenkins 2.192,我的应用程序开始失败并出现以下错误:
HTTP Error 403: No valid crumb was included in the request
Reason: No valid crumb was included in the request
Run Code Online (Sandbox Code Playgroud)
降级到 Jenkins 2.189 后我没有看到问题。我没有看到 Jenkins 2.189、2.190、2.191 的问题。我遇到了 Jenkins 2.192 的问题(也见于 2.196)
2.191 和 2.192 之间发生了一些变化,导致我观察到的失败。
您现在必须在每次使用该面包屑时转发会话 ID(出现在生成面包屑的 cookie 响应中)。示例代码,希望能说明它:
async function duplicateProject() {
const jenkinsAxios = axios.create({
baseURL: 'http://jenkins_url',
auth: {
username: 'MY-USERNAME',
password: "MY-PASSWORD"
}
});
const {data: existingJobConfig} = await jenkinsAxios.get('/job/existingJob/config.xml');
const crumbIssuer = await jenkinsAxios.get('/crumbIssuer/api/json');
await jenkinsAxios.post(`/createItem?name=MY_NEW_PROJECT`, existingJobConfig, {
headers: {
'Content-Type': 'application/xml',
[crumbIssuer.data.crumbRequestField]: crumbIssuer.data.crumb,
Cookie: crumbIssuer.headers['set-cookie'][0] // <--- THIS IS KEY!!!!
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
无需更改源代码的简单解决方案(经 Jenkins v2.222 验证):
一个缺点是该解决方案使我们依赖 Strict Crumb Issuer 插件并删除了安全功能。但是由于我们的应用程序需要许多其他插件,并且只能在防火墙后面运行而无法访问 Internet,因此这是可以接受的。
小智 5
参考 - https://support.cloudbees.com/hc/en-us/articles/219257077-CSRF-Protection-Explained
如果您使用用户名和用户 API 令牌进行身份验证,则 Jenkins 2.96 周/2.107 LTS 不需要面包屑。有关更多信息,请参阅使用 API 令牌或 JENKINS-22474 进行身份验证时不再需要 CSRF 面包屑。
小智 5
在阅读了几篇文章后,我找到了解决方法......
步骤1
转到 Jenkins 并为 Jenkins 中的登录用户创建令牌
复制令牌和用户 ID
user id: admin
token id :- "*****"
Run Code Online (Sandbox Code Playgroud)
第2步:-
使用以下命令创建面包屑
wget -q --auth-no-challenge --user admin --password "ur jenkins password" --output-document - 'http://urljenkinsurl:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Run Code Online (Sandbox Code Playgroud)
这里的输出将是你的面包屑,例如:-"Jenkins-Crumb:****************"
步骤 3:-
在 Jenkins“Strict Crumb Issuer Plugin”中安装插件
步骤4:-
转到 BitBucket 并输入 URL 作为
http://admin:"your Jenkins token created in the above step"@3.22.23.32:8080/job/ur Job-name/build?crumb="created in the step 2"
Run Code Online (Sandbox Code Playgroud)
第 5 步:-
转到您的 Jenkins 作业,转到配置 --> 选择 --> 使用 BitBucket Push 和 Pull Request 插件构建。
填充允许的分支:- /*
例如:- /*master 主分支
第 6 步:-
就是这样,现在尝试推送到主分支,将会看到构建被触发。
注意:- 请删除所有步骤中的“”并替换为您的值
| 归档时间: |
|
| 查看次数: |
15423 次 |
| 最近记录: |