我正在使用以下方法远程调用Jenkins作业:
wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT
这里Test-Jenkins
job被调用,并且DOIT
是我使用过的安全令牌。
现在,我需要将一些参数传递给此作业的build.xml文件,即Test-Jenkins
。
我还没有弄清楚如何传递变量。
Answers:
请参阅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
每当进行调用时,它将带值的参数传递给作业。但是,即使Jenkins作业不需要参数,它仍将运行myParam
。
唯一无法解决的情况是,如果作业的参数未在 json
。即使作业为参数设置了默认值,也将无法运行该作业。在这种情况下,您将在调用时遇到以下错误消息/堆栈跟踪/build
:
java.lang.IllegalArgumentException: No such parameter definition: myParam
我知道这个答案已经晚了几年,但是我希望这对其他人可能是有用的信息!
POST
应该做buildWithParameters
而不是build
?根据cloudbees文章,如果使用前者,则将使用默认值。这是文章:support.cloudbees.com/hc/en-us/articles/…–
buildWithParameters
将在未参数化的作业上失败,而build
在任何作业上均不会失败。
要传递/使用变量,请首先在Jenkins的configure部分中创建参数。您使用的参数可以是文本,字符串,文件等类型。
创建它们之后,在所需的字段中使用变量引用。
例如:我已为Email-subject
和配置/创建了两个变量Email-recipentList
,并且已在EMail-ext
插件中使用了它们的引用(随附的屏幕截图)。
您可以简单地使用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}"
}
}
}
}
手动构建一次作业以对其进行配置,并按如下所示向Jenkins作业创建一个HTTP POST请求。
格式为 http://server/job/myjob/buildWithParameters?PARAMETER=Value
curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST
您可以使用以下查询远程触发Jenkins构建并传递参数。
JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME¶m_name1=value¶m_name1=value
JENKINS_URL
(可以)= https://<your domain name or server address>
TOKE_NAME
可以使用配置选项卡创建