Bash jenkins管道函数错误,无错误

Bash jenkins管道函数错误,无错误,bash,jenkins,jenkins-pipeline,Bash,Jenkins,Jenkins Pipeline,我正在使用jenkins管道脚本在我们的机器上进行产品测试 所有测试之父都是这样的 node('nightly-master') { stage 'run' println PRODUCTS oliTest('win7.nightly.test', 'checkAndWaitForInstalledProduct.py', 'esxi', 'opsi-local-image-prepare', 'opsi-local-image-win7', PRODUCTS) ) } PRODUCTS是一

我正在使用jenkins管道脚本在我们的机器上进行产品测试

所有测试之父都是这样的

node('nightly-master') {

stage 'run'
println PRODUCTS
oliTest('win7.nightly.test', 'checkAndWaitForInstalledProduct.py', 'esxi', 'opsi-local-image-prepare', 'opsi-local-image-win7', PRODUCTS)
)
}
PRODUCTS是一个文本框变量,在构建开始时输入

函数oliTest()如下所示:

println值正确打印到jenkins日志中 一旦调用函数oliProd(),测试就会失败,并且在下面的块中的forr循环中没有任何错误消息

def call(SERVERID, CHECKSCRIPT, VIRTUALIZATION, PRODUCTS){

    stage 'install Products'
    println SERVERID
    println CHECKSCRIPT
    println VIRTUALIZATION
    println PRODUCTS
    sh " echo ${PRODUCTS}"
    sh "echo ${SERVERID}"
    sh "for i in ${PRODUCTS}; do opsi-admin -d method setProductActionRequestWithDependencies $i ${SERVERID} setup;done"
}
由于${SERVERID}未展开并保留为空,因此使用“COMMAND”多行写入时出现错误

有什么建议可以让事情顺利进行吗


干杯

注意,可以使用三重双引号代替三重单引号。这就解决了这个简单的问题


但是,您确实应该在脚本代码本身中进行迭代,而不是尝试在shell中进行迭代。

Jon建议根据对“管道对象(如
oliTest中的管道对象)的引用来解析脚本方法,例如“echo”(这,…)
其中
oliTest
声明一个脚本参数,并将其传递给其他方法/实例,用于将
echo
解析为
scriptObj.echo

def call(SERVERID, CHECKSCRIPT, VIRTUALIZATION, PRODUCTS){

    stage 'install Products'
    println SERVERID
    println CHECKSCRIPT
    println VIRTUALIZATION
    println PRODUCTS
    sh " echo ${PRODUCTS}"
    sh "echo ${SERVERID}"
    sh "for i in ${PRODUCTS}; do opsi-admin -d method setProductActionRequestWithDependencies $i ${SERVERID} setup;done"
}