我使用脚本化的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中设置和访问环境变量?
答案 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
}