Я разработал общую библиотеку jenkins в groovy, которая собирает информацию о сборках и этапах работы jenkins. Я сделал это с помощью переменной currentBuild .
Я могу правильно определить длительность этапов, но проблема в том, что когда конвейер выполняет этап с параллельными подэтапами внутри, я хочу думать, что продолжительность этапа равна максимальной длительности. его подэтапов. То, как я это делаю, позволяет мне видеть продолжительность каждой стадии, но не зная, находится ли стадия в параллельном блоке или нет.
Предположим, у нас есть этот конвейер
@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
длительность, которая является максимальной.
Можно ли каким-либо образом связать эти три этапа с его родителем или узнать, происходит ли этап из параллельного блока?
Вот код, который собирает информацию внутри разделяемой библиотеки, которая вызывается заданием jenkins
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()
}