我想 远程 更改Jenkins构建说明。我准备好了所有脚本,但有一个小问题:多行描述。
我在Jenkins中使用REST API和JSON下载旧描述:
old_description=$(curl -s --user "$USER:$PASSWORD" --data-urlencode "tree=descripthtml" target="_blank">ion" \
"$jenkins_url/job/$job_name/$build_number/api/json")
old_description=${old_description#*:\"} #Remove JSON garbage
old_description=${old_description%\"\}} #Remove JSON garbage
`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>
( 注意 :我添加了换行符以使上面的内容更易于阅读。这被单行提取)。
这些\r\n
是单独的行,所以我这样做:
old_description=$(sed 's/\\r\\n/\
/g' <<<$old_description)
变为$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>
( 注意 :新行是值的一部分。这是三行描述。)
我的程序(取决于命令行参数)可以替换,附加或在构建之前添加新的描述:
if [ "$prepend_flag" -a -n "$old_description" ] #Prepend new description to old description
then
new_description="$new_description<br/>
$old_description"
elif [ "$append_flag" -a -n "$old_description" ] #Append new description to old description
then
new_description="$old_description<br/>
$new_description"
fi
现在,我将重做描述:
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
如果我是第一次添加新描述,则可以在詹金斯中得到:
<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
出现。
如何解决此问题?
我把整个程序放在了pastebin中。
我玩了很长时间…
首先,不要这样做:
new_description="$new_description<br/>
$old_description"
追加或添加该行,我使用了printf
:
new_description="$(printf "$new_description\r\n$old_description")"
通过使用printf
,我在广告内容描述分隔符中放置了a
<CR><LF>
而不是一个<LF>
。这样,我就不会感到混乱,<NL>
并且<CR><NL>
不再依赖于操作系统对换行符的定义。
该sed
命令花了我很长一段时间才能弄清楚。我尝试了各种事情:
old_description=$(sed 's/\\r\\n/\r\n/g' <<<$old_description)
但是,似乎没有任何工作…我尝试了-E
允许我使用 扩展的 正则表达式的标志,但该标志始终解释\r\n
为替换\\r\\n
为literal 'rn
。
经过几个小时的处理,我终于尝试使用双引号而不是单引号:
old_description=$(sed "s/\\r\\n/\r\n/g" <<<$old_description)
可行!通常,您使用带sed的单引号来保护正则表达式免于插值。但是,单引号也杀死了\r\n
as 的插值<CR><LF>
。用双引号更改它们可以解决问题。
我有两个。NET解决方案,一个在。NET5中,另一个在。NET Classic 4.7.2中。每个解决方案都有单独的Jenkins构建作业。每个工作还使用Sonarqube的MSBuild扫描器分析解决方案。 我正在使用SonarQube服务器8.5版 .NET扫描程序5 .NET扫描程序4.7.2 在Jenkins中,当.NET 5构建运行时,发出 ,同时如果我执行另一个.NET经典构建,则后一
问题内容: 我正在使用Jenkins 1.462,而Maven版本是3.0.4。在詹金斯,我启用了“增量构建-仅构建已更改的模块”复选框 我想找出两个问题: 增量构建是否足够? 在这里,如何在Subversion的多模块Maven构建中触发单个模块的Jenkins构建?例如,据说它不能以100%的频率工作。在这里,第19页的http://www.slideshare.net/andrewbayer
问题内容: 在我的构建控制台顶部附近,我看到带有修订号的“上次构建修订:”。如何在我的构建脚本中访问最后构建的版本#?我正在使用Gradle,但我认为这并不重要。Jenkins是否在系统属性中提供最后构建的rev#?当然,从我的构建脚本进行访问必须很简单… 问题答案: 我不认为git插件会将上次构建的修订版导出为环境变量,但是可以使用简单的shell命令(例如: BUILD_URL始终指向构建的自
下面列出一些 Discuz! 应用常见的代码并给出相关的修改建议。 变量作用域问题 文件 myaddon.inc.php,该文件加密: <?php if(! defined ('IN_DISCUZ')) { exit ('Access Denied'); } $data = C::t('#myaddon#mytable')->fetch_my_d
问题内容: 我在詹金斯(Jenkins)的多分支项目工作正常,但我想修改 职位 描述,默认情况下,该 职位 描述为“全项目名称:xxxx /”,以使其更有意义。 通过使用执行我时可用的变量,我可以轻松更改构建说明,但是我不知道如何修改父作业描述。 我的用例是我的存储库的每个分支都有一个关联的容器,该容器在完成后会用最新的构建进行更新。因此,我的多分支项目中的每个作业都有其容器和Web URI,我希
问题内容: 我正在使用Jenkins的 “扩展选择参数” 插件,并希望安排构建定期运行而无需人工干预。 从下拉列表中选择构建的参数。 该参数的下拉列表是通过外部脚本生成的,我一直想选择最高的值作为默认值。 有没有办法选择最上面的元素作为计划作业的默认值? 我阅读了一些使用url远程运行作业的方法,但我希望可以通过仅更改作业配置来实现此目的,从而不必为它管理单独的脚本。 我的Jenkins实例在Li