我有一个 shell 脚本可以远程更改 Jenkins 构建描述。它使用 Jenkins 的 RESTful API 返回一个包含旧描述的 JSON 字符串。这允许我将新描述添加或附加到旧描述。例如,当我们部署到 QA 或生产机器时,我将部署信息放在构建中:
<font color="red"><b>deployed to PROD on foolb02-ext</b></font>
<font color="blue"><b>deployed to QA on barlb02QA-test</b></font>
第一行是最后一次部署到生产机器。第二行是针对 QA 的第一个部署。
完整的description.sh
脚本和其他类似的脚本位于Github。
我注意到当我有我的脚本来更改描述作为我的部署脚本的一部分时,旧的构建描述是空白的,我得到了这个:
<font color="blue"><b>deployed to QA on barlb02QA-test</b></font>
{"description":null}
{"description":null}
我使用构建的 RESTful API跟踪到我以获取旧的空白描述:
old_description=$(curl -s --user "$USER:$PASSWORD" --data "tree=description" \
"$jenkins_url/job/$job_name/$build_number/api/json")
当我自己运行description.sh
脚本并且描述为空白时,上述语法将设置$old_description
为:
{"description":""}
而且,我解析它以剥离 JSON 的东西语法:
old_description=${old_description#*:\"} #Remove JSON garbage
old_description=${old_description%\"\}} #Remove JSON garbage
但是,当我description.sh
在另一个 shell 脚本(如 deploy.sh 脚本)中运行我的脚本时,$old_description
设置如下:
{"description":null}
我的解析语法不会影响这一点。
我可以更改我的description.sh
脚本来处理这个问题,但我真正好奇的是,为什么 Jenkins API似乎返回两个不同的结果,这取决于我是否在另一个脚本中运行我的 shell 脚本。