zoukankan      html  css  js  c++  java
  • .net core 单元测试——sonar

    原文:使用 SonarQube 来分析 .NET Core 项目代码问题

    0.介绍#

    Sonar 是一款开源的代码分析工具,可能有很多人已经用过,本篇文章主要是讲解如何在 Docker 里面安装 Sonar 并且用其来分析 .Net Core 项目。

    Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。

    与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

    1.安装#

    安装的话,秉承一贯的懒人原则,在本篇文章当中是直接使用的 Sonar 的 Docker 镜像来进行安装配置的。

    1.1 安装 Docker#

    安装 Docker-CE 的教程在我的这篇文章里面有讲到过,这里就不再多加赘述。

    1.2 建立私有网络#

    执行以下命令:

    Copy
    docker network create sonar
    

    将会创建一个 Docker 内部网络,名字为 sonar。

    1.2 启动 PostgreSql 容器#

    使用以下命令拉取 **PostgreSql **的镜像:

    Copy
    docker pull postgres
    

    然后我们启动一个 PostgreSql 容器,名字叫做 sonar-db。

    Copy
    docker run -d --name sonar-db --network sonar -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar postgres
    

    这里启动容器的时候指定了容器的网络是 sonar-db ,那么后面在 sonar 容器启动的时候加入这个网络即可,其余两个环境变量是用作 PostgreSql 数据库默认的账号密码。

    1.3 启动 Sonar 容器#

    使用以下命令拉取 Sonar 镜像:

    Copy
    docker pull sonarqube
    

    启动 Sonar 容器:

    Copy
    docker run -d --name sonar --network sonar -p 9000:9000 -p 9092:9092 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-db:5432/sonar sonarqube
    

    至此,我们的 Sonar 已经部署完成了,访问你服务器或者本地 IP 的 9000 端口即可看到我们最终的效果。

    效果图

    注意:在这里我们没有针对这两个容器进行数据卷挂载,挂载可以参考下列 YML 文件进行自己的配置,推荐在实际生产环境部署的时候使用 Docker-Compose 来进行部署。

    1.3:扩展:使用 Docker-Compose 来运行 Sonar#

    如果你每次都需要手动输入这么多命令,其实很麻烦的,在 Sonar 官方的 GitHub 上面有一个 docker-compose.yml 文件,你直接通过 Docker-Compose 就可以运行好环境的。

    Copy
    version: "2"
    
    services:
      sonarqube:
        image: sonarqube
        ports:
          - "9000:9000"
        networks:
          - sonarnet
        environment:
          - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
        volumes:
          - sonarqube_conf:/opt/sonarqube/conf
          - sonarqube_data:/opt/sonarqube/data
          - sonarqube_extensions:/opt/sonarqube/extensions
          - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
    
      db:
        image: postgres
        networks:
          - sonarnet
        environment:
          - POSTGRES_USER=sonar
          - POSTGRES_PASSWORD=sonar
        volumes:
          - postgresql:/var/lib/postgresql
          # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
          - postgresql_data:/var/lib/postgresql/data
    
    networks:
      sonarnet:
        driver: bridge
    
    volumes:
      sonarqube_conf:
      sonarqube_data:
      sonarqube_extensions:
      sonarqube_bundled-plugins:
      postgresql:
      postgresql_data:
    

    将其保存到你的 Linux 服务器上,运行以下命令:

    Copy
    docker-compose up
    

    如果需要重启的话则运行以下命令即可:

    Copy
    docker-compose restart sonarqube
    

    1.4 新建项目#

    Sonar 镜像安装的默认管理员账号和密码都是 admin,直接输入进入到 Sonar 的项目管理界面。

    img

    步骤:

    • 首先输入你的项目名称,生成一个 Token。
    • 点击生成之后,点击 Continue ,这时候会提示你选择项目类型,并输入一个项目的唯一 Key,这里我还是输入的 TestProject。
    • 点击 Done 之后右边会生成相关的 Scanner 执行步骤,你可以 Copy 下来。

    2.分析#

    如果你需要分析项目的话,有两种选择,第一种就是使用工具1,而如果你是拥有 DotNet Core 2.1 环境的话可以使用 Global Tool 来直接安装分析器。

    2.1 安装 dotnet scanner#

    参照 Sonar 官方的文档 ,运行命令行工具,并且键入以下命令:

    Copy
    dotnet tool install --global dotnet-sonarscanner --version 4.3.1
    

    就成功安装好 Sonar Scanner 了。

    2.2 分析项目#

    跳转到你需要分析的项目的根目录,这里我新建了一个测试用的控制台程序,代码很简单,传入了一个 NULL 对象,并且判断这个变量不等于空。

    Copy
    using System;
    
    namespace TestConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string c = null;
                if (c != null)
                {
                    Console.WriteLine("不可能执行的代码.");
                }
    
                Console.WriteLine("Hello World!");
            }
        }
    }
    
    

    在命令行工具当中分步执行以下命令:

    Copy
    dotnet sonarscanner begin /k:"TestProject" /d:sonar.host.url="http://192.168.100.107:9000" /d:sonar.login="cfe594fd605f2e4821835e43c69da82e489c2f23"
    dotnet build
    dotnet sonarscanner end /d:sonar.login="cfe594fd605f2e4821835e43c69da82e489c2f23"
    

    这里的 /k 指定你的项目,/d 这些参数分别是你 Sonar 的地址与你刚才生成的 Token。

    动图在这里:

    img

    2.3 查看结果#

    现在来到 Sonar 的站点就可以看到我们刚刚分析的结果啦。

    1530079707597

    可以看到说我有一个 BUG。

    1530079727905

    3.汉化#

    可能有的朋友需要中文界面,这个在 Sonar 社区里面提供了中文插件,地址如下 https://github.com/SonarQubeCommunity/sonar-l10n-zh。你可以根据你的 Sonar 版本来选择下载安装哪一个版本的插件,博主目前是基于 Sonar 的 7.1 镜像的,所以下载的是 1.21 版本。

    下载完成之后,使用在之前运行容器的时候,加上 -v 参数,将容器目录 /opt/sonarqube/extensions/plugins 映射到你宿主机来,将你的这个文件拷贝到映射好的目录之下,然后重启 Sonar 容器即可。

    如果你是使用的 Docker-Compose 文件来运行的容器,只需要找到相应的卷,比如说博主插件的数据卷目录在

    /var/lib/docker/volumes/docker-ymls_sonarqube_extensions/_data 里面,我直接拷贝过去重启容器即可,大家的目录路径可能不一样,使用 docker volume ls 命令可以看到存在的数据卷,比如说我的:

    Copy
    DRIVER              VOLUME NAME
    local               09d0144ebeb8fd9dc382bb14f33d35e156c6e7f29dcfa42ac52f2b82422fab98
    local               2c6c4d351a919c9550de94797ce77805fbe178c9226e71bf99c07c44fd303af1
    local               c8b5b6cd301d4cea2e64866e12a9cf6a2bb4e257e5875449f62dede59ebc52c7
    local               docker-ymls_postgresql
    local               docker-ymls_postgresql_data
    local               docker-ymls_sonarqube_bundled-plugins
    local               docker-ymls_sonarqube_conf
    local               docker-ymls_sonarqube_data
    local               docker-ymls_sonarqube_extensions
    local               fd1127a3cec43dc992cbf0eefd053bd9dd8f3e93dc9fb0348c70048846f82308
    local               portainer_data
    

    可以看到插件目录是放在 docker-ymls_sonarqube_extensions 这个数据卷里面的。

    汉化完成的界面如下:

    4.结语#

    后面会分享如何与 Jenkins + Git(Gogs) 来进行集成的。

  • 相关阅读:
    Qt中的QString和QStringList常用方法
    Qt界面编程基本操作
    vs+qt编程相关
    C++的一些关键字用法
    Java学习-hashcode综合练习
    Java学习-HashMap练习
    Java学习-HashSet练习
    Java学习-HashMap性能简单测试
    Java学习-排序二叉树性能简单测试
    java学习-排序二叉树
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/12712391.html
Copyright © 2011-2022 走看看