Batch file 使用批处理脚本启动Jenkins构建
我正在与Jenkins build服务器合作,为FPGA运行合成/模拟。 现在我有夜间构建,可以在Jenkins浏览器界面中手动启动构建 我的问题是: 是否可以在不使用浏览器界面的情况下使用批处理脚本启动作业生成?Batch file 使用批处理脚本启动Jenkins构建,batch-file,jenkins,continuous-integration,Batch File,Jenkins,Continuous Integration,我正在与Jenkins build服务器合作,为FPGA运行合成/模拟。 现在我有夜间构建,可以在Jenkins浏览器界面中手动启动构建 我的问题是: 是否可以在不使用浏览器界面的情况下使用批处理脚本启动作业生成? (我在Windows 7 64位上运行Jenkins。)下面是一个使用curl命令的示例(用于带有参数的作业): 以及没有参数的作业: curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/Y
(我在Windows 7 64位上运行Jenkins。)下面是一个使用curl命令的示例(用于带有参数的作业): 以及没有参数的作业:
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/buildWithParameters?PARAM1=value1&PARAM2=value
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/build
如果您不想使用您的用户/密码,您可以为您的Jenkins用户生成API令牌:
并在curl命令中使用此标记:
curl -X POST http://YOUR_JENKINS_URL/job/YOUR_JOB/build?TOKEN=YOUR_API_TOKEN
您可以使用配置的令牌(而不是用户名/密码)触发Jenkins作业,这将允许您在不公开自己的凭据的情况下共享触发脚本
curl -I https://${JENKINS_URL}/job/tmp/job/dummy-test/build?token=MY_TOKEN
-I
参数告诉curl
打印响应的头部,您可以使用它来确定结果状态。如果成功,Jenkins回复HTTP 201
$ curl -I https://<JENKINS_URL>/job/tmp/job/dummy-test/build\?token\=MY_TOKEN
HTTP/1.1 201 Created
Cache-Control: public
Content-Length: 0
Date: Mon, 11 Apr 2016 12:47:26 GMT
Location: https://<JENKINS_URL>/queue/item/1707/
Pragma: public
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
Connection: keep-alive
$curl-Ihttps:///job/tmp/job/dummy-test/build\?令牌\=我的令牌
HTTP/1.1201已创建
缓存控制:公共
内容长度:0
日期:2016年4月11日星期一12:47:26 GMT
地点:https:///queue/item/1707/
布拉格语:公共
服务器:ApacheCoote/1.1
X-Content-Type-Options:nosniff
连接:保持活力
当我试图通过curl触发我的作业时,结果总是出现“未授权”错误
后来我发现这是因为我完全禁用了服务器上的匿名访问。解决方案是安装以下插件:
来源:您可以使用带有-I选项的curl命令来执行此操作。为jenkins作业创建API令牌,并使用它触发作业。您也可以使用jenkins用户密码进行此操作 命令将是
curl -I -u auto:<user_api_token> http://<jenkins_Server>/job/test/build?token=wefiytgwiefiweihfqweiodf
curl-I-u自动:http:///job/test/build?token=wefiytgwiefiweihfqweiodf
结果将是
更多信息
在新Jenkins管道中的“构建触发器”下,选中“远程触发构建”(例如,从脚本)复选框。然后给Jenkins一个触发构建时需要的令牌
未授权
错误
远程触发构建的一个问题是,如果您正确设置了Jenkins并禁用了匿名用户访问,那么当您尝试从脚本触发构建时,将出现未授权错误(正如@keocra指出的)。您现在有两个选项:
在触发生成时传递用户名和密码。这意味着您的脚本将需要包含用户名和密码,这意味着每个可以阅读您的脚本的人都将拥有用户名和密码,这几乎与匿名访问一样糟糕
使用。此插件允许您使用远程触发构建功能,而无需用户名和密码。您所需要的只是之前生成的令牌
触发构建
要远程触发构建,请运行
curl JENKINS_URL/buildByToken/build?job=JobFoo&token=MyToken
其中,JENKINS\u URL
是您的JENKINS实例的URL,JobFoo
是您的作业名称,MyToken
是您在Trigger bulids下远程输入的令牌
当然,您不需要使用curl
;您还可以使用wget
或任何其他可以发出HTTP请求的程序。我在谷歌上搜索了许多地址,可以在这里找到工作结果:
#!/bin/bash
TOKEN='jenkins-user-token'
USER='my-username'
SERVER="http://your.server.address"
#jenkins job parameters
PARAMF=$1
SECONDPARAM=$2
# retrieve the crumb that we need to pass in the header
CRUMBS=$(curl -s -X GET -u $USER:$TOKEN ${SERVER}/crumbIssuer/api/json | jq -c '. | .crumb ')
curl --user $USER:$TOKEN -H "Jenkins-Crumb:${CRUMBS}" -X POST "${SERVER}/view/MyView/job/JobName/buildWithParameters?TOKEN=${TOKEN}&PARAMETERONE=${PARAMF}&PARAMETERTWO=${SECONDPARAM}"
步骤脚本执行以下操作:
拿面包屑
调用jenkins以执行具有多个参数的作业
您可以将此脚本保存为jenkins-job-cli.sh并调用它
chmod +x jenkins-job-cli.sh
./jenkins-job-cli.sh first-parameter second-parameter
希望这有帮助
干杯
Leslie正如下面@tony19所建议的,您还可以为您的用户生成一个API令牌(如果您不想使用用户/密码)。我已经更新了我的答案。很高兴知道它解决了您的问题:)也可以传递带有参数的SVN Url吗?最好通过命令行告诉Jenkins运行一个特定的作业(在我的例子中是FPGA合成)并检查SVN的所有项目。我在Jenkins中的Python脚本能够在workspace文件夹中运行用于FPGA合成的每个签出操作,但我想让我的用户能够简单地使用单个批和他们的特定签出来启动作业。如果每个SVN url有一个参数,则可以使用命令行传递它们(可能用双引号保护).这可能是一个机会,谢谢!你知道有没有其他插件或命令可以传递给Jenkins?传递参数是解决这一问题的好方法吗?如果您愿意,我已经创建了一个讨论室:crumbisuer/api
由于CSRF安全性改进而不适用于jenkins 2.176+。更多详细信息请参见: