【问题标题】:Shell Script to change Jenkins build description picking bogus old description更改 Jenkins 构建描述的 Shell 脚本选择虚假的旧描述
【发布时间】: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 维的一些奇怪的副作用,它能够神秘地感知我的运行方式剧本。令人惊讶的是,您花了如此多的时间调试此类琐碎的事情。

标签: bash curl jenkins


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多