Jenkins API - Получить текущую стадию конвейера сборки - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь сделать мой конвейер сборки более полезным, и мне нужен способ завершить предыдущие сборки, если они еще не завершены.

У меня есть следующее определение задания:

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?

...