catchError块中的Jenkins变量-没有这样的属性


无法从catchError块外部访问buildResults变量。知道我该怎么访问它吗?build job可能会被中止,所以我希望脚本块的其余部分继续,但我得到了错误groovy.lang.MissingPropertyException: No such property: buildResults for class: groovy.lang.Binding
catchError {
buildResults = build job: 'Test', parameters: [string(name: 'BRANCH', value:'main')], wait: true                
}

sh """ curl -u 123:123 -X POST 
-H "Content-Type: application/json" 
--url 'http://10.10.10.10:8080/rest/api/2/issue/${env.TASK_KEY}/comment' 
-d '{ "body": "[Test] Full Pipeline result is: ${buildResults.getResult()}"}'
"""     

如果您的下游作业将被中止,构建函数将抛出异常,这意味着buildResults参数将不会被设置,并且您将得到MissingPropertyException错误
要克服此问题,您可以在调用build函数之前,使用默认值定义buildResults参数,这将使其在不执行构建函数的情况下可用:

def buildResults = ''
catchError {
buildResults = build job: 'Test', parameters: [string(name: 'BRANCH', value:'main')], wait: true                
}

此外,您还必须更新生成结果的使用情况,因为如果下游中止,生成结果可能不包含结果对象,在这种情况下,buildResults.getResult()将失败
您可以使用类似的方法来解决它:

def buildResults = ''
catchError {
buildResults = build job: 'Test', parameters: [string(name: 'BRANCH', value:'main')], wait: true                
}
def results = buildResults ? buildResults.getResult() : "Downstream job did not return results"
sh """curl -u 123:123 -X POST 
-H "Content-Type: application/json" 
--url 'http://10.10.10.10:8080/rest/api/2/issue/${env.TASK_KEY}/comment' 
-d '{ "body": "[Test] Full Pipeline result is: ${results}"}'
"""

最新更新