如何远程触发 Jenkins 多分支管道项目构建?

How to remotely trigger Jenkins multibranch pipeline project build?

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

"Trigger builds remotely" 构建触发选项似乎不起作用,因为没有保存您设置的标记。

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

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

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

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

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

然而,我发现我总是可以通过 issue HTTP POST 触发到终点。

您必须在请求中提供有效的碎屑或禁用配置全局安全中的 "Prevent Cross Site Request Forgery exploits" 选项。

此致,

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

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

我无法获得已接受答案中所述的 API 令牌,因为即使我以管理员身份登录,也没有名为 "Manage Users" 的 link。相反,我得到了 Jenkins Wiki:

中描述的令牌

The API token is available in your personal configuration page. Click your name on the top right corner on every page, then click "Configure" to see your API token

获得令牌后,以下 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 中得到验证。