Bash 修改生成的Jenkins描述

Bash 修改生成的Jenkins描述,bash,curl,jenkins,jenkins-api,Bash,Curl,Jenkins,Jenkins Api,我想远程更改Jenkins构建描述。我的脚本已经准备好了,除了一个小问题:多行描述 我正在使用Jenkins中的REST API和JSON下载旧的描述: old_description=$(curl -s --user "$USER:$PASSWORD" --data-urlencode "tree=description" \ "$jenkins_url/job/$job_name/$build_number/api/json") old_description=${old_desc

我想远程更改Jenkins构建描述。我的脚本已经准备好了,除了一个小问题:多行描述

我正在使用Jenkins中的REST API和JSON下载旧的描述:

old_description=$(curl -s --user "$USER:$PASSWORD" --data-urlencode "tree=description" \
    "$jenkins_url/job/$job_name/$build_number/api/json")

old_description=${old_description#*:\"} #Remove JSON garbage
old_description=${old_description%\"\}} #Remove JSON garbage
if curl -u $USER:$PASSWORD   --data-urlencode "description=$new_description" \
    --data-urlencode "Submit=Submit" \
    "$jenkins_url/job/$job_name/$build_number/submitDescription"
then
    echo "Description successfully changed on Build #$build_number in Jenkins job $job_name"
else
    echo "WARNING: Description was not set. Manually change the descripiton of the build"
    echo "         for Build #$build_number in Jenkins job $job_name"
fi
“curl”命令将拉出:

<font color=blue><b>At first you don't succeed. Try again</b></font><br/>
\r\n<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
\r\n<font color=green><b>At first you don't succeed. Try again</b></font>
这将
$old_description
更改为:

font color=blue><b>At first you don't succeed. Try again</b></font><br/>
<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
<font color=green><b>At first you don't succeed. Try again</b></font>
如果我第一次准备或附加新的描述,我会在Jenkins中得到:

<font color=blue><b>At first you don't succeed. Try again</b></font><br/>
<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
<font color=green><b>At first you don't succeed. Try again</b></font><br/>
<font color=red><b>My new description</b></font><br/>
一开始你没有成功。再试一次
起初你没有成功。再试一次
起初你没有成功。再试一次
我的新描述
看起来不错。下次,它就不起作用了。我明白了:

<font color=blue><b>At first you don't succeed. Try again</b></font><br/>\n<font color=gold><b>At first you don't succeed. Try again</b></font><br/>\n<font color=green><b>At first you don't succeed. Try again</b></font><br/>\n<font color=red><b>My new description</b></font><br/>
<font color=blue><b>My new new description</b></font>
一开始你没有成功。再试一次
\n首先,你没有成功。再试一次
\n首先,你没有成功。请重试
\n我的新描述
我的新描述
注意显示的
\n

如何解决此问题


我把整个程序都放进去了。

我已经玩了很长时间了

首先,不要这样做:

    new_description="$new_description<br/>
$old_description"
通过使用
printf
,我将
而不仅仅是
放在描述行分隔符中。这样,我就不会有一堆乱七八糟的
,也不再依赖于操作系统对换行符的定义

sed
命令花了我很长很长时间才弄明白。我尝试了各种各样的事情:

old_description=$(sed 's/\\r\\n/\r\n/g' <<<$old_description)
成功了!通常在sed中使用单引号来保护正则表达式不受插值的影响。但是,单引号也将
\r\n
作为
的插值终止。用双引号替换它们解决了这个问题

    new_description="$new_description<br/>
$old_description"
new_description="$(printf "$new_description\r\n$old_description")"
old_description=$(sed 's/\\r\\n/\r\n/g' <<<$old_description)
old_description=$(sed "s/\\r\\n/\r\n/g" <<<$old_description)