Jenkins管道触发作业并在后期操作中获得可用结果
我有一个可以触发另一项工作的管道。我想得到触发作业的结果,并在后期操作中使用它。我正在这样做:Jenkins管道触发作业并在后期操作中获得可用结果,jenkins,jenkins-pipeline,jenkins-plugins,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Plugins,Jenkins Groovy,我有一个可以触发另一项工作的管道。我想得到触发作业的结果,并在后期操作中使用它。我正在这样做: stage('Stage 1') { steps{ script { echo "Trigger another job" jobResult = build job:
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()
}
}
}
}
当触发的作业成功时,一切正常,但当作业失败时,我得到一个错误:
执行always post条件时出错:
groovy.lang.MissingPropertyException:没有这样的属性:类的jobResult:groovy.lang.Binding
如何解决这个问题?您可以声明一个全局变量并设置该值,以便在任何地方都可以访问它。您的问题是
jobResult
不在后期阶段的范围内
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 将返回一个包含大量信息的jsonobject,其中一个是结果
您也可以对lastBuild、lastStableBuild、lastSuccessfulBuild、lastFailedBuild、lastUnstableBuild、lastUnsuccessfulBuild、lastCompletedBuild执行此操作。仅适用于像我这样不知道全局变量应该声明在何处的人,全局变量应该在管道{}标签之前声明,而不是直接在stage()之前声明是,你完全正确。也许我应该加上,对不起