17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务 ...

打印 上一主题 下一主题

主题 1952|帖子 1952|积分 5856

在将孢子记账系统从单体架构转向微服务架构的过程中,代码质量的管理变得尤为紧张。随着项目规模的扩大和团队协作的深入,我们需要一个强大的工具来帮助我们连续监控和改进代码质量。我们首选SonarQube,它能够帮助我们辨认代码中的潜在题目、技术债务和安全隐患,从而确保我们的微服务架构更加结实和可维护。
一、为什么选择SonarQube

SonarQube是一个开源的代码质量管理平台,它具有如下六大焦点功能:

  • 连续查抄代码质量
  • 提供详细的代码分析报告
  • 辨认潜在的bug和安全漏洞
  • 帮助团队遵循编码规范和最佳实践
  • 跟踪技术债务
  • 支持多种编程语言,包括C#、Java、JavaScript等
在微服务架构中,每个服务都是独立部署和运行的,因此确保每个服务的代码质量都到达高标准变得尤为紧张。SonarQube可以帮助我们实现这一目标。
二、安装与设置

2.1 安装

SonarQube的安装方式有多种,包括Docker容器、Windows安装包和Linux安装包。考虑到我们的开发情况,我们选择使用Docker进行安装,如答应以避免情况依赖题目,并且便于管理和升级。
首先,我们需要确保已经安装了Docker和Docker Compose。然后,我们可以使用以下步骤安装SonarQube:

  • 创建一个新的目录用于SonarQube:
    1. mkdir sonarqube
    2. cd sonarqube
    复制代码
  • 创建docker-compose.yml文件:
    1. version: "3"
    2. services:
    3.   sonarqube:
    4.     image: sonarqube:latest
    5.     ports:
    6.       - "8966:9000"
    7.     environment:
    8.       - SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
    9.       - SONAR_JDBC_USERNAME=sonar
    10.       - SONAR_JDBC_PASSWORD=sonar
    11.     volumes:
    12.       - sonarqube_data:/opt/sonarqube/data
    13.       - sonarqube_extensions:/opt/sonarqube/extensions
    14.       - sonarqube_logs:/opt/sonarqube/logs
    15.     depends_on:
    16.       - db
    17.   db:
    18.     image: postgres:12
    19.     environment:
    20.       - POSTGRES_USER=sonar
    21.       - POSTGRES_PASSWORD=sonar
    22.       - POSTGRES_DB=sonar
    23.     volumes:
    24.       - postgresql:/var/lib/postgresql
    25.       - postgresql_data:/var/lib/postgresql/data
    26. volumes:
    27.   sonarqube_data:
    28.   sonarqube_extensions:
    29.   sonarqube_logs:
    30.   postgresql:
    31.   postgresql_data:
    复制代码
  • 启动SonarQube:
    1. docker-compose up -d
    复制代码
等待几分钟,直到SonarQube完全启动,然后访问 http://YOUR_IP:8966,然后使用默认的管理员账户登录(用户名:admin,密码:admin),登录后系统会要求更改密码。
2.2 设置

安装完成后,我们需要进行一些基本设置:

  • 创建项目令牌:

    • 登录SonarQube后,点击右上角的用户图标,选择"My Account"

    • 在左侧菜单中选择"Security"
      在这里插入图片形貌
    • 生成一个新的令牌,并保存好,这个令牌将用于项目分析

           Tip:生成新令牌后,不要革新页面,先把生成的令牌保存起来。这时因为令牌只显示一次,革新或关闭页面再次打开页面就不会显示令牌了。
       
  • 设置质量门禁:

    • 在SonarQube中,点击"Quality Gates"菜单
    • 创建一个新的Quality Gate,设置以下条件:

      • 代码覆盖率 > 80%
      • 重复代码 < 3%
      • 技术债务比率 < 5%
      • 严峻题目 = 0
      • 阻断题目 = 0



  1. >Tip:在最新版的SonarQube中,"严重问题"被拆分为可高、中、低三个级别,因此这里我们需要都设置为0
复制代码
三、与.NET项目的集成

3.1 安装SonarScanner

要与.NET 8项目集成,我们需要安装dotnet-sonarscanner工具。以下是详细的安装和设置步骤:

  • 安装dotnet-sonarscanner
    1. dotnet tool install --global dotnet-sonarscanner
    复制代码
  • 验证安装
    1. dotnet sonarscanner --version
    复制代码
