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

3

我知道有一些关于如何做到这一点的问题和答案,然而当我将变量用双引号包裹起来时,我的场景似乎仍然无法正常工作。

我正在执行一个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 ':'

为什么不能用双引号将它括起来?curl -s 'http://jenkins:'"${USER_TOKEN}"'@localhost - 123
2个回答

2

你需要在包含双引号的字符串前后加上双引号,这是一种方法:

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

0

试着这样做

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接