【发布时间】:2023-03-13 22:58:03
【问题描述】:
我有一个 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”用于未设置的描述,而“”用于具有已清除值的描述。
-
@DaveBacher - 是的,就是这样。让它成为官方答案,我会接受它。当我测试我的
deployment.sh脚本时,我不断地设置和取消设置描述。当我进行部署时,一开始就没有设置描述。我认为这与我的deploy.sh脚本运行我的description.sh脚本有关,但这只是我测试的产物,而不是来自 25 维的一些奇怪的副作用,它能够神秘地感知我的运行方式剧本。令人惊讶的是,您花了如此多的时间调试此类琐碎的事情。