【问题标题】:Environment variable exported in shell in groovy function can not be usedgroovy函数中shell导出的环境变量无法使用
【发布时间】:2019-12-03 15:36:43
【问题描述】:

我定义了一个 Jenkins 声明式管道如下:

def test(String A){
    sh """
    export tag="20190101"
    echo "${tag}"
    echo "${A}"
    """
}
pipeline{
    agent any
    stages{
        stage('check'){
            steps{
                test("aaa")
            }
        }
    }
}

如果我如下使用double quoteecho "${A}"这个命令会报错:

sh """
    export tag="20190101"
    echo "${tag}"
    echo "${A}"
    """

这样的错误:

groovy.lang.MissingPropertyException: No such property: tag for class: WorkflowScript
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:39)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
    at WorkflowScript.test(WorkflowScript:4)
    at WorkflowScript.run(WorkflowScript:13)
    at 
....

于是我把double quote改成了single quote,这次没有报错,但是我可以从groovy获取变量pass,如下:

sh '''
    export tag="20190101"
    echo "${tag}"
    echo "${A}"
    '''
[Pipeline] {
[Pipeline] stage
[Pipeline] { (check)
[Pipeline] sh
+ export tag=20190101
+ echo 20190101
20190101
+ echo 

[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

我认为如果使用single quote,环境变量可以正确解析,groovy传来的变量无法解析;如果使用double quote,从groovy传入的变量可以正确解析,但是shell中的环境变量无法解析,会报错。 但是,我需要使用我设置的 shell 环境中的变量和从 groovy 传递的变量,在我的场景中,如何用 shell 定义函数?如果您能提供帮助,非常感谢。

注意:

詹金斯 2.x
声明式管道。

【问题讨论】:

  • 对不起,在double quote场景下,错误应该是echo "${tag}"引起的。
  • 你试过不用双引号echo ${tag}吗?
  • 在双引号解决方案中,可能需要转义美元符号来延迟扩展:echo "\$tag"

标签: shell jenkins groovy jenkins-pipeline


【解决方案1】:

这应该可行:

def test(String A){
    sh """
    export tag="20190101"
    echo \$tag
    echo ${A}
    """
}
pipeline{
    agent any
    stages{
        stage('check'){
            steps{
                test("aaa")
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多