Shell脚本,以更改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脚本。

对于尚未设置的描述(在Jenkins 1.517中),我总是看到null结果。@DavidW看到的不同之处在于,null用于未设置的描述,而""(空字符串)用于具有已清除值的描述。

最新更新