如何远程触发Jenkins多分支流水线项目构建?

21

标题已经说得很清楚了。如何从远程git仓库触发Jenkins多分支流水线项目的构建?

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

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的新手来说,详细说明并不会有害。


谢谢您添加这个,这个帮了我很多,今天早上 :-) 不过在Github Webhook部分,我确实遇到了“无效的HTTP响应302”。 - Richlewis
1
对于构建参数,这个对我有用。在大写字母中应该替换的内容是: http:// SERVER_URL/job/MULTIBRANCH_NAME/job/BRANCH_NAME/buildWithParameters?token=USER_TOKEN&PARAM1=VALUE1 - AFP_555

7
我无法像接受的答案中描述的那样获取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中验证。

这对我有用。但请记住,如果您不是Jenkins服务器上唯一的用户,则应为此任务创建一个特定的用户。不要为构建使用您的个人令牌,因为将来可能会有其他人需要维护它。 - andrew lorien
1
@andrewlorien 当然,你也可以拥有一个“服务账户”。 - Abhijit Sarkar
1
我该如何进行参数化? - Carlos Andres
@CarlosAndres 发布一个新问题,不要在这个问题上跟风。 - Abhijit Sarkar

5

如果不禁用跨站请求伪造(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"

将大写字母替换为相应的值。


0

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

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

然而,我发现我总是可以通过向端点发出HTTP POST来触发。

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

此致


1
@MattFriedman作者建议禁用CSRF,这样就不需要crumb,但这并不是正确的方法。 - lorem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接