我已经用时髦的方法开发了詹金斯shared library,它可以收集有关詹金斯工作的构建和阶段的信息。我是通过currentBuild变量完成的。
我可以正确地获得阶段持续时间,但是问题是,当管道执行内部具有 parallel 子阶段的阶段时,我想将阶段持续时间视为最大 >其子阶段的持续时间。我的操作方式使我可以看到每个阶段的持续时间,但是却不知道一个阶段是否在并行块中。
假设我们有这个管道
@Library('shared-library') _
pipeline {
agent any
stages {
stage("Parallel block") {
parallel {
stage("Stage 1") {
steps {
sleep(time:2, unit:"SECONDS")
echo "1"
}
}
stage("Stage 2") {
steps {
sleep(time:3, unit:"SECONDS")
echo "2"
}
}
stage("Stage 3") {
steps {
sleep(time:1, unit:"SECONDS")
echo "3"
}
}
}
}
stage ("Publish") {
steps {
script {
callSharedLibrary()
}
}
}
}
}
此输入为我提供以下输出
id: 6 , name: Parallel block, status: SUCCESS, duration: 87
id: 14 , name: Stage 1, status: SUCCESS, duration: 2118
id: 16 , name: Stage 2, status: SUCCESS, duration: 3103
id: 18 , name: Stage 3, status: SUCCESS, duration: 1099
但是我希望Parallel block
的持续时间是Stage 2
的持续时间,这是最大的时间。
是否可以将这三个阶段绑定到其父阶段,或者知道某个阶段是否来自并行块?因此我可以计算最大值,并根据需要处理主阶段的持续时间。
这是在共享库中收集信息的代码,被詹金斯的工作称为
def stages = RunExt.create(currentBuild.getRawBuild()).createWrapper().getStages()
for (StageNodeExt stage in stages) {
def id = stage.getId()
def name = stage.getName()
def status = stage.getStatus().toString()
def duration = stage.getDurationMillis().toString()
}