脚本管道集和访问环境变量

时间:2018-04-16 09:12:56

标签: jenkins groovy jenkins-pipeline

我使用脚本化的Jenkins Pipeline来执行我的构建。我的一个阶段使用参数调用ant来构建可执行文件。我读到我可以使用 withEnv 步骤来传递变量:

node(this.JENKINS_NODE_LABEL) {
    withEnv ([
        'JAVA1_8 = /usr/lib/jvm/java-1.8.0-openjdk',
        'ANT_HOME = ant-1.7.1',
        'ANT_OPTS = -Xmx512m',
        'PATH = $ANT_HOME/bin:$PATH',
        'COMPONENT_NAME = SampleName'
        ]) {
            buildComponent()
        }
}

buildComponent阶段在一个附加文件中定义,它只包含一个执行构建的步骤:

def call() {
    stage('Build Component') {
        sh 'ant -Dcomponent=$COMPONENT_NAME'
    }
}

但是,当我执行它时,我收到一个异常,即无法识别ant,并且作为组件传递的值为空。我也尝试使用env.COMPONENT_NAME,但没有运气。我应该如何在Scripted Pipeline中设置和访问环境变量?

1 个答案:

答案 0 :(得分:2)

我不确定这是否能彻底解决您的问题,但我认为这是第一个问题:您需要删除环境变量字符串中=两侧的空格。它是一个字符串列表,而不是值的键的映射,因此它将按原样传递给shell,类似于如果在一个命令中运行它将环境变量传递给命令的方式shell手动,例如:

MYVAR=value /usr/bin/mycommand

而不是

MYVAR = value /usr/bin/mycommand

管道脚本中的基本示例 - 以下内容将打印world

withEnv(['HELLO=world']) {
    print env.HELLO
}

但这会打印null,因为=两侧的空格:

withEnv(['HELLO = world']) {
    print env.HELLO
}