软件项目在开发过程中,往往由于任务重、时间紧等原因忽略软件代码的质量和规范检查,只注重软件功能的开发和交付。等软件交付上线以后,由于代码质量导致的问题会耗费开发和运维人员的大量时间。研发表明,项目上线以后在生产环境中修复一个Bug,将耗费三倍于开发过程中修复该Bug所耗费的时间。由此可见,需要在开发过程中不断提高代码质量,避免潜在的问题,减少项目交付以后的技术负债。

在软件开发过程中检测代码质量,持续集成构建无疑是最好的选择。本文建介绍如何利用TFS的持续构建与代码质量分析工具SonarQube之间的集成,实现实时分析代码质量,帮助开发人员在开发过程中提高代码质量。

一、必备工具

本文中作者使用了下列软件产品:

- Microsoft Visual Studio Team Foundation Server 2015.1 https://www.visualstudio.com/en-us/products/tfs-overview-vs.aspx 

- SonarQube 5.3 http://www.sonarqube.org/downloads/ 

- SonarQube Scanner for MSBuild 2.0 http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Scanner+for+MSBuild 

- SonarQube C# Plugin http://docs.sonarqube.org/display/PLUG/C%23+Plugin 

二、安装SonarQube

这里介绍如何在Windows Server 2012上,使用SQl Server 2014数据库安装和配置SnoarQube服务器。如果你已经拥有了一个SonarQube服务器,则可以忽略这一章节。

至于Team Foundation Server的安装,过程比较复杂,并不是本文关注的重点,你可以参考微软的官方文档https://msdn.microsoft.com/en-us/Library/vs/alm/TFS/setup/overview 安装和配置TFS服务器。

下载和安装Java JDK

SonarQube是一个基于Java的应用服务器,需要首先在服务器上下载和配置JDK http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html 

安装运行JDK以后,还需要做下面的几项配置:

- 添加服务器环境变量JAVA_HOME, 内容为Java的安装目录。例如我这里的安装目录为C:\Java\jdk1.8.0_11

- 在服务器环境变量Path中添加Java bin的目录,例如C:\Java\jdk1.8.0_11\bin

下载SonarQube安装程序

SonarQube是一个开源程序,可以从官网下载http://www.sonarqube.org/downloads/  我这里下载的是目前的最新版本5.3。
下载以后建软件解压缩到服务器的本地文件夹中,例如我这里解压缩的目录为C:\sonarqube-5.3。然后按照下面的步骤配置SonarQube服务器:

1. 在SQL Server数据库中创建一个空的名称为sonar数据库,用于存储SonarQube的数据。

2. 在SQL Server数据库中创建一个SQL Server账户sonar,密码sonar,并将该账户赋予上述数据库的dbowner权限,用于SonarQube服务器读取数据。

3. 修改SonarQube服务器的配置文件

修改配置文件:C:\sonarqube-5.3\conf\sonar.properties

删除下面的代码行注释标志#,并填写访问数据库的账户和密码,

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar

删除下面的代码行注释标志#

sonar.jdbc.url=jdbc:sqlserver://tfsdb;databaseName=sonar

配置C Sharp插件

下载SonarQube C# Plugin http://docs.sonarqube.org/display/PLUG/C%23+Plugin ,并将其复制到SonarQube的插件目录下:C:\sonarqube-5.3\extensions\plugins

注意,在SonarQube服务器启动以后,这个目录会自动生成其他默认的插件文件,例如Java, Git, SVN等插件。

启动SonarQube服务器

可以通过命令行的方式启动SonarQube服务器,也可以将SonarQube服务器配置成服务的方式,让其跟随服务器自动启动。这里介绍命令方式启动SonarQube服务器。

以管理员身份运行Windows命令行窗口,并导航到SonarQube服务器的启动目录:C:\sonarqube-5.3\bin\windows-x86-64\

运行启动命令StartSonar.bat后,如果配置正确,你会看到下面的窗口。

Figure - 启动SonarQube

此时打开浏览器,在地址栏中输入SonarQube的默认网站地址http://SonarServer:9000 ,你会看到下面的窗口

Figure – SonarQube默认首页

使用系统的默认管理员账户admin/admin登录系统,就可以完成管理员的任何工作了。

三、安装和配置TFS生成服务器

配置vNext生成服务器

可以通过TFS的XAML生成或者vNext生成,实现SonarQube的的代码分析。由于XAML是一种趋于淘汰的生成技术,这个示例中我们使用TFS最新的vNext配置SonarQube。首先需要按照下面的方法配置一台vNext生成服务器:

Figure - 下载生成服务器配置程序

Figure - 以管理员身份运行配置程序ConfigureAgent.cmd,后面的截图略

配置SonarQube Scanner Runner for MSBuild

下载SonarQube Scanner for MSBuild 2.0 http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Scanner+for+MSBuild,并执行下面的操作:

1. 将文件解压缩到这个目录C:\sonarqube-5.3\bin

2. 在环境变量的Path中添加这个路径:C:\sonarqube-5.3\bin, 确保在任意位置可以运行msbuild.sonarqube.runner.exe(如下图)

3. 修改配置文件C:\sonarqube-5.3\bin\SonarQube.Analysis.xml

修改Runner的XML配置文件,填写访问SonarQube的账户和密码

<Property Name="sonar.host.url">http://SonarServer:9000/</Property>

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

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

四、配置生成定义

为TFS的团队项目添加服务连接

