Sonar 是一款开源的代码分析工具,可能有很多人已经用过,本篇文章主要是讲解如何在 Docker 里面安装 Sonar 并且用其来分析 .Net Core 项目。
Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。
与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
1.安装安装的话,秉承一贯的懒人原则,在本篇文章当中是直接使用的 Sonar 的 Docker 镜像来进行安装配置的。
1.1 安装 Docker安装 Docker-CE 的教程在我的这篇文章里面有讲到过,这里就不再多加赘述。
1.2 建立私有网络执行以下命令:
docker network create sonar将会创建一个 Docker 内部网络,名字为 sonar。
1.2 启动 PostgreSql 容器使用以下命令拉取 PostgreSql 的镜像:
docker pull postgres然后我们启动一个 PostgreSql 容器,名字叫做 sonar-db。
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 镜像:
docker pull sonarqube启动 Sonar 容器:
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 就可以运行好环境的。
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 服务器上,运行以下命令:
docker-compose up如果需要重启的话则运行以下命令即可:
docker-compose restart sonarqube 1.4 新建项目Sonar 镜像安装的默认管理员账号和密码都是 admin,直接输入进入到 Sonar 的项目管理界面。
步骤:
首先输入你的项目名称,生成一个 Token。
点击生成之后,点击 Continue ,这时候会提示你选择项目类型,并输入一个项目的唯一 Key,这里我还是输入的 TestProject。
点击 Done 之后右边会生成相关的 Scanner 执行步骤,你可以 Copy 下来。
2.分析如果你需要分析项目的话,有两种选择,第一种就是使用工具1,而如果你是拥有 DotNet Core 2.1 环境的话可以使用 Global Tool 来直接安装分析器。
2.1 安装 dotnet scanner参照 Sonar 官方的文档 ,运行命令行工具,并且键入以下命令:
dotnet tool install --global dotnet-sonarscanner --version 4.3.1就成功安装好 Sonar Scanner 了。
2.2 分析项目跳转到你需要分析的项目的根目录,这里我新建了一个测试用的控制台程序,代码很简单,传入了一个 NULL 对象,并且判断这个变量不等于空。
using System; namespace TestConsoleApp { class Program { static void Main(string[] args) { string c = null; if (c != null) { Console.WriteLine("不可能执行的代码."); } Console.WriteLine("Hello World!"); } } }