Jenkins 管道触发作业并在 post 操作中获取可用结果
Jenkins pipeline trigger job and get results available in post operation
我有一个带有触发另一个作业的阶段的管道。我想获取触发作业的结果并将其用于 post 操作。我正在这样做:
stage('Stage 1') {
steps{
script {
echo "Trigger another job"
jobResult = build job:
'urltojob',
parameters: [
],
wait: true,
propagate: true;
}
}
post {
always {
script {
echo jobResult.getResult()
echo jobResult.getAbsoluteUrl()
echo jobResult.getDurationString()
}
}
}
}
当触发的作业成功时,一切正常,但当作业失败时,我得到一个错误:
执行始终post条件时出错:
groovy.lang.MissingPropertyException:没有 属性:class 的工作结果:groovy.lang.Binding
我该如何解决?
您可以声明一个全局变量并设置值,这样您就可以在任何地方访问它。您的问题是 jobResult
不存在于您的 post-阶段的范围内。
def result // this is our global variable
pipeline {
...
stage('Stage 1') {
steps{
script {
echo "Trigger another job"
result = build job:
'urltojob',
parameters: [
],
wait: true,
propagate: true;
}
}
post {
always {
script {
echo result.getResult()
echo result.getAbsoluteUrl()
echo result.getDurationString()
}
}
}
}
如果您只想获得结果并知道您正在执行的确切工作,您将通过 jenkins api.
获得该信息
示例 GET {baseUrl}:{port}/job/{jobName}/job/{branch}/lastBuild/api/json?pretty=true
将 return 一个包含大量信息的 jsonobject,其中之一就是结果。
您也可以对 lastBuild、lastStableBuild、lastSuccessfulBuild、lastFailedBuild、lastUnstableBuild、lastUnsuccessfulBuild、lastCompletedBuild 执行此操作。
我有一个带有触发另一个作业的阶段的管道。我想获取触发作业的结果并将其用于 post 操作。我正在这样做:
stage('Stage 1') {
steps{
script {
echo "Trigger another job"
jobResult = build job:
'urltojob',
parameters: [
],
wait: true,
propagate: true;
}
}
post {
always {
script {
echo jobResult.getResult()
echo jobResult.getAbsoluteUrl()
echo jobResult.getDurationString()
}
}
}
}
当触发的作业成功时,一切正常,但当作业失败时,我得到一个错误: 执行始终post条件时出错: groovy.lang.MissingPropertyException:没有 属性:class 的工作结果:groovy.lang.Binding 我该如何解决?
您可以声明一个全局变量并设置值,这样您就可以在任何地方访问它。您的问题是 jobResult
不存在于您的 post-阶段的范围内。
def result // this is our global variable
pipeline {
...
stage('Stage 1') {
steps{
script {
echo "Trigger another job"
result = build job:
'urltojob',
parameters: [
],
wait: true,
propagate: true;
}
}
post {
always {
script {
echo result.getResult()
echo result.getAbsoluteUrl()
echo result.getDurationString()
}
}
}
}
如果您只想获得结果并知道您正在执行的确切工作,您将通过 jenkins api.
获得该信息示例 GET {baseUrl}:{port}/job/{jobName}/job/{branch}/lastBuild/api/json?pretty=true 将 return 一个包含大量信息的 jsonobject,其中之一就是结果。
您也可以对 lastBuild、lastStableBuild、lastSuccessfulBuild、lastFailedBuild、lastUnstableBuild、lastUnsuccessfulBuild、lastCompletedBuild 执行此操作。