Я пытаюсь сделать мой конвейер сборки более полезным, и мне нужен способ завершить предыдущие сборки, если они еще не завершены.
У меня есть следующее определение задания:
pipeline {
stages {
stage('A'){...}
stage('B'){...}
stage('C'){...}
}
}
И мне нужно прекратить все предыдущие сборки, если они не находятся в стадии 'C'.
Я использую Jenkins API для получения предыдущих сборок для конкретной работы:
@NonCPS
def cancelPreviousBuilds() {
def buildNumber = env.BUILD_NUMBER.toInteger()
def currentJob = Jenkins.getInstance().getItemByFullName(env.JOB_NAME)
currentJob.builds
.find{ build -> build.isBuilding() && build.number.toInteger() < buildNumber && currentStageName(build) != 'C' }
.each{ build -> build.doStop() }
}
Так что мойОграничитель тока - это реализация функции currentStageName
. Я не могу получить название сцены. Я уже нашел некоторый код, но он не работает для меня:
@NonCPS
def currentStageName(currentBuild) {
FlowGraphWalker walker = new FlowGraphWalker(currentBuild.getExecution())
for (FlowNode flowNode: walker) {
if(flowNode.isActive()) {
return flowNode.getDisplayName();
}
}
}
Объект FlowNode не содержит имя этапа, он содержит более узкий шаг потока внутри сборки.
Итак, вопрос: Как получить текущий этап предыдущей сборки для конкретной работы Jenkins?