3.2 设置项目分析


  • 在项目根目录创建sonar-project.properties文件:
    1. sonar.projectKey=SporeAccounting
    2. sonar.projectName=孢子记账系统
    3. sonar.projectVersion=1.0
    4. sonar.sources=.
    5. sonar.cs.vstest.reportsPaths=**/*.trx
    6. sonar.cs.opencover.reportsPaths=**/coverage.opencover.xml
    复制代码
  • 在GitHub Actions CI/CD流程中添加SonarQube分析步骤:
    在GitHub仓库中,我们可以使用GitHub Actions来自动化SonarQube分析流程。以下是设置步骤:

    • 在仓库中创建.github/workflows目录
    • 创建sonarqube.yml文件,内容如下:
      1. name: SonarQube Analysis
      2. on:
      3.   push:
      4.     branches: [ main, Microservices, MonomerApplication ]
      5.   pull_request:
      6.     branches: [ main, Microservices, MonomerApplication ]
      7. jobs:
      8.   sonarqube:
      9.     runs-on: ubuntu-latest
      10.     steps:
      11.       - uses: actions/checkout@v3
      12.         with:
      13.           fetch-depth: 0  # 获取完整历史记录以进行增量分析
      14.       - name: Set up .NET
      15.         uses: actions/setup-dotnet@v3
      16.         with:
      17.           dotnet-version: '8.0.x'
      18.       - name: Install dependencies
      19.         run: dotnet restore
      20.       - name: Build
      21.         run: dotnet build --no-restore
      22.       - name: Test
      23.         run: dotnet test --no-build --verbosity normal --collect:"XPlat Code Coverage" --results-directory ./coverage
      24.       - name: SonarQube Scan
      25.         uses: SonarSource/sonarqube-scan-action@master
      26.         env:
      27.           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      28.           SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
      29.         with:
      30.           args: >
      31.             -Dsonar.projectKey=SporeAccounting
      32.             -Dsonar.projectName=孢子记账系统
      33.             -Dsonar.projectVersion=1.0
      34.             -Dsonar.cs.opencover.reportsPaths=./coverage/**/coverage.opencover.xml
      35.             -Dsonar.cs.vstest.reportsPaths=./coverage/**/*.trx
      复制代码

  • 在GitHub仓库中设置Secrets:

    • 进入仓库的Settings > Secrets and variables > Actions
    • 添加以下secrets:

      • SONAR_TOKEN: SonarQube生成的令牌
      • SONAR_HOST_URL: SonarQube服务器URL,例如http://your-sonarqube-server:8966


  • 提交并推送这些更改到GitHub仓库
    如今,每次推送到main、Microservices、MonomerApplication分支,或者创建针对这些分支的Pull Request时,GitHub Actions都会自动运行SonarQube分析。
3.3 当地开发情况集成

在当地开发情况中,我们可以使用以下下令进行代码分析:
  1. # 开始分析
  2. dotnet sonarscanner begin /k:"SporeAccounting" /d:sonar.host.url="http://YOUR_IP:8966" /d:sonar.login="YOUR_TOKEN"
  3. # 构建项目
  4. dotnet build
  5. # 运行测试
  6. dotnet test
  7. # 结束分析并上传结果
  8. dotnet sonarscanner end /d:sonar.login="YOUR_TOKEN"
复制代码
3.4 设置代码覆盖率收集

为了获得准确的代码覆盖率报告,我们需要设置OpenCover:

  • 安装OpenCover NuGet包:
  1. dotnet tool install --global dotnet-opencover
复制代码

  • 使用OpenCover运行测试并生成覆盖率报告:
  1. dotnet-opencover -target:"dotnet" -targetargs:"test" -output:"coverage.opencover.xml" -filter:"+[SporeAccounting*]* -[*.Tests]*"
复制代码

  • 在SonarQube中设置覆盖率报告路径:
  1. sonar.cs.opencover.reportsPaths=coverage.opencover.xml
复制代码
四、总结

在将孢子记账系统从单体架构转向微服务架构的过程中,SonarQube的引入为我们提供了一个强大的代码质量管理解决方案。通过本文的详细指导,我们完成了以下关键使命:情况搭建、工具集成、自动化流程、佳实践。通过这些步骤,我们为孢子记账系统的微服务架构建立了一个完整的代码质量管理体系。这不但有助于提高代码质量,还能帮助团队更好地协作,确保系统的恒久可维护性和稳定性。在微服务架构中,每个服务都是独立部署和运行的,因此确保每个服务的代码质量都到达高标准变得尤为紧张。SonarQube正是帮助我们实现这一目标的关键工具。
后续我们可以进一步优化SonarQube的设置,根据项目的实际需求调整质量门禁规则,并连续改进代码质量管理的流程。这将确保我们的微服务架构始终保持高质量、可维护和可扩展的状态。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表