Как получить текущий трубопровод Jenkins StepContext

У меня есть шаг в конвейере, который вытягивает объекты из контекста и использует их. Тем не менее, мне нужно получить доступ к этим объектам за пределами шагов для подачи на разные этапы, и второй шаг не раскрывает его.

stage() {
  steps {
    script {
        def status = waitForQualityGate()
        // Use the taskId
      }
    }
  }
}

waitForQualityGate() возвращает логическое значение, поэтому я не могу получить к нему доступ.

Вместо этого я могу вручную инициализировать этот шаг, например:

 script {
    def qualityGate = new WaitForQualityGateStep()
    def taskId = qualityGate.getTaskId()
 }

но taskId имеет значение null. Если я попытаюсь вручную запустить методы запуска на шаге:

script {
    def qualityGate = new WaitForQualityGateStep()
    qualityGate.start().start()
    def taskId = qualityGate.getTaskId()
}

Он не работает с сообщением:

java.lang.IllegalStateException: вы должны либо перейти в StepContext к конструктору StepExecution, либо создать StepExecution автоматически

У WaitForQualityGateStep есть информация, которая мне нужна, но я не могу ее инициализировать, не имея StepContext (который является абстрактным классом). Как я могу получить его из конвейера?

Всего 2 ответа


Я до сих пор не знаю, как вручную получить контекст шага, чтобы вручную выполнить шаг, но в случае, если кто-либо еще найдет это, пытаясь получить информацию из плагина Sonar, вот как я получил идентификатор задачи, который мне нужен.

def output = sh(script: "mvn sonar:sonar", returnStdout: true)
echo output  // The capture prevents printing to console

def taskUri = output.find(~'/api/ce/task\?id=[\w-]*')

Вы можете определить переменную перед конвейером, а на шаге просто установите ее значение. Таким образом, переменная видна по всему конвейеру.


Есть идеи?

10000