使用批处理脚本启动Jenkins构建

jgzswidk  于 2023-02-18  发布在  Jenkins
关注(0)|答案(7)|浏览(166)

我正在使用Jenkins构建服务器来运行FPGA的合成/模拟。现在我有夜间构建,可以在Jenkins浏览器界面中手动启动构建。
我的问题是:

    • 是否可以在不使用浏览器界面的情况下使用批处理脚本启动作业构建?**

(我在Windows 7 64位上运行Jenkins。)

vfwfrxfs

vfwfrxfs1#

下面是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
wz8daaqr

wz8daaqr2#

您可以使用配置的令牌而不是用户名/密码触发Jenkins作业,这将允许您共享触发器脚本,而不会暴露您自己的凭据。
1.转到作业的配置。
1.向下滚动到构建触发器,选中**远程触发构建(例如,从脚本)**复选框,然后输入身份验证令牌(例如,“MY_TOKEN”)。

1.根据您的构建是否具有参数,复制身份验证令牌字段下方的URL之一。
然后在curl命令中使用该URL触发构建。例如:

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
hfsqlsce

hfsqlsce3#

当我试图通过curl触发我的工作时,我最终总是得到“未授权”的错误。
后来我发现这是因为我在服务器上完全禁用了匿名访问,解决办法是安装以下插件:https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
来源:https://issues.jenkins-ci.org/browse/JENKINS-17764

pnwntuvh

pnwntuvh4#

您可以使用curl命令和-I选项来执行此操作。为jenkins作业创建API内标识,并使用它来触发作业。您也可以使用jenkins用户密码来执行此操作。

命令将是

curl -I -u auto:<user_api_token> http://<jenkins_Server>/job/test/build?token=wefiytgwiefiweihfqweiodf

结果将为

有关详细信息,请访问https://serverfault.com/questions/888176/how-to-trigger-jenkins-job-via-curl-command-remotely/888248#888248

vh0rcniy

vh0rcniy5#

在新的Jenkins管道中,在 * 构建触发器 * 下,选中复选框 * 远程触发构建(例如,从脚本)*。然后为Jenkins提供触发构建时所需的令牌。

Not authorized错误

远程触发构建的一个问题是,如果您设置了Jenkins权限并禁用了匿名用户访问,那么当您尝试从脚本触发构建时,您将得到Not authorized错误(正如@keocra指出的)。
1.当你触发构建的时候,沿着传递用户名和密码,这意味着你的脚本需要包含用户名和密码,也就是说每个能读到你脚本的人都有用户名和密码,这几乎和匿名访问一样糟糕。
1.使用Build Token Root Plugin。此插件允许您使用 * 远程触发构建 * 功能,而无需用户名和密码。您所需要的只是之前生成的令牌。

触发构建

若要远程触发生成,请运行

curl JENKINS_URL/buildByToken/build?job=JobFoo&token=MyToken

其中JENKINS_URL是Jenkins示例的URL,JobFoo是作业的名称,MyToken是您在 * 远程触发bulids * 下输入的令牌。
当然,您不需要使用curl;您还可以使用wget或任何其他可以发出HTTP请求的程序。

ojsjcaue

ojsjcaue6#

我在谷歌上搜索了许多地址,工作结果可以在这里找到:

#!/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}"

步骤脚本执行以下操作:
1.得到面包屑
1.调用jenkins来执行带有多个参数的作业
您可以将此脚本另存为www.example.com并将其称为jenkins-job-cli.sh and call it

chmod +x jenkins-job-cli.sh
./jenkins-job-cli.sh first-parameter second-parameter

希望这能有所帮助。
干杯,
莱斯利

c9qzyr3d

c9qzyr3d7#

    • 快进到2023年**

您需要传递2个令牌才能从脚本/bash远程执行作业。
您需要:

  1. apiToken用于验证您的身份。此值从JENKINS_URL/me/configure创建。另请查看here以获取文档
    1.启用"远程触发生成"时创建的另一个作业身份验证令牌。
    下面是一个例子来执行作业与2个参数,你可以调整得到你的完成。
PARAM1_VALUE=<param1_value>
PARAM2_VALUE=<param2_vale>
USERNAME=dummy_user_name
JENKINS_URL="http://10.xxx.x.xxx:8080"
JOB_TOKEN="<value>" # you create this token when you enable Job>Configure>Build Triggers>Trigger builds remotely
LOGIN_API_TOKEN="<value>" #get this value from JENKINS_URL/me/configure 

curl -L --user $USERNAME:$LOGIN_API_TOKEN "$JENKINS_URL/job/JobName/buildWithParameters?token=$JOB_TOKEN&param1_name=$PARAM1_VALUE&param2_name=$PARAM2_VALUE"

相关问题