首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在jenkinsfile中的shell执行步骤中访问groovy变量

在jenkinsfile中的shell执行步骤中访问groovy变量
EN

Stack Overflow用户
提问于 2019-07-12 07:18:07
回答 1查看 316关注 0票数 1

在我的Jenkinsfile中,我定义了一个groovy变量,我想在下面的shell命令中使用这个值:

ret是变量,其版本值为7.0.1.0.284来自命令1 shell执行

代码语言:javascript
运行
AI代码解释
复制
command1 = """curl -s "https://abc/maven-metadata.xml" | grep "<version>.*</version>" | sort | uniq | sed -e "s#\\(.*\\)\\(<version>\\)\\(.*\\)\\(</version>\\)\\(.*\\)#\\3#g"| grep 7.0.1.0 | tail -n1"""
ret = sh(script: command1 , returnStdout: true)
command2 = "wget --quiet --no-check-certificate --no-proxy https://abc-nexus.com/nexus/content/repositories/item/\$ret/item-portal-rpm-\$ret-idp-portal.rpm -P /var/jenkins/workspace/abc/item/RPMBUILD/RPMS"

使用此命令输出:

wget -安静

它是空白的,如果我这样使用它:

代码语言:javascript
运行
AI代码解释
复制
command2 = "wget --quiet --no-check-certificate --no-proxy https://abc-nexus.com/nexus/content/repositories/item/$ret/item-portal-rpm-$ret-idp-portal.rpm -P /var/jenkins/workspace/abc/item/RPMBUILD/RPMS"

产出如下:

wget --安静--无检查证书--无代理https://abc-nexus.com/nexus/content/repositories/item/7.0.1.0.284 +项目-门户-rpm-7.0.1.0.284

它进入下一行,不被视为单行执行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 10:26:31

您的第一次尝试是使用一个$转义\。这在shell解释器中被解释为一个shell变量,因为它是以这种方式传递给Jenkins管道sh方法的。第二次尝试更接近于正确的语法,但使用括号更安全:

代码语言:javascript
运行
AI代码解释
复制
command2 = "wget --quiet --no-check-certificate --no-proxy https://abc-nexus.com/nexus/content/repositories/item/${ret}/item-portal-rpm-${ret}-idp-portal.rpm -P /var/jenkins/workspace/abc/item/RPMBUILD/RPMS"

在计算的第二个命令中有一个换行符的原因是,第一个命令的shell解释器返回的stdout在其末尾有一个新行分隔符。您需要使用trim方法删除此换行符,如下所示:

代码语言:javascript
运行
AI代码解释
复制
ret = sh(script: command1 , returnStdout: true).trim()

这样你就能得到你想要的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57009820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档