jenkins - 如何在不使用 buildWithParameters 的情况下调用 Jenkins 作业时在 curl 中传递参数
问题描述
我的 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 的 Jenkinsfile 是:
node('LABEL_NAME') {
stage('Trigger Testlauncher') {
if("${PLATFORM}" == "pf-1")
{
<Take some action>
}
else if("${PROJECT}" == "Dummy1")
{
< Take some action>
}
else
{
<Take something>
}
}
}
解决方案
我的 Jenkins 管道作业没有参数化,但是在从管道脚本调用作业时,我可以提供在当前作业中使用的参数。
为了确认我理解正确,即使 DS_JOB1 作业未参数化,您的管道脚本也能够“成功”调用 DS_JOB1 传递参数?
你使用的是什么版本的詹金斯?我在 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"}]}'
推荐阅读
- python - Python网络抓取日期时间并替换url中的字符串日期
- image-processing - 有没有办法在实时中将图像叠加在一个人身上?
- python - 为每个股票数据框使用 for 循环创建累积回报列时出错
- c++ - 有没有办法降低程序的时间复杂度?
- java - 如何使用 XML 配置使用 SimpleTriggerFactoryBean 将 repeatInterval 设置为 24 小时
- node.js - 运行“npm start”时无法旁加载 Office 加载项
- c++ - c ++ opengl我如何制作着色器文件并在主cpp中使用它
- html - 如何拥有一系列不同的交替颜色
- jquery - 获取当前模式弹出窗口的值
- java - 向 OpenJDK 源代码添加本机方法