效字当先,以质为本。测试开发入行十余年,辉煌过,迷茫过,持续探寻人生的激情和前进的步伐!好好生活,认真工作!
分类: IT业界
2017-05-10 15:09:53
为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
\2, (这里\ 和 方括号之间没有空格,如果我把空格去掉,blog的格式就变了)
这样就会在build的description中显示
Component1 Version: 1.2
Component2 Version: 1.6
我遇到的问题是,我们有一个文件,包含了很多行的信息,希望将它们显示到每一个build的descrption中。
一开始没搞明白\n是什么意思,还以为这个plugin会匹配每一行,然后\1就对应第一行匹配的,\2对应第二行匹配的,其实不是这样的。
它只会去匹配一行,匹配了之后,如果正则表达式中有多个capture的括号,则可以用\1 \2来对应这些括号。
那如果我们想把文件中的多行信息都capture到该怎么办呢?
解决办法:
1. 我们在shell中将该文件按一定的格式输出: 将换行符替换成
,并将所有行join成一行,最后再打印出来。
打印的时候也加上了一个标识符[DESC],以便正则去识别。
cat Install/ChangeLog.txt | perl -e "@s=<>; map{s#\r\n#
#;} @s; print '[DESC]'; print join '', @s;"
2. Regular expression很简单:^\ [DESC\ ](.*) (这里\ 和 方括号之间没有空格)
3. Description也很简单:\1
这样就OK了。
通过一些简单地技巧就可以解决多行的description的显示了。
脚本强大,plugin威武