2

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

4

1 回答 1

0

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

于 2013-07-30T18:08:08.663 回答