Jenkins脚本化的管道。两个问题:
我想念什么?(请参见下面的脚本)
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. ''' } }
您的示例不起作用,因为您使用的是带单引号的字符串文字。从Groovy手册(重点是我的):
任何Groovy的表达可以在所有字符串文字从被内插,除了 单 和 三单引号 的字符串。
试试这个:
sh "echo 'Hello World. Var=$var'"
或这个:
sh """ echo 'Hello World. Var=$var' echo 'More stuff' """
您不能从Shell步骤直接设置Groovy变量。从Groovy到Shell,这仅在一个方向上起作用。相反,您可以设置退出代码或将数据写入Groovy可以读取的stdout。
传递true参数returnStatus并从shell脚本中设置退出代码,该代码将是sh步骤的返回值。
true
returnStatus
sh
var = sh script: 'exit 42', returnStatus: true echo "$var" // prints 42
传递true参数returnStdout并echo从shell脚本使用以输出字符串数据。
returnStdout
echo
var = sh script: "echo 'the answer is 42'", returnStdout: true echo "$var" // prints "the answer is 42"
传递true参数returnStdout并echo从shell脚本使用以JSON格式输出字符串数据。
使用解析Groovy代码中的JSON数据JsonSlurper。现在,您可以查询一个常规的Groovy对象。
JsonSlurper
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"