在Jenkins的Bash脚本中使用环境变量

时间:2016-09-26 07:55:21

标签: bash jenkins environment-variables quoting

我知道有一些问题可以解答如何执行此操作,但是当我将变量用双引号括起来时,我仍然无法使我的方案正常工作。

我正在执行curl请求以获取Jenkins中的有效crumb,以便我可以通过POST请求执行作业。

所以目前我收到Password Invalid之类的回复,因为变量${USER_TOKEN}无法识别

echo "The USER TOKEN is " ${USER_TOKEN} # This outputs 123456789 for example
CRUMB=$(curl -s 'http://jenkins:${USER_TOKEN}@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, ":",//crumb)')

如果我对USER_TOKEN进行硬编码,那么这将有效,但我显然想避免这种情况。

如何执行此curl命令并传入USER_TOKEN

更新

如果我用双引号括起${USER_TOKEN},我仍然会收到相同的错误。

CRUMB=$(curl -s 'http://jenkins:"${USER_TOKEN}"@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, ":",//crumb)')

如果我用双引号包围curl请求,我会

Invalid Xpath expression, contact(//crumbRequestField,:,//crumb)
Unexpected ':'

2 个答案:

答案 0 :(得分:2)

您需要双引号包含双引号的字符串。这是一种方式:

.dll

答案 1 :(得分:0)

以这种方式试试

CRUMB=$(curl -s "http://jenkins:"${USER_TOKEN}"@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField, \":\",//crumb)")

如果你想在你的字符串中扩展一个变量,那么整个字符串必须用双引号括起来。单引号可防止任何bash评估。此外,您必须转义整个字符串中的任何双引号。