Figure - 为团队项目添加Generic连接

Figure - 填写SonarQube服务器的连接信息

在SornarQube中创建一个项目,映射TFS中的生成

安装SonarQube的官方文档,需要在TFS生成定义中需要使用这里创建项目使用的项目名称密钥,以便生成任务将分析结果上传到SonarQube对应的项目中。

但是在实际操作中发现,这一步是可以忽略的,TFS的生成任务会在SonarQube中自动创建对应的项目。

Figure – 在SonarQube中创建项目

在生成定义中添加SonarQube for MSBuild任务

注意任务的排列顺序,将Begin Analysis任务放在编译之前,将End Analysis任务放在测试之后。

Figure - 在生成任务中配置SonarQube的分析任务

运行生成,查询SonarQube分析结果

配置好生成定义以后,启动生成,可以看到MSBuild的生成任务已经将代码的分析结果发送到了SonarQube服务器上。

Figure - 生成运行结果

Figure – C#项目代码的分析结果

至此,配置过程结束。

http://www.cnblogs.com/danzhang/  ALM MVP 张洪君

集成TFS Build生成与SonarQube获取代码分析结果的更多相关文章

  1. 持续集成①安装部署jenkins从git获取代码

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  2. EF自动生成的模型edmx代码分析

    edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...

  3. SonarQube执行代码分析时,报错ERROR: Unable to create symbol table for : /**/*.java java.lang.IllegalArgumentException: Unsupported class file major version 55

    若要转载本文,请务必声明出处:https://www.cnblogs.com/zhongyuanzhao000/p/11686633.html 起因: 最近正在尝试SonarQube的简单使用,但是当 ...

  4. Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!

    导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...

  5. 【CentOS】安装部署jenkins从git获取代码[转]

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  6. 使用SonarCloud对.NET Core项目进行静态代码分析

    本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析.SonarCloud是SonarQube提供的基于云的版本,特别针对于开源项目是免费的. 首先,在sonarcloud. ...

  7. 开源项目kcws代码分析--基于深度学习的分词技术

    http://blog.csdn.net/pirage/article/details/53424544 分词原理 本小节内容参考待字闺中的两篇博文: 97.5%准确率的深度学习中文分词(字嵌入+Bi ...

  8. 在 k8s 中的 jenkins 集成 sonarqube 实现代码质量检查

    不乱于心,不困于情,不畏将来,不念过往,如此安好 --<不宠无惊过一生>丰子恺 概述 关于在 k8s 中安装 jenkins 和 sornarqube 可以查看下面的文章: 在 k8s 中 ...

  9. TFS Build做Web应用持续集成发布的一个技巧

    由于面向接口编程的关系,许多实现往往是动态注入运行,在一个项目中直接引用实现dll编译是不合理的.通常我们会在Post Build Event中添加一些xcopy命令将运行时才需要的dll复制到输出目 ...

随机推荐

  1. 重新想象 Windows 8 Store Apps (48) - 多线程之其他辅助类: SpinWait, SpinLock, Volatile, SynchronizationContext, CoreDispatcher, ThreadLocal, ThreadStaticAttribute

    [源码下载] 重新想象 Windows 8 Store Apps (48) - 多线程之其他辅助类: SpinWait, SpinLock, Volatile, SynchronizationCont ...

  2. ningx配置ModSecurity重启出现兼容性问题:ModSecurity: Loaded PCRE do not match with compiled!的解决方法

    nginx开启错误日志,然后重启nginx,出现如下信息: 2016/12/03 09:40:38 [notice] 18858#0: ModSecurity for nginx (STABLE)/2 ...

  3. WEB前端开发和调试的工具

    前端开发在线课程: http://yun.lu/student/course/list/8   1.HBuilder:WEB开发IDE工具 hbulider,内核是eclipse,Dcloud公司出品 ...

  4. [maven] 生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  5. Echarts图表控件使用总结1(Line,Bar)

    问题篇(详解):http://www.cnblogs.com/hanyinglong/p/4708337.html 1.前言 a.在系统开发过程中可能会使用到图表控件,一个好的图标控件可以使我们的网站 ...

  6. MySQL数据库中字符集的问题

    今天在做Hibernate案例,往mysql中写记录的时候,出现ERROR: Incorrect string value: '\xE5\x8A\xA0\xE5\x86\x85...' for col ...

  7. Configure SSL for SharePoint 2013

    http://blogs.msdn.com/b/fabdulwahab/archive/2013/01/21/configure-ssl-for-sharepoint-2013.aspx In thi ...

  8. AsyncTask.cancel()的结束问题

    实际项目中有这么一个问题,用户进入详情界面,那么我们就要网络加载数据并展现在UI上,这个加载用线程或者异步. 这里就拿项目中统一用异步任务来获取网络数据把. 用户可能会有这么一个操作,它在一个商品(说 ...

  9. 最简MacOs10.8安装

    虚拟机中安装Mac Os X的方法网上很多很多,但是对刚接触的朋友来讲肯定不是一件容易的事,这个自己深有体会,包括去年已经装好过,今年再找教程安装都装不起来,期间还出现了各种问题,幸好去年装好之后备份 ...

  10. android 短信助手demo

    关于意图Intent: 显式意图:必须指定要激活的组件的完整包名和类名(应用程序之间耦合在一起) 一般激活自己应用的组件的时候采用显式意图 隐式意图:只需要指定动作和数据就可以(好处是应用程序之间没有 ...