为Jenkins的每个build设置description,这个需求是什么意思呢?

在持续集成过程中,随着feature的不断加入,版本越来越多,你希望每个build成功之后能显示一些很重要的信息,比如版本号,当前该build支持的主要feature等。

这样不论是开发还是测试,在拿build的时候都能一眼就看出该build对应的版本号以及主要的feature。


这些信息显示在哪比较方便又直观呢? 

一种方法是存到一个文件中,然后把该我呢就包含在release的包里。这个方法可行,但比较麻烦,

你想要看version的话还得下载解压之后才能看到,无形中增加了相关人员的工作量。

那有没有更高效的方法?Jenkins有很多的plugin,搜索一下发现了description setter plugin,似乎符合我们的需要,不用自己造轮子了。吐舌头


首先是安装plugin,这个有很多方法,比如在manage plugins控制面板中可以安装,也可以手工下载然后上传。我用的是后者,简单,方便。


安装之后在在configure页面的Add post-build action中就可以看到有一项是Set build description了。

通常我们需要设置Regular expression和Description两项。 这两项的具体含义可以通过点击它们右边的问号来看注释。


用description setter plugin,网上的例子都是一行的,比如有一行版本信息:[version]Component1 Version: 1.2, Component2 Version: 1.6

我们可以将Regular expression设置成 \ [version\ ](.*),(.*), 将Description设置成\1<br>\2,     (这里\ 和 方括号之间没有空格,如果我把空格去掉,blog的格式就变了委屈

这样就会在build的description中显示

Component1 Version: 1.2

Component2 Version: 1.6



我遇到的问题是,我们有一个文件,包含了很多行的信息,希望将它们显示到每一个build的descrption中。

一开始没搞明白\n是什么意思,还以为这个plugin会匹配每一行,然后\1就对应第一行匹配的,\2对应第二行匹配的,其实不是这样的。

它只会去匹配一行,匹配了之后,如果正则表达式中有多个capture的括号,则可以用\1 \2来对应这些括号。

那如果我们想把文件中的多行信息都capture到该怎么办呢?


解决办法:
1. 我们在shell中将该文件按一定的格式输出: 将换行符替换成<br>,并将所有行join成一行,最后再打印出来。

打印的时候也加上了一个标识符[DESC],以便正则去识别。

cat Install/ChangeLog.txt | perl -e "@s=<>; map{s#\r\n#<br>#;} @s; print '[DESC]'; print join '', @s;"


2. Regular expression很简单:^\ [DESC\ ](.*)                (这里\ 和 方括号之间没有空格)

3. Description也很简单:\1


这样就OK了。

通过一些简单地技巧就可以解决多行的description的显示了。

脚本强大,plugin威武大笑

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