需求:

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

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


这里主要介绍两种方式:

一.通过调用jenkins内部命令

调用Jenkins命令设置job的描述信息。

curl -d "description=value2" --user $AN_ACCESS_KEY "$BUILD_URL/submitDescription"

上面的--user $AN_ACCESS_KEY " 应该为--user admin:admin,但为了信息安全在pipeline中先定义

environment {
    AN_ACCESS_KEY = credentials('ca9d1fb6-dafb-4d19-9a74-a649a4454867')
    }


python调用的话可以参考:

r = requests.get(os.environ.get("BUILD_URL") + "submitDescription?",
                         auth=(username, password),
                         params={"description": desc}, timeout=30)





二.通过jenkins的description setter plugin

   

安装之后在在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全生命周期开发者社区

更多推荐