通过 SonarQube 搭建代码质量管理平台(一) 的介绍,如果每次都需要手动执行 sonar-scanner ,想想也是醉了,所以我们需要进一步完善 SonarQube 进行自动化代码分析。
从官方文档的 Scanners 部分可以看出,Scanner 支持 MSBuild、Maven、Gradle、Ant、Jenkins 等。本文将介绍使用 Jenkins 进行自动化代码分析, 测试项目的代码基于 .NET 开发,所以会用到 MSBuild 相关命令。
根据操作系统 下载 Jenkins ,我使用的是 Windows ,直接都下一步就可以了。
Windows 环境下 Jenkins 安装后默认登录身份是 “本地系统”,会无法访问,所以需要修改登录身份,我这里使用的是账户方式
启动成功后访问 http://localhost:8080/
在 Github 生成 Personal access tokens,设置 token 相关权限
Jenkins 配置 GitHub Server
Jenkins 安装后默认已包含 GitHub,在 “系统管理” => “系统设置” 中找到 Github,然后在 Credentials 处添加全局凭据,类型选 Secret text,Secret 处输入上一步生成的 access token
添加完成后可点击 Test connection 进行测试
如果使用的是 Gitlab,需要在 Jenkins 中安装 Gitlab 插件,全局凭据添加 GitLab API token,token 使用 Gitlab Account 下的 Private token, 其他配置基本类似
在 SonarQube 中生成 Server authentication token
登录 SonarQube 后,在 “My Account” => “Securiy” 中生成 toekn
重新进入这个页面之前生成的 token 就看不到的,只能看到一次,我呵呵
在 Jenkins 的管理插件中安装 SonarQube Scanner 插件
配置 SonarQube Sever,这部分和配置 GitHub Server 类似,在 “系统管理” => “系统设置” 中找到 SonarQube servers
Name:随意;
Server URL:为启动的 SonarQube 服务地址,我这里使用本地启动的默认地址 http://localhost:9000 ;
Server authentication token: 输入之前生成的 token;
配置 SonarScanner for MSBuild
在 “系统管理” => “全局工具配置” 找到 SonarScanner for MSBuild(
测试项目是基于 .NET ),官方提供了 .NET Framework 和 .NET Core 两个版本,我们可以先都加上,之后根据实际项目选择使用哪个。有两中方式配置 MSBUILD_SQ_SCANNER_HOME,可以选择自动安装或手动配置,手动配置需要单独下载,我使用的是手动配置方式
上面是 Jenkins 的一些全局配置,下面需要对单个任务进行配置。新建一个 “构建一个自由风格的软件项目” 类型的任务 “Test”
配置项目的仓库地址,这个项目就是要进行代码分析的项目,在 Credentials 处添加凭据,这里添加一个用户名密码类型的凭据( 其他类型的也可以,能访问这个仓库即可 )。在添加凭据后,会自动检测是否有效,如果无效会直接出现错误提示
在 “构建” 中增加构建步骤:
SonarScanner for MSBuild - Begin Analysis
SonarScanner for MSBuild:选择基于 .NET Framework,因为 Test 项目是基于 .NET Framework;
Project key: 在 SoanrQube 中的项目 key;
Project name:在 SoanrQube 显示的项目名称,如果不填,则显示 Project key;
Project version:版本号;
Additional arguments:其他参数,比如可以设置只检测某种语言(/d:sonar.language=cs)、排除哪些文件(夹) 等, 参考 ;
执行 Windows 批处理命令
先通过 nuget restore( 如果没有安装 nuget 命令的需要提前安装 ) 还原依赖的 Nuget 包,然后使用 MSBuild 批处理命令重新生成项目。这一步 Build 可能会出现各种奇葩的问题,主要就是少了一些依赖包,建议在安装 Jenkins 的机器安装上 VS,然后将 MSBuild 加入环境变量,我的机器添加了两个路径:
C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin C:/Program Files (x86)/NuGet
SonarScanner for MSBuild - End Analysis
配置完成后保存,然后点击 “立即构建” 试试效果,构建成功后我们将通过 SonarQube UI 看到对 Test 项目的分析结果
这就实现了将 Jenkins 与 SonarQube 关联起来,代码构建完成后会把结果发送到 SonarQube 中,我们还可以根据需要在 Jenkins 任务中设置构建执行时间,比如每天早上9点执行一次
SonarQube 中有 Webhook 的功能,当接收到一次提交,可以将这次的分析结果发送给设置的 Webhook 地址,这样我们可以通过消息(比如短信、邮件、微信等)将有问题的分析结果及时的通知到相关负责人