如何报告声明式管道失败的阶段?在fail块中,我想获取failureStage.name并将其报告(最终报告为松弛)。
pipeline { agent { label 'master'} stages { stage('Ok') { steps { echo 'do thing' } } stage('NotOK') { steps { sh 'make fail' } } } post { always { echo 'ok' } failure { echo 'Failed during Which Stage?' } } }
PipelineVisitor是一种很好的方法。但是,如果您只想查看错误,那么利用FlowGraphTable可能会更好。
FlowGraphTable
以下内容提供了每个失败步骤的映射列表,并且还遍历了下游作业。我发现它非常有用。
您将要使用共享库来避免安全沙箱警告/批准
List<Map> getStepResults() { def result = [] WorkflowRun build = currentBuild() FlowGraphTable t = new FlowGraphTable(build.execution) t.build() for (def row in t.rows) { if (row.node.error) { def nodeInfo = [ 'name': "${row.node.displayName}", 'url': "${env.JENKINS_URL}${row.node.url}", 'error': "${row.node.error.error}", 'downstream': [:] ] if (row.node.getAction(LogStorageAction)) { nodeInfo.url += 'log/' } for (def entry in getDownStreamJobAndBuildNumber(row.node)) { nodeInfo.downstream["${entry.key}-${entry.value}"] = getStepResults(entry.key, entry.value) } result << nodeInfo } } log(result) return result } Map getDownStreamJobAndBuildNumber(def node) { Map downStreamJobsAndBuilds = [:] for (def action in node.getActions(NodeDownstreamBuildAction)) { def result = (action.link =~ /.*\/(?!\/)(.*)\/runs\/(.*)\//).findAll() if (result) { downStreamJobsAndBuilds[result[0][1]] = result[0][2] } } return downStreamJobsAndBuilds }