如何获取当前的Jenkins管道StepContext

时间:2018-10-05 18:27:16

标签: jenkins sonarqube jenkins-pipeline jenkins-groovy

我在管道中迈出了一步,它从上下文中提取对象并使用它们。但是,我需要在步骤之外访问这些对象以进入不同的步骤,并且第二步不会公开它。

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

waitForQualityGate()调用仅返回一个布尔值,因此我不能在那里访问它。

我可以改为手动初始化该步骤,

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

,但是taskId为空。如果我尝试在步骤上手动运行启动方法:

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

失败,并显示以下消息:

  

java.lang.IllegalStateException:您必须将StepContext传递给StepExecution构造函数,或者必须自动创建StepExecution

WaitForQualityGateStep具有我需要的信息,但是如果没有StepContext(这是一个Abstract类),我将无法对其进行初始化。如何从管道中获取一个?

2 个答案:

答案 0 :(得分:1)

我仍然不知道如何手动获取步骤上下文以手动执行步骤,但是如果其他人试图通过从Sonar插件中获取信息来找到它,这就是我如何获得所需的任务ID

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-]*')

答案 1 :(得分:0)

您可以在管道之前定义变量,而在该步骤中只需设置其值即可。这样,变量在整个管道中都是可见的。