【发布时间】:2018-02-07 21:36:53
【问题描述】:
我有一个构建管道,它需要从一些 bash 脚本中提取一个值并在其他地方使用该值。我试图将我的 bash 脚本的结果存储在这样的环境变量中:
#!/usr/bin/env groovy
pipeline {
agent none
stages {
stage('Break Jenkins') {
agent any
steps {
sh """
ENV_VAR=\$(awk -F'-' '{print \$2 }' <<< \$(ls installer-*-ia32-win.zip))
echo $ENV_VAR
"""
}
}
}
}
当解释器命中echo $ENV_VAR 行时,Jenkins 抛出异常:
groovy.lang.MissingPropertyException:没有这样的属性:类的 ENV_VAR:groovy.lang.Binding
我试图通过像这样转义美元符号前缀来告诉 Jenkins 解释器 ENV_VAR 不是 Jenkinsfile 环境变量:
echo \$ENV_VAR
像这样
echo '$ENV_VAR'
两者都没有按预期工作。我认为这是我在字符串块(sh """ ... """)语法中的问题,并且还告诉 Jenkins 不要尝试从 envs 集合中获取 ENV_VAR 的值。
无论如何,我在谷歌搜索这个问题的解决方案时运气不佳,因为 Jenkins 的管道有自己的环境变量概念,似乎与 bash 环境变量是分开的。
看起来我只能在 environment 块内设置 Jenkinsfile 环境变量,这没有帮助,因为我已经在 sh 块内。
简单地说,有没有办法从sh 块中设置和访问环境变量的值?
【问题讨论】:
标签: jenkins groovy jenkins-pipeline