Jenkins 管道全局变量 - return 来自 shell 脚本的变量,然后将其导出到 shell 脚本

Jeknins pipeline Global Vars - return a variable from a shell script, then export it into a shell script

我需要用破折号分隔 git 标签。以下是数据示例:

DEVQA-10000000-6d26fa05def3fa94a2acd0ca12fcdd6a82fc46d7-SUCCESS

这应该拆分为 $1-$2-$3-$4

我的想法是使用 awk git tag -l | grep DEVQA | awk -F '[ -]' '{print }' 例如。

我尝试使用 withEnvs 进行定义,我尝试在另一个脚本中获取值并将其加载到我的脚本中,即加载 'env/file'

我好像想不通。它将命令打印为管道 运行 s

stage('Build ') {
def buildRecordId = sh(script: "git tag -l | grep DEVQA | awk -F \'[ -]\' \'{print $2}\'", returnStdout: true).trim() as Integer
def startRev = sh(script: "git tag -l | grep DEVQA | awk -F \'[ -]\' \'{print $3}\'", returnStdout: true).trim()
def testlevel="noLocalTests"
sh """ export testlevel="${testlevel}";
export startrevision="${env.startRev}";
export buildrecordid="${env.buildRecordId}";
echo "I worked: $startrevision";
/tools/ant/apache-ant-1.9.4/bin/ant  -verbose -buildfile ./buildtool/build.xml -propertyfile ./buildtool/build.properties.hc.inc.dev startCICD
            """
                    }

当然它没有找到 startrevision:

"groovy.lang.MissingPropertyException:没有这样的 属性:class 的开始修订:groovy.lang.Binding 在 groovy.lang.Binding.getVariable(Binding.java:63) 在 org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:264)

您在 sh 步骤中使用了三重双引号字符串,这将在执行 sh 步骤中的 bash 之前进行字符串插值。在 here

阅读详细信息

字符串插值将尝试用 groovy 变量 ABC.

的值替换 ${ABC}$ABC

你的错误说它在进行插值时找不到 groovy 变量 startrevision

如果startrevision打算做一个bash环境变量,你需要用$转义$,如果groovy变量,请定义并为其赋值。

echo "I worked: $startrevision";