Shell脚本更改Jenkins构建描述选择虚假旧描述

时间:2013-07-30 15:14:05

标签: bash curl jenkins

我有一个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脚本。

1 个答案:

答案 0 :(得分:0)

我总是看到null结果没有设置的描述(在Jenkins 1.517中)。 @DavidW看到的差异是null用于未设置的描述,""(空字符串)用于具有已清除值的描述。