Trigger parameterized build with curl


SERVER=http://jenkins.马哥私房菜.com:8080

curl -n -X POST $SERVER'/job/job_name/buildWithParameters?token=马哥私房菜&BUILD_TYPE=参数值'

这个是触发某个带参数的job
注意

  • 需要是post请求,使用-X post来表示。
  • 账号密码 写到家目录下面的.netrc 文件里面,使用curl的参数-n。
  • 注意多个参数使用&来分割的,注意在bash中执行要带上单引号,不然 & 会被bash解析了,bash中这个是表示让命令后台执行。特别注意。
$ cat ~/.netrc -n                                                                                                                           [mamh@10.0.63.43 ] 18-01-19 14:11  /home/mamh
     1	machine jenkins.马哥私房菜.com
     2	login 马哥私房菜
     3	password https://shop592330910.taobao.com/

Trigger parameterized build with curl and crumb

SERVER=http://jenkins.马哥私房菜:8080
CRUMB=$(curl -n $SERVER/crumbIssuer/api/xml?xpath=concat\(//crumbRequestField,%22:%22,//crumb\))
curl -n -X POST  -H "$CRUMB" $SERVER'/job/buildfarm_01/buildWithParameters?token=马哥私房菜&BUILD_TYPE=xxx'

报错的一个页面:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /job/buildfarm_01/buildWithParameters. Reason:
<pre>    

No valid crumb was included in the request

</pre>

</p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>

</body>
</html>

“No valid crumb was included in the request” 错误就是需要加入crumb的。

出现这个错误是因为你的jenkins中 Configure Global Security下面配置了防止跨站点访问时候需要加上crumb的。
CSRF Protection 下面有个 ‘防止跨站点请求伪造’。

当然你也可以把这个勾选去掉,就不用加crumb了。

关闭jenkins的 CSRF

在执行的时候发现 报错了,

下面我来解决这个问题,在jenkins2上,这个没有 取消的 按钮了。在网上搜了一堆都是 旧版本jenkins的解决办法。根据官网描述,Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。

虽然删除了禁用csrf保护功能,增加了安全性,但是在一些结合Gitlab、Spinnaker等等工具进行持续集成过程中就增加了一些认证环节,若没有进行相关配置,得到的一定是403的报错。因为集成服务都是在内网操作,为删繁就简,笔者便考虑关闭 CSRF 保护功能,于是乎,对此展开了摸索。
在这里插入图片描述
下面是新版本jenkins上的解决办法,临时解决的。因为取消这个,估计会导致安全风险。在master节点执行groovy脚本,如下。
在这里插入图片描述
关闭之后就是下面这样了。

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