我有一个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脚本。
答案 0 :(得分:0)
我总是看到null
结果没有设置的描述(在Jenkins 1.517中)。 @DavidW看到的差异是null
用于未设置的描述,""
(空字符串)用于具有已清除值的描述。