Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jenkins-列出每个并行分支的阶段_Jenkins_Jenkins Plugins_Jenkins Groovy_Jenkins Blueocean - Fatal编程技术网

jenkins-列出每个并行分支的阶段

jenkins-列出每个并行分支的阶段,jenkins,jenkins-plugins,jenkins-groovy,jenkins-blueocean,Jenkins,Jenkins Plugins,Jenkins Groovy,Jenkins Blueocean,我得到了列出管道所有分支和阶段的代码 def列表getBranchResults(){ def visitor=new PipelineNodeGraphVisitor(currentBuild.rawBuild) 回显“${visitor}” def branchs=visitor.pipelineNodes.findAll{ it.type==FlowNodeWrapper.NodeType.PARALLEL } def stages=visitor.pipelineNodes.findAl

我得到了列出管道所有分支和阶段的代码

def列表getBranchResults(){
def visitor=new PipelineNodeGraphVisitor(currentBuild.rawBuild)
回显“${visitor}”
def branchs=visitor.pipelineNodes.findAll{
it.type==FlowNodeWrapper.NodeType.PARALLEL
}
def stages=visitor.pipelineNodes.findAll{
it.type==FlowNodeWrapper.NodeType.STAGE
}
回显“${stages}”
def results=branchs.collect{
分行->[
id:branch.id,
displayName:branch.displayName,
结果:“${branch.status.result}”,]
}
回显“分支结果:\n”+结果。联接('\n')
}
def build_作业=[:]
def生成结果
构建作业['1']={
节点('dvp\U hal\U builder'){
阶段(‘A’){
“回声1”
}
阶段(‘B’){
“错误”
}
}
}
创建工作['2']={
节点('dvp\U hal\U builder'){
“回声2”
}
}
创建工作['3']={
节点('dvp\U hal\U builder'){
阶段(‘A’){
“回声3”
}
阶段(‘B’){
}
}
}
并行构建作业
getBranchResults()
我如何在这两者之间建立联系? 我想为每个分支打印它的阶段。我还想为每个分支打印失败的阶段(如果存在)

例如:

Branch results:
[id:15, displayName:1, result:SUCCESS]
Stage results for 1:
[id=55,displayName=A,type=STAGE]
[id=25,displayName=B,type=STAGE] - FAILURE

我们可以通过查询来关联分支和子阶段 对于每个节点。如果此列表包含分支ID,则我们有一个子阶段

我已经在下面的函数
getStageResultsForBranch()
中实现了这一点。它似乎与示例代码一起工作。如果阶段有嵌套的子阶段,它也会返回这些子阶段,这可能不是您想要的

示例代码:

import io.jenkins.blueocean.rest.impl.pipeline.PipelineNodeGraphVisitor
导入io.jenkins.blueocean.rest.impl.pipeline.FlowNodeWrapper
@非现金
def List getBranchResults(){
def visitor=new PipelineNodeGraphVisitor(currentBuild.rawBuild)
def branchs=visitor.pipelineNodes.findAll{
it.type==FlowNodeWrapper.NodeType.PARALLEL
}
def results=分支。收集{branch->[
id:branch.id,
displayName:branch.displayName,
结果:“${branch.status.result}”,
]}
返回结果
}
@非现金
def List GetStagerResultsForBranch(字符串branchId){
def visitor=new PipelineNodeGraphVisitor(currentBuild.rawBuild)
def childStages=visitor.pipelineNodes.findAll{stage->
stage.type==FlowNodeWrapper.NodeType.stage&&
stage.node.allEnclosingIds.contains(branchId)
}
def results=childStages.collect{stage->[
id:stage.id,
displayName:stage.displayName,
结果:“${stage.status.result}”,
]}
返回结果
}
节点{
def build_作业=[:]
def生成结果
构建作业['1']={
阶段('1.A'){
“回声1”
}
阶段('1.B'){
错误“一个错误”
}
}
创建工作['2']={
“回声2”
}
创建工作['3']={
阶段('3.A'){
“回声3”
}
阶段('3.B'){
}
}
试一试{
并行构建作业
}
最后{
阶段(‘最终’){
for(getBranchResults()中的BranchResults){
def stageResults=getStageResultsForBranch(branchRes.id)
echo“分支结果:$branchRes\n”+
“阶段结果:\n${stageResults.join('\n')}”
}
}
}
}
(我已删除生成作业节点以进行测试)

输出:

分支结果:[id:8,displayName:1,结果:FAILURE]
阶段结果:
[id:12,显示名称:1.A,结果:成功]
[id:29,显示名称:1.B,结果:失败]
分支结果:[id:9,displayName:2,结果:SUCCESS]
阶段结果:
分支结果:[id:10,displayName:3,结果:SUCCESS]
阶段结果:
[id:15,显示名称:3.A,结果:成功]
[id:21,displayName:3.B,结果:未构建]