繁体   English   中英

Bitbucket webhook 运行 jenkins 作业

[英]Bitbucket webhook to run jenkins job

更新:

我成功地从curl发送了一个 post 请求来触发 jenkins 工作:

curl -I -X POST http://jenkinsAccountUserName:jenkinsAccountPassword@JenkinsIp:8080/job/projecty_ci/build -H "Jenkins-Crumb:a4fb99fbdb252fda3cc69ee575bedabc"

我不明白如何将其转换为 url: Problem accessing /job/projecty_ci/build. Reason: No valid crumb was included in the request 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

这适用于 chrome,但不适用于 bitbucket webhooks。

问题是什么?


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

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

在此处输入图像描述

在此处输入图像描述

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

  • 转到:Jenkins > 管理 Jenkins > 配置全局安全并启用防止跨站点请求伪造攻击。
  • Select Crumb Algorithm 的默认 Crumb Issuer 并保存以应用更改并启用。

远程访问 API

您可以通过调用 jenkins api 并在您的 URL 中使用来获取面包屑。

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

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

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


管理构建

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

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

开始构建

$ curl -H ".crumb:<crumb_string>" -X POST http://<jenkins_url>/job/<job_name>/build --user <user_name>:<api_token>

我可能不会在这里直接解决您的问题,但想分享一下,我们已经按照https://support.cloudbees.com/hc/en-us/articles/226568007-How-上的说明成功触发了 Jenkins 作业to-Trigger-Non-Multibranch-Jobs-from-BitBucket-Server-

我们在 BitBucket 服务器上使用的插件是https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview

我在这里有点晚了,我遇到了同样的问题,我像下面这样配置了 webhook URL 来为我工作:

http://jenkins-username:jenkins-password@jenkins-url:5555/job/job-name/build?crumb=crumb_token

参考问题: 如何通过 bitbucket-hook 将 crumb 信息传递给 jenkins?

希望能帮助到你!

使用我的 Jenkins 版本2.365 ,并在以前的答案的帮助下,我创建了如下请求,并且工作正常。

您放入 Bitbucket web 钩子 ZE6B391A8D2C4D45902A23A8B658570 中的 URL 将作为字段跟随

http://<jenkins-user>:API_TOKEN@<jenkins-url>:<jenkins-port>/job/<jenkins-job-id>/build

从 Jenkins 生成 API 令牌

  • 在 Jenkins 点击右上角的用户名 -> 配置

  • Go 到 API Token 部分并生成 API_TOKEN 如下图在此处输入图像描述

  • 复制这个key,需要在请求中使用(在上面的API_TOKEN字段中替换)

我发现这个错误不同。

设想:

我有 bitbucket 回购协议,它在推送、拉取、创建拉取请求和拉取请求合并时实际触发 jenkins 管道。

解决方案第一步我在 Jenkins 配置中创建了个人访问令牌 -> API 令牌(创建新的 API 令牌)

现在转到 Bitbucket 存储库

Repository Settings -> Webhooks -> Repository hooks(创建一个新的挂钩)

在 Hook 中,我们需要传递 Jenkins Personal Access Token 以及用户名

下面是示例 URL。

http://JenkinsUser:JenkinsPersonalAccessToken@Jenkins.localhost.com:8080/job/dockerapi-pipeline/build?token=PipelineToken

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM