我有一个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}
我使用构建的RESTful API来获取旧的空白描述:,从而将{"description":null}
追溯到我
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
但是,当我在另一个shell脚本(如deploy.sh脚本)中运行description.sh
脚本时,$old_description
设置为:
{"description":null}
我的解析语法不会影响这一点。
我可以更改description.sh
脚本来处理这一问题,但我真正好奇的是,为什么Jenkins API似乎返回了两个不同的结果,这取决于我是否在另一个脚本中运行shell脚本。
对于尚未设置的描述(在Jenkins 1.517中),我总是看到null
结果。@DavidW看到的不同之处在于,null
用于未设置的描述,而""
(空字符串)用于具有已清除值的描述。