Jenkins管道全局变量 - 从shell脚本返回变量,然后将其导出到shell脚本中

问题描述 投票:0回答:1

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

DEVQA-10000000-6d26fa05def3fa94a2acd0ca12fcdd6a82fc46d7-SUCCESS

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

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

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

我似乎无法弄明白。它将命令打印为管道运行

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
            """
                    }

当然,它没有找到开始修订:

“groovy.lang.MissingPropertyException:没有这样的属性:startrevision for class:groovy.lang.Binding at groovy.lang.Binding.getVariable(Binding.java:63)at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor。 onGetProperty(SandboxInterceptor.java:264)

groovy environment-variables jenkins-pipeline dsl
1个回答
0
投票

你在sh步骤中使用了三重双引号字符串,它将在执行sh步骤中的bash之前进行字符串插值。阅读here的详细信息

字符串插值将尝试用常规变量${ABC}的值替换$ABCABC

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

如果startrevision打算成为bash环境变量,你需要通过$来逃避\$,如果是一个常规变量,请定义并赋值给它。

echo "I worked: \$startrevision";
© www.soinside.com 2019 - 2024. All rights reserved.