Jenkins脚本化管道:无法在shell中打印变量并在shell中设置变量值

Jenkins脚本化的管道。两个问题:

  1. 我有一个全局变量var,我正尝试在shell内访问其值。但它什么也没打印
  2. var的值是使用shell脚本在其中一个阶段中设置的,以便在下一个阶段中进行访问,但它在shell中不打印任何内容。

我想念什么?(请参见下面的脚本)

node {    

var=10

stage('HelloWorld') {

sh '''

echo "Hello World. Var=$var" ===> Prints nothing for var

var=20'''

}

stage('git clone') {

echo "Cloning git. Var = $var" ==> Prints 20, and not 10

sh '''

echo "Var in second stage is = $var" ===> Doesnt print anything here. I need 20.

'''

}

}

回答:

1.将一个groovy变量传递给shell

您的示例不起作用,因为您使用的是带单引号的字符串文字。从Groovy手册(重点是我的):

任何Groovy的表达可以在所有字符串文字从被内插,除了 和 的字符串。

试试这个:

sh "echo 'Hello World. Var=$var'"

或这个:

sh """

echo 'Hello World. Var=$var'

echo 'More stuff'

"""

2.从shell设置一个Groovy变量

您不能从Shell步骤直接设置Groovy变量。从Groovy到Shell,这仅在一个方向上起作用。相反,您可以设置退出代码或将数据写入Groovy可以读取的stdout。

回答:

传递true参数returnStatus并从shell脚本中设置退出代码,该代码将是sh步骤的返回值。

var = sh script: 'exit 42', returnStatus: true

echo "$var" // prints 42

回答:

传递true参数returnStdoutecho从shell脚本使用以输出字符串数据。

var = sh script: "echo 'the answer is 42'", returnStdout: true

echo "$var" // prints "the answer is 42"

回答:

传递true参数returnStdoutecho从shell脚本使用以JSON格式输出字符串数据。

使用解析Groovy代码中的JSON数据JsonSlurper。现在,您可以查询一个常规的Groovy对象。

def jsonStr = sh returnStdout: true, script: """

echo '{

"answer": 42,

"question": "what is 6 times 7"

}'

"""

def jsonData = new groovy.json.JsonSlurper().parseText( jsonStr )

echo "answer: $jsonData.answer"

echo "question: $jsonData.question"

以上是 Jenkins脚本化管道:无法在shell中打印变量并在shell中设置变量值 的全部内容, 来源链接: utcz.com/qa/428653.html

回到顶部