Jenkins 提供了远程调用API,其中就包括了构建的API。

Jenkins的远程调用构建API 分两种,一种是构建时不需要带参数 JENKINS_URL/job/JOBNAME/build ,一种是构建时需要带参数 JENKINS_URL/job/JOBNAME/buildWithParameters。

不需要带参数就不演示了,带参数的可以通过 使用 Post 或者 Get 请求

Get 请求方式

想通过Get 得先去 Job上设置个token ,有了token后直接把token作为get的请求参数,这样job就允许带有该token的请求通过,否则直接请求通常会报 403 错误。
image.png

我们见到通过Postman 简单模拟调用下Get 请求,其中 CaseFile等是为参数化构建的参数, delay 为是否立即构建或者 pending 状态:
image.png

Post 请求方式

get 请求方式固然是简单,但是会有几个问题

  1. 如果你的参数很多又非常大,可能超过URL 长度的限制,就如我需要通过A平台把 CaseID传给Jenkins 去执行,CaseID 上K个,这时Get就满足不了;
  2. 如果参数的value 是json时,往往需要用 document.write(encodeURIComponent() 方法来转义特殊字符

所以这时可能得考虑用Post的请求方式, 但是用Post有个坑,使用类似Get的token来授权是过不去一直报403,可能是Jenkins设置了安全矩阵的原因,那这时我们可能需要用到的就不是简单的 job设置token,而是需要用户生成一个 API Token , 进入系统管理->用户管理,点击用户的修改,去生成一个API Token 。
image.png

有了API Token 后我们请求的地址也将做个变化
http://USER_NAME:API_Token@JENKINS_URL/job/JOB_NAME/buildWithParameters,然后使用Post请求方式,并带上对应的参数,例如下Postman 所示
image.png
Post 请求可以通过token方式调用,但是需要注意的是,需要在jenkins的全局安全配置中,关闭image.png
但Jenkins 2.204.6版本后,全局安全配置去掉了该UI配置选项,这时可以通过Groovy脚本的方式来实现。
image.png

打开Jenkins 系统管理的执行命令行,执行如下groovy脚本关闭:

  1. import jenkins.model.Jenkins
  2. def instance = Jenkins.instance
  3. instance.setCrumbIssuer(null)

如果后续需要打开,则执行如下脚本:

import hudson.security.csrf.DefaultCrumbIssuer
import jenkins.model.Jenkins

def jenkins = Jenkins.instance;
jenkins.setCrumbIssuer(new DefaultCrumbIssuer(false)); 
jenkins.save();