我的Jenkins管道作业没有参数化,但是从管道脚本调用该作业时,我可以提供当前作业中正在使用的参数。
我想使用curl命令从外部传递这些参数。我尝试了以下选项,但尚未成功。
curl -i -X POST 'https://<USERNAME>:<API_TOKEN>@JENKINS_URL/job/DS_JOB1/build?token=remotejob' --data-urlencode json='{"parameter": [{"PLATFORM":"Value1", "PROJECT": "Project_Type"}]}'
这不起作用,因为我无法在调用的作业中获取参数。
curl -i -X POST 'https://<USERNAME>:<API_TOKEN>@JENKINS_URL/job/DS_JOB1/buildWithParameters?token=remotejob&TestProject=NewCurlTesting'
此调用失败,因为我的当前作业DS_JOB1没有参数化。
我想知道是否有人已经使用过此类工作并解决了问题。
举个例子,我提供了2个简单的jenkinsfiles,在jenkins管道实现方式中效果很好。
node('LABEL_NAME') {
timestamps {
try {
stage("Calling Downstream Job") {
job_downstream = build(job: "DS_JOB1",
parameters: [[$class: 'StringParameterValue', name: 'PLATFORM', value: "pf-1"],
[$class: 'StringParameterValue', name: 'PROJECT', value: "Dummy1"]],
propagate: false,
wait: true)
if(job_downstream?.result.toString() == 'FAILURE') {
currentBuild.result = job_downstream?.result.toString()
println("Downstream job for PLATFORM: ${PLATFORM}")
}
}
}
catch (err) {
println(err)
currentBuild.result = 'FAILURE'
}
finally {
stage('Post build actions') {
// Mailer notification
step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: '<GroupMail_ID>', sendToIndividuals: false])
deleteDir()
}
}
}
}
从上面的作业调用的作业DS_JOB1的詹金文件是:
node('LABEL_NAME') {
stage('Trigger Testlauncher') {
if("${PLATFORM}" == "pf-1")
{
<Take some action>
}
else if("${PROJECT}" == "Dummy1")
{
< Take some action>
}
else
{
<Take something>
}
}
}
答案 0 :(得分:0)
我的Jenkins管道作业未设置参数,但是从管道脚本调用该作业时,我可以提供在当前作业中使用的参数。
为确认我理解正确,即使未对DS_JOB1作业进行参数化,您的管道脚本也能够“成功”调用传递DS_JOB1参数的参数?
您使用的是哪个版本的Jenkins?我很快就在Jenkins 2.146版上进行了测试,但由于无法识别下游作业中的PLATFORM属性,因此无法正常运行。
您是否可以参数化DS_JOB1作业,然后应该可以使用curl调用
curl -X POST JENKINS_URL/job/JOB_NAME/build \
--user USER:TOKEN \
--data-urlencode json='{"parameter": [{"PLATFORM":"Value1", "PROJECT": "Project_Type"}]}'
答案 1 :(得分:0)
在DS_JOB1 Jenkinsfile中添加了以下代码。
properties(
[
parameters(
[
string(defaultValue: 'PF-1', description: 'Project repo name to checkout for static analysis', name: 'PLATFORM'),
string(defaultValue: 'Dummy1', description: 'Project branch to be used', name: 'PROJECT')
])
])
添加此命令后,我可以使用以下curl命令运行作业。
curl -i -X POST 'https://<user>:<Token>@JENKINS_URL/job/DS_JOB1/buildWithParameters?token=remotejob&PLATFORM=NewCurlTesting&PROJECT=Test1'
如果有任何线索而不更改“ DS_JOB1”,请分享。