【问题标题】:Assigning bash variable inside curl command for jenkins API在 jenkins API 的 curl 命令中分配 bash 变量
【发布时间】:2021-03-06 09:18:21
【问题描述】:

搜索 stackoverflow 和其他谷歌搜索并不能满足我关于在 curl 中分配 bash 变量以访问 jenkins API 的整个目的的问题。

这是我访问 Jenkins API 的简单脚本,这里已经出错了:

JENKINS_USER=myUser
TOKEN=myToken
DOCK=myDock
HOST=localhost
PORT=8080

BASE_URL=https://$JENKINS_USER:$TOKEN@$HOST:$PORT/view/all/job/myProject/api/

curl -g -k ${BASE_URL}

bash 的输出:

user@c012311:/mnt/c/Users/User/Desktop$ ./myScript.sh
./myScript.sh: line 6: $'\r': command not found
./myScript.sh: line 11: $'\r': command not found
curl: (3) URL using bad/illegal format or missing URL

我尝试像这样访问我的变量:

  • \"$TOKEN\"
  • ${代币}
  • '$TOKEN'

但结果是一样的。

结果阻止我进一步推进我的脚本来过滤我的 jenkins 构建:

BUILD_NR=$BASE_URL/xml&xpath=//artifact/relativePath[contains(text(),$DOCK)])

此外,在其他变量中使用这些分配的变量:

ARTIFACT=$BUILD_NR/[...]

如何使用 bash 和 curl 正确分配变量?

【问题讨论】:

  • Dbl-引用所有变量的使用(99.9% 的时间)可能会有所帮助,所以尝试 curl -g -k "${BASE_URL}"` ... ``$\r` 听起来像 MS-Windows 行尾导致问题。使用dos2unix myScript 清理它们,然后重新运行。祝你好运。

标签: bash variables jenkins curl


【解决方案1】:

感谢@shellter为我的问题提供答案。

我通过为所有变量添加双引号来解决此问题,如下所示:

BASE_URL="https://"${JENKINS_USER}":"${TOKEN}"@"${HOST}":"${PORT}"/view/all/job/myProject/api/"

此外 - 通过执行 dos2unix myScript 我不再得到那些烦人的输出:

./myScript.sh: line 6: $'\r': command not found
./myScript.sh: line 11: $'\r': command not found

【讨论】:

    【解决方案2】:

    只需在 Linux 上运行此脚本,它似乎工作正常,它连接到 https://myUser:myToken@localhost:8080/view/all/job/myProject/api/ 它只是抛出一个 Connection refused,因为我的机器上 8080 上没有任何东西

    我认为问题在于行尾。 Windows 样式的行尾 (\r\n) - 您需要将它们更改为 Unix 样式 (\n),因此您的错误 '\r': command not found。尝试在脚本文件上运行 dos2unix 命令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2014-02-26
      • 1970-01-01
      相关资源
      最近更新 更多