【问题标题】:How to get the current Jenkins pipeline StepContext如何获取当前的 Jenkins 流水线 StepContext
【发布时间】:2019-03-11 07:14:16
【问题描述】:

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

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(它是一个抽象类),我无法初始化它。如何从管道中获取一个?

【问题讨论】:

    标签: jenkins sonarqube jenkins-pipeline jenkins-groovy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我仍然不知道如何手动获取步骤上下文以手动执行步骤,但如果其他人通过尝试从 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-]*')
      

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 2020-09-28
        • 1970-01-01
        • 2021-09-29
        • 1970-01-01
        • 2022-09-26
        • 2018-11-08
        • 2021-10-07
        • 1970-01-01
        相关资源
        最近更新 更多