如何从单个sh脚本输出中定义多个环境变量

时间:2019-04-09 23:51:41

标签: groovy jenkins-pipeline

我需要在sh块中执行一个可设置多个环境变量的工具。然后,我需要将sh步骤中的环境变量导出到withEnv步骤中,以供另一步骤使用。

我知道我可以通过在同一个sh块中执行该工具来完成类似的事情。如果可能的话,我想利用ansiblePlaybook插件来完成此任务。

stage('Example') {
    steps {
        // Run the tool that generates the eval block
        sh 'some-tool'
        // Generates output like:
        // TOKENA='foo'; TOKENB='bar'; export TOKENA; export TOKENB; echo "success"

        // This is where I need help. 
        // How to translate the script output from above into variables
        // So that I can make them available to the ansiblePlaybook step.
        withEnv([TOKENA=TOKENA, TOKENB=TOKENB]) {
            ansiblePlaybook( 
                // ... irrelevant details
            )
        }
    }
}

我提供的代码不完整。我不希望有任何结果。

2 个答案:

答案 0 :(得分:0)

您拥有的一切都是外壳。包括来自some-tool的输出。

那为什么不把这个some-tool放在ansible里面呢?

但是,如果您可以将some-tool输出作为唯一的令牌分配,那么以下代码将起作用

def env = new ConfigSlurper().parse(" TOKENA='foo'; TOKENB='bar'; ")

答案 1 :(得分:0)

我最近遇到了同样的问题,需要使用 Jenkins 的 withEnv 块保存几个环境变量。这对我有用:

    stage('Do some hard work'){
        steps {
            withEnv(["MY_VAR_1=${VALUE_1}", "MY_VAR_2=${VALUE_2}"]) {
                script {
                    bat (
                            script: 'echo "Doing some Hard work with ${MY_VAR_1} and ${MY_VAR_2}"'
                    )
                }
            }
        }
    }