我在管道中迈出了一步,它从上下文中提取对象并使用它们。但是,我需要在步骤之外访问这些对象以进入不同的步骤,并且第二步不会公开它。
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类),我将无法对其进行初始化。如何从管道中获取一个?
答案 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)
您可以在管道之前定义变量,而在该步骤中只需设置其值即可。这样,变量在整个管道中都是可见的。