21

标题主要是这样说的。如何从远程 git 存储库触发 Jenkins 多分支管道项目构建?

“触发器远程构建”构建触发器选项似乎不起作用,因为您设置的令牌没有保存。

4

4 回答 4

19

目前(Jenkins 2.22)“触发器远程构建”构建触发器选项在多分支管道作业配置中可见,但不起作用(如果您检查它并指定一个令牌,它会在保存后重置)。据此,无法设置触发器是故意的,而是一个错误,它根本作为一个选项出现

在同一个线程中,他们解释了如何为多分支管道项目中的每个单独项目(分支)触发构建。我需要的是一个动态设置,该设置适用于设置触发器后创建的分支,而不是线程中建议的端点(/job/project-name/job-name/build应该是/job/job-name/project-name/build,因为项目是从作业中的分支创建的),我发现要使用的端点是/job/job-name/build. 为此,您必须创建一个具有 API 令牌的用户(转到管理 Jenkins -> 管理用户 -> 齿轮图标 -> 显示 API 令牌),并在您的请求中将其用作用户名和密码。

对于那些习惯使用 Jenkins REST API 的人来说,该解决方案可能很明显,但是当您不熟悉多分支管道项目和 REST API 时,明确说明并没有什么坏处。

于 2016-09-14T12:11:57.443 回答
6

我无法获得接受的答案中描述的 API 令牌,因为即使我以管理员身份登录,也没有名为“管理用户”的链接。相反,我得到了Jenkins Wiki中描述的令牌:

API 令牌在您的个人配置页面中可用。在每个页面的右上角单击您的姓名,然后单击“配置”以查看您的 API 令牌

获得令牌后,以下 curl 请求将触发多分支管道的新构建(替换以 开头的占位符$

curl -X POST -u "$jenkins_username:$api_token" "http://$jenkins_url/job/$my-pipeline/job/$branch_name/build?token=BUILD_TOKEN"

备注

  1. 如果管道或分支名称中包含特殊字符,则需要对其进行编码;例如,/变成%252F
  2. token查询参数是可选的。
  3. 此答案已在 Jenkins v2.6 中得到验证。
于 2018-03-02T00:37:34.690 回答
4

在不禁用跨站请求伪造 (CSRF) 保护的情况下,您可以使用的命令是

crumb=$(curl -s 'http://USERNAME:API_TOKEN@JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -X POST -H "$crumb" "http://USERNAME:API_TOKEN@JENKINS_URL/job/JOB_NAME/build"

用适当的值替换大写字母。

于 2017-12-22T09:11:08.463 回答
0

我最近刚刚克服了这个障碍,想​​分享我的笔记。

在我的配置(Jenkins 2.60.2)中,我无法启用远程触发构建(例如,从脚本)选项,因为我只能“查看配置”。这阻止了我通过向端点 (/job/project-name/job/job-name/build) 发出 HTTP GET 来触发管道。

但是,我发现我总是可以通过向终点发出 HTTP POST 来触发。

您必须在请求中提供有效的碎屑或禁用配置全局安全性中的“防止跨站点请求伪造攻击”选项。

问候,

于 2017-10-13T16:22:18.587 回答