.net持续集成sonarqube篇之 sonarqube与jenkins集成(插件模式)

系列目录html

Jenkins经过插件集成Sonarqube

经过上一节咱们了解了如何配置以使jenkins ci环境中能够执行sonarqube构建,其实Sonarqube官方也提供了jenkins插件以便更方便的管理.使用插件来执行sonarqube项目有如下优势web

1.能够很清楚的看到项目是Sonarqube项目,以下图示

avatar

Sonarqube的begin,end不须要手动写,而是自动选择,项目名称,项目版本一目了然.不须要查看cmd信息.有点流水线的感受.安全

2.更好地与Sonarqube集成,请看下图

avatar

咱们能够看到使用Sonarqube插件的项目是这样的,可以在jenkins页面展现项目的状态和sonarqube服务端的处理状态,咱们点击图中的与sonarqube相关的图标会自动进入Sonarqube web管理页面,而且自动定位到本项目,这样若是构建项目特别多的状况下给咱们带来不少方便.服务器

3.与Jenkins PipeLine集成

以上仅仅是方便之处,然而并无显示出插件无可取代之处,它的无可取代之处在于使用jenkins PipeLine时必须使用此插件.ssh

说了这么多,下面介绍如何安装配置sonarqube Jenkins插件.分布式

进入Jenkins插件管理界面,切换到'available'界面,输入sonarQube Scanner而后安装(关于jenkins插件安装前面章节有讲到,这里再也不赘述).安装完成之后开始配置.工具

工具选项配置

进入Manage Jenkins>Global Tool Configuration单元测试

找到sonarqube for msbuild配置以下测试

avatar
其中名称能够随便选择,只要方便管理便可.ui

再找到sonarqube scanner,配置以下

avatar
配置完成后点击最下面的save保存

点击完保存以后,咱们再进入config system找到sonarqube servers配置以下

avatar

serverurl要根据实际状况配置,若是sonarqube和jenkins并不在同一台机器,则须要配置ip地址.

下面咱们新建一个自由式任务.名称为mysonar(名称随意)
进入到Build栏目,点击Add Build Steps,咱们历来拉列表中选择Sonarqube开始标识(经过前面的章节咱们了解到,sonarqube构建包括开始标记,结束标记,而后中间是msbuild构建)

avatar

点击后会出现如下配置项,按实际状况配置便可

avatar
指定项目名,key(key能够任意起名,只作为唯一标识,并非ssh登录相似的key)

而后再新建一个执行bat的步骤.以下图

avatar

这里很普通,指定一个要编译的项目,须要注意的是我这里有环境变量msbuild,若是找不到请添加环境变量或者指定msbuild完整路径.

而后再添加一个步骤,此次选择SonarScanner for msbuild -end analysis.

而后点击肯定完成建立,咱们点击build now触发一次构建.

构建成功后信息以下图

avatar
咱们点击红色框先的任意一项,就能够跳转到sonarqube web管理界面,以下图示

avatar

须要注意的是第一次运行并不能构建成功,这是由于Jenkins须要下载相关插件,插件下载成功后咱们进入Jenkins\tools\hudson.plugins.sonar.MsBuildSQRunnerInstallation目录下的你的 SonarScanner for MSBuild的名字,它就是你在Global Tool Configuration>SonarScanner for MSBuild指定的名称,进去之后找到SonarQube.Analysis.xml对它进行配置,关于此文件的配置前面咱们讲到过,这里再也不赘述.

Sonarqube插件集成单元测试覆盖报告

回忆前面章节,添加sonarqube单元测试覆盖率报告须要额外执行一步运行单元测试的代码,这并非重点,重点在于如何在Begin Analysis部分指定单元测试执行文件,这里经过指定Additional arguments来实现,以下图示

avatar

而后再在msbuild构建完成后添加一步执行单元测试的代码(能够复制前面的代码)就好了,这里须要说明的是前面为了方便讲解咱们是在项目目录下执行脚本,使用了%CD%这样的相对路径,Jenkins中建议换成绝对路径,以防出现没必要要的麻烦.

完了再进入Sonarqube web管理界面,就能够看到有单元测试覆盖率报告了

avatar

Token方式与Sonarqube server交互

上一节咱们讲解了经过配置SonarQube.Analysis.xml方式实现与Sonarqube server交互(实际上咱们执行构建的时候sonarqube runner是经过http方式把数据提交到sonarqube server),这样作有很是明显的缺点.第一是安全问题,咱们知道其实咱们是把admin的用户名和密码写入了SonarQube.Analysis.xml文件里,这样很容易暴露管理员帐户,在企业生产环境中,若是有恶意的人获取了管理员帐户,则能够进行任意构建,而后触发布,这样会形成很是严重的后果,即便被没有恶意的开发者获取到,开发者可能出于好奇心在生产环境中进行测试尝试,这样也可能会形成很是严重的后果.第二是管理很不方便,若是在生产环境的jenkins是分布式的,那么咱们进入每一台服务器更改配置文件是很不方便的,若是管理员帐户和密码更改了还要进入每台服务器更改,虽然如今有各类自动化的工具使得这种操做不是特别麻烦的问题,可是集中的配置更加方便维护.下面咱们讲解如何经过在Jenkins中为Sonarqube server添加token来解决以上两个问题.

在Sonarqube里生成token

首先须要说明的是,只有管理员帐户能够生成token,其它帐户不可进行此操做.咱们进入sonarqube web管理界面,执行如下操做

avatar

进入个人帐户后security标签,能够看到以下界面

avatar

咱们在红框内的文本框里输入key的名字,此时Generate按钮变为激活状态,咱们点击一下就能够生成一个token

avatar

咱们点击copy或者直接复制把token存储到文本文档或者其它地方,须要注意的是token必须保存,退出这个页面后token的值就会消失(这里说的消失是指再也不显示,而不是真正的消失).

把生成的token添加到Jenkins里

咱们再回到jenkins,进入Manage Jenkins>configure system找到SonarQube servers把token粘贴到Server authentication token

avatar

须要注意的时,若是已经在SonarQube.Analysis.xml配置了帐号密码,则须要删除掉,即删除如下代码

<Property Name="sonar.login">admin</Property>
<Property Name="sonar.password">admin</Property>