目录

    1. 谁需要 SonarQube

    代码审查是高质量软件开发过程中不可缺少的重要环节,能帮助开发者及时发现代码中的 Bug,提升代码质量、可维护性。

    代码审查的维度包括,语言规范、代码风格、设计合理等。人工检查这些事项,会消耗大量的精力和时间。

    代码质量分析工具为此而生,帮助开发者从重复、繁琐地审查中解脱出来,聚焦于功能设计和实现。代码格式、语法规范、程序 Bug 等审查都交给代码质量分析工具。

    对于在 Github 等公网上托管的项目,有大量可用的 SaaS 服务,例如,Code Climate、Codacy。通常,它们与 Github 直接打通,提供免费的代码质量分析服务。

    但是在企业内网中,没有外网,代码敏感,我们需要支持私有化部署的代码质量分析工具。SonarQube 就是一个开源、可私有化部署的代码质量分析工具。

    2. SonarQube 是什么

    SonarQube 是一个开源的代码质量管理系统。特征:

    • 支持超过25种编程语言,Java、C/C++、C#、PHP、Flex、Groovy、JavaScript、Python、PL/SQL、COBOL 等
    • 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在 Bug、注释和软件设计报告
    • 提供了指标历史记录
    • 支持与 Maven、Ant、Gradle 、Atlassian Bamboo、Jenkins、Hudson 等集成
    • 支持 IDE 集成
    • 支持 JIRA、Mantis、LDAP、Fortify 等外部工具集
    • 支持扩展插件

    3. SonarQube 安装

    SonarQube 由两部分组成:

    • SonarQube,服务端平台
    • sonar-scanner,客户端代码分析、结果上报

    3.1 服务器端安装

    这里采用 docker-compose 的方式运行 SonarQube。

    新建文件 docker-compose.yml :

    version: '2'
    
    services:
      sonarqube:
        image: sonarqube:7.1
        ports:
            - "9000:9000"
        links:
            - postgres
        environment:
            - SONARQUBE_JDBC_URL:jdbc:postgresql://db:5432/sonar
    
      postgres:
        image: postgres:9.6.15
        volumes:
          - ./postgres:/var/lib/postgresql/data
        ports:
          - "5432:5432"
        environment:
          - POSTGRES_USER=sonar
          - POSTGRES_PASSWORD=sonar
    

    在文件所在目录,新建空目录 postgres ,然后执行命令:

    docker-compose up
    

    3.2 客户端安装

    以 OS X 为例,

    brew install sonar-scanner
    ==> Downloading https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar
    ######################################################################## 100.0%
    🍺  /usr/local/Cellar/sonar-scanner/4.0.0.1744: 7 files, 631KB, built in 25 seconds
    

    4. 项目测试

    使用 SonarQube 时,需要提供一些必要的参数,例如,SonarQube Server 的地址、源码位置等。

    有两种方式可以提供这些参数:

    • 通过命令行

    Python 项目:

    sonar-scanner   -Dsonar.projectKey=bk-sops   -Dsonar.sources=.   -Dsonar.host.url=http://localhost:9000    -Dsonar.language="py"
    ...
    INFO: More about the report processing at http://localhost:9000/api/ce/task?id=AWyzn_gfzoHby8A3MxUD
    INFO: Task total time: 18.141 s
    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION SUCCESS
    INFO: ------------------------------------------------------------------------
    INFO: Total time: 20.403s
    INFO: Final Memory: 7M/37M
    INFO: ------------------------------------------------------------------------
    
    • 通过配置文件

    新建配置文件 sonar-project.properties :

    sonar.projectKey=devops-python-sample
    sonar.projectName=devops-python-sample
    sonar.host.url=http://localhost:9000 #本地可以缺省,如果是远程服务,需要修改为合适地址
    sonar.projectVersion=1.0
    sonar.sources=./
    sonar.language=py
    sonar.sourceEncoding=UTF-8
    # sonar.login=xxxxxx  登陆信息
    

    执行命令:

    sonar-scanner
    ...
    INFO: More about the report processing at http://127.0.0.1:9000/api/ce/task?id=AWyzoVZVzoHby8A3MxUE
    INFO: Task total time: 5.260 s
    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION SUCCESS
    INFO: ------------------------------------------------------------------------
    INFO: Total time: 7.583s
    INFO: Final Memory: 7M/34M
    INFO: ------------------------------------------------------------------------
    

    下面查看 SonarQube 的分析页面:

    首页

    项目页面

    缺陷展示

    5. 参考