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

Using environment variables within a Bash script in Jenkins

我知道有几个问题和如何执行此操作的答案,但是当我用双引号括起我的变量时,我似乎仍然无法让我的场景工作。

我正在执行 curl 请求以在 Jenkins 中获取有效的碎屑,这样我就可以通过 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 ':'

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

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

这样试试

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

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