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";
我需要用破折号分隔 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";