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

时间:2019-07-12 15:18:07

标签: groovy jenkins-pipeline jenkins-groovy

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

ret是从命令1 shell执行中版本值为7.0.1.0.284的变量

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 --quiet --no-check-certificate --no-proxy https://abc-nexus.com/nexus/content/repositories/item//item-portal-rpm--idp-portal.rpm -P / var / jenkins / workspace / abc / item / RPMBUILD / RPMS

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

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 --quiet --no-check-certificate --no-proxy https://abc-nexus.com/nexus/content/repositories/item/7.0.1.0.284
  + item-portal-rpm-7.0.1.0.284

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

1 个答案:

答案 0 :(得分:1)

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

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"

在评估的第二个命令中包含换行符的原因是,从外壳解释程序返回的第一个命令的stdout在其末尾有换行符分隔符。您需要使用trim方法删除此换行符,如下所示:

ret = sh(script: command1 , returnStdout: true).trim()

那将为您带来想要的结果。