Учитывая конвейер Jenkins, как мы можем рассчитать продолжительность определенных ветвей или этапов, которые уже завершены?
Используя класс Groovy Date
, мы, безусловно, могли бы хранить время начала и окончания в заданных точках конвейера и вычислять их разницу. Но это загромождает код и кажется излишним, поскольку можно предположить, что временная информация уже существует в графе узлов конвейера. Например, плагин Blue Ocean отображает продолжительность частей конвейера (например, если вы наводите курсор на кнопку этапа).
Было бы предпочтительнее, если бы мы могли получать информацию о времени конвейера с помощью API Jenkins без необходимости вставлять код в этапы, как в следующем наивном примере:
pipeline {
agent any
stages {
stage('A') {
stages {
stage('A1') {
steps {
script { // unwanted script block
def startDate = new Date() // unwanted code
sleep 1
durationA1 = ( new Date() ) - startDate // unwanted code
}
}
}
stage('A2') {
steps {
script { // unwanted script block
def startDate = new Date() // unwanted code
sleep 1
durationA2 = ( new Date() ) - startDate // unwanted code
}
}
}
}
}
}
post {
always {
script {
echo "Stage A1 duration: $durationA1"
echo "Stage A2 duration: $durationA2"
echo "Stage A duration: ${durationA1 + durationA2}"
}
}
}
}