我正在远程调用 Jenkins 任务,使用的命令是:
wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT
这里调用了Test-Jenkins
作业,并且我使用了DOIT
作为安全令牌。
现在我需要向该作业的build.xml文件传递一些参数,即Test-Jenkins
。
我还没有弄清楚如何传递这些变量。
我正在远程调用 Jenkins 任务,使用的命令是:
wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT
这里调用了Test-Jenkins
作业,并且我使用了DOIT
作为安全令牌。
现在我需要向该作业的build.xml文件传递一些参数,即Test-Jenkins
。
我还没有弄清楚如何传递这些变量。
请查看Jenkins文档:可参数化构建
以下是您感兴趣的那一行:
http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
补充一下这个问题,我发现您不必使用/buildWithParameters
端点。
在我的场景中,我有一个脚本触发Jenkins在部署后运行测试。其中一些测试需要有关部署的额外信息才能正确工作。
如果我尝试在不期望参数的作业上使用/buildWithParameters
,该作业将无法运行。我不想编辑每个作业以要求虚假参数只是为了使作业运行。
相反,我发现可以像这样传递参数:
curl -X POST --data-urlencode "token=${TOKEN}" --data-urlencode json='{"parameter": [{"name": "myParam", "value": "TEST"}]}' https://jenkins.corp/job/$JENKINS_JOB/build
使用这个json=...
,每次调用时它将传递参数myParam
的值为TEST
给作业。但是,即使作业不期望参数myParam
,Jenkins作业仍然会运行。唯一不涵盖的情况是,如果作业有一个在json
中未传递的参数。即使作业为参数设置了默认值,也将无法运行作业。在这种情况下, 当您调用/build
时,将遇到以下错误消息/堆栈跟踪:
java.lang.IllegalArgumentException: No such parameter definition: myParam
我意识到这个答案已经迟了几年,但我希望这可能对其他人有用!
注意:我正在使用Jenkins v2.163POST
请求发送到 buildWithParameters
而不是 build
?根据 CloudBees 的文章,如果使用前者,则会使用默认值。这是文章链接:https://support.cloudbees.com/hc/en-us/articles/204279870-How-to-submit-a-parameterized-build-request-using-CURL-that-used-the-default-parameter-values- - haridsvbuildWithParameters
将在未设置参数的作业上失败,而 build
不会在任何作业上失败。 - Kyle Pittman您可以使用Jenkinsfile轻松尝试。创建一个Jenkins作业,并使用以下流水线脚本。
pipeline {
agent any
parameters {
booleanParam(defaultValue: true, description: '', name: 'userFlag')
}
stages {
stage('Trigger') {
steps {
script {
println("triggering the pipeline from a rest call...")
}
}
}
stage("foo") {
steps {
echo "flag: ${params.userFlag}"
}
}
}
}
首先需要手动构建一次,以便进行配置,之后只需创建一个http POST请求到Jenkins作业即可。
格式如下:http://server/job/myjob/buildWithParameters?PARAMETER=Value
curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST
2023年更新
Jenkins现在已经更改了身份验证方式。
您需要传递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 -g -L --user $USERNAME:$LOGIN_API_TOKEN "$JENKINS_URL/job/JobName/buildWithParameters?token=$JOB_TOKEN¶m1_name=$PARAM1_VALUE¶m2_name=$PARAM2_VALUE"
-g或--globoff可避免在使用curl传递带有“'”或括号的参数时出现问题
curl -X POST -i -u "auto_user":"xxxauthentication_tokenxxx" "JENKINS_URL/view/tests/job/helloworld/buildWithParameters?param1=162¶m2=store"
curl -X POST -u Admin:<api_token> http://localhost:8080/job/<job_name>/buildWithParameters\?ColorValue\=sddddsd
curl -H "Jenkins-Crumb: <your_crumb_data>" -u "<username>:<password>" "http://<your_jenkins_url>?buildWithParameters?token=<your_remote_api_name>?<parameterA>=<val_parameter_A>&<parameterB>=<val_parameterB>"
您可以根据需要更改以下参数:
<your_crumb_data>
<username>
<password>
<your_jenkins_url>
<your_remote_api_name>
<parameterA>
<parameterB>
<val_parameter_A>
<val_parameter_B>
注意:使用双引号可能很关键。请注意。
JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME¶m_name1=value¶m_name1=value
JENKINS_URL
(可以)= https://<您的域名或服务器地址>
可以使用配置选项卡创建TOKE_NAME