Bitbucket webhook 运行 jenkins 作业

Sta*_*lfi 7 git bitbucket webhooks jenkins

更新:

我成功发送了一个帖子请求来curl触发詹金斯工作:

curl -I -X POST http://jenkinsAccountUserName:jenkinsAccountPassword@JenkinsIp:8080/job/projecty_ci/build -H "Jenkins-Crumb:a4fb99fbdb252fda3cc69ee575bedabc"
Run Code Online (Sandbox Code Playgroud)

我不明白如何将其转换为 url: Problem accessing /job/projecty_ci/build. Reason: No valid crumb was included in the request

http://jenkinsAccountUserName:jenkinsAccountPassword@JenkinsIp:8080/job/projecty_ci/build?Jenkins-Crumb:a4fb99fbdb252fda3cc69ee575bedabc
Run Code Online (Sandbox Code Playgroud)

这在 chrome 中工作得很好,但在 bitbucket webhooks 中却不行。

问题是什么?


我在 jenkins 中创建了一个作业,我可以通过 url 成功触发它。

当我从 bitbucket 的 webhook 触发相同的作业时,我收到错误:Problem accessing /job/projecty_ci/build. Reason: No valid crumb was included in the request

在此输入图像描述

在此输入图像描述

Sof*_*ter 5

尝试生成一个 CSRF 令牌以在您的 API 请求中使用。

  • 转至:Jenkins > 管理 Jenkins > 配置全局安全性并启用防止跨站点请求伪造漏洞。
  • 从 Crumb 算法中选择默认 Crumb 发行者并保存以应用更改并启用。

远程访问API

您可以通过调用 jenkins api 并在 URL 中使用它来获取碎屑。

对于curl/wget,您可以从URL JENKINS_URL/crumbIssuer/api/xml(或.../api/json)获取请求中所需的标头。像这样的东西:

wget -q --auth-no-challenge --user USERNAME --password PASSWORD --output-document - \
'JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Run Code Online (Sandbox Code Playgroud)

这将打印类似“.crumb:1234abcd”的内容,您应该将其添加到后续请求中。


管理构建

注意:为了防止 CSRF,Jenkins 要求 POST 请求包含特定于每个用户的碎屑。获取面包屑的命令是:

SERVER=http://localhost:8080
    CRUMB=$(curl --user $USER:$APITOKEN \
        $SERVER/crumbIssuer/api/xml?xpath=concat\(//crumbRequestField,%22:%22,//crumb\)) 
Run Code Online (Sandbox Code Playgroud)

开始构建

$ curl -H ".crumb:<crumb_string>" -X POST http://<jenkins_url>/job/<job_name>/build --user <user_name>:<api_token>
Run Code Online (Sandbox Code Playgroud)

  • 截至 2021 年 5 月,设置名称为“CSRF Protection”,您要设置的复选框名为“启用代理兼容性”。 (2认同)