SonarQube 搭建代码质量管理平台(二)

通过 SonarQube 搭建代码质量管理平台(一) 的介绍,如果每次都需要手动执行 sonar-scanner ,想想也是醉了,所以我们需要进一步完善 SonarQube 进行自动化代码分析。

从官方文档的 Scanners 部分可以看出,Scanner 支持 MSBuild、Maven、Gradle、Ant、Jenkins 等。本文将介绍使用 Jenkins 进行自动化代码分析, 测试项目的代码基于 .NET 开发,所以会用到 MSBuild 相关命令。

安装 Jenkins

根据操作系统 下载 Jenkins,我使用的是 Windows ,直接都下一步就可以了。

Windows 环境下 Jenkins 安装后默认登录身份是 “本地系统”,会无法访问,所以需要修改登录身份,我这里使用的是账户方式

Jenkins 登录身份

启动成功后访问 http://localhost:8080/

Jenkins 配置 Github

  1. 在 Github 生成 Personal access tokens,设置 token 相关权限

    access token
    access token scope

  2. Jenkins 配置 GitHub Server

    Jenkins 安装后默认已包含 GitHub,在 “系统管理” => “系统设置” 中找到 Github,然后在 Credentials 处添加全局凭据,类型选 Secret text,Secret 处输入上一步生成的 access token

    GitHub Server

    Secret text

添加完成后可点击 Test connection 进行测试

如果使用的是 Gitlab,需要在 Jenkins 中安装 Gitlab 插件,全局凭据添加 GitLab API token,token 使用 Gitlab Account 下的 Private token, 其他配置基本类似

Jenkins 配置 SonarQube

  1. 在 SonarQube 中生成 Server authentication token

    登录 SonarQube 后,在 “My Account” => “Securiy” 中生成 toekn

    SonarQube token
    重新进入这个页面之前生成的 token 就看不到的,只能看到一次,我呵呵

  2. 在 Jenkins 的管理插件中安装 SonarQube Scanner 插件

  3. 配置 SonarQube Sever,这部分和配置 GitHub Server 类似,在 “系统管理” => “系统设置” 中找到 SonarQube servers
    Name:随意;
    Server URL:为启动的 SonarQube 服务地址,我这里使用本地启动的默认地址 http://localhost:9000
    Server authentication token: 输入之前生成的 token;

    SonarQube server

  4. 配置 SonarScanner for MSBuild

    在 “系统管理” => “全局工具配置” 找到 SonarScanner for MSBuild(
    测试项目是基于 .NET),官方提供了 .NET Framework 和 .NET Core 两个版本,我们可以先都加上,之后根据实际项目选择使用哪个。有两中方式配置 MSBUILD_SQ_SCANNER_HOME,可以选择自动安装或手动配置,手动配置需要单独下载,我使用的是手动配置方式

    SonarScanner for MSBuild

    Jenkins 任务配置

上面是 Jenkins 的一些全局配置,下面需要对单个任务进行配置。新建一个 “构建一个自由风格的软件项目” 类型的任务 “Test”

配置项目的仓库地址,这个项目就是要进行代码分析的项目,在 Credentials 处添加凭据,这里添加一个用户名密码类型的凭据(其他类型的也可以,能访问这个仓库即可)。在添加凭据后,会自动检测是否有效,如果无效会直接出现错误提示

Task Config

Username with password

在 “构建” 中增加构建步骤:

Build steps

  1. 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)、排除哪些文件(夹) 等,参考

  2. 执行 Windows 批处理命令

    先通过 nuget restore(如果没有安装 nuget 命令的需要提前安装) 还原依赖的 Nuget 包,然后使用 MSBuild 批处理命令重新生成项目。这一步 Build 可能会出现各种奇葩的问题,主要就是少了一些依赖包,建议在安装 Jenkins 的机器安装上 VS,然后将 MSBuild 加入环境变量,我的机器添加了两个路径:

    1
    2
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
    C:\Program Files (x86)\NuGet
  3. SonarScanner for MSBuild - End Analysis

配置完成后保存,然后点击 “立即构建” 试试效果,构建成功后我们将通过 SonarQube UI 看到对 Test 项目的分析结果

Analysis result

这就实现了将 Jenkins 与 SonarQube 关联起来,代码构建完成后会把结果发送到 SonarQube 中,我们还可以根据需要在 Jenkins 任务中设置构建执行时间,比如每天早上9点执行一次

Trigger time

SonarQube 中有 Webhook 的功能,当接收到一次提交,可以将这次的分析结果发送给设置的 Webhook 地址,这样我们可以通过消息(比如短信、邮件、微信等)将有问题的分析结果及时的通知到相关负责人

参考链接

如果对你有帮助就好