7.5 KiB
插件测试与部署
**本文档引用的文件** - [AbpTestsBase.cs](file://aspnet-core/tests/LINGYUN.Abp.TestBase/LINGYUN/Abp/Tests/AbpTestsBase.cs) - [deploy.ps1](file://deploy/deploy.ps1) - [build-aspnetcore-common.ps1](file://build/build-aspnetcore-common.ps1) - [docker-compose.override.yml](file://docker-compose.override.yml) - [appsettings.Testing.json](file://aspnet-core/tests/LINGYUN.Abp.Dapr.Actors.Tests/appsettings.Testing.json)目录
引言
本指南详细说明了插件测试与部署的完整流程,涵盖单元测试、集成测试和端到端测试策略,CI/CD自动化流程,以及插件打包、版本发布、灰度部署和回滚机制,确保插件发布的可靠性和可追溯性。
测试策略与框架
单元测试与集成测试
项目采用基于ABP框架的测试体系,通过AbpTestsBase<TStartupModule>作为所有测试类的基础类,提供集成测试支持。测试框架会创建独立的测试数据库环境,确保测试的隔离性和可重复性。
测试组织结构清晰,每个模块都有对应的测试项目,如LINGYUN.Abp.Aliyun.Tests、LINGYUN.Abp.EntityFrameworkCore.Tests等,遵循命名规范[模块名].Tests。测试类通常继承自AbpTestsBase,并使用特定的测试模块配置。
classDiagram
class AbpTestsBase~TStartupModule~ {
+SetAbpApplicationCreationOptions(options)
+WithUnitOfWorkAsync(func)
+WithUnitOfWorkAsync(options, func)
+WithUnitOfWorkAsync~TResult~(func)
+WithUnitOfWorkAsync~TResult~(options, func)
}
class AbpIntegratedTest~TStartupModule~ {
<<abstract>>
}
AbpTestsBase~TStartupModule~ --|> AbpIntegratedTest~TStartupModule~ : 继承
AbpTestsBase~TStartupModule~ : where TStartupModule : IAbpModule
图示来源
- AbpTestsBase.cs
本节来源
- AbpTestsBase.cs
Mock服务与测试配置
测试环境通过appsettings.Testing.json文件进行配置,如Dapr测试中配置了远程服务基地址。项目使用ABP框架的依赖注入系统,可以轻松地替换服务实现进行Mock测试。
测试中使用ServiceProvider.GetRequiredService<T>()获取服务实例,支持在测试中替换特定服务的实现。通过WithUnitOfWorkAsync方法,可以在单元工作上下文中执行测试代码,确保数据库操作的事务性。
sequenceDiagram
participant Test as 测试类
participant ServiceProvider as 服务提供者
participant Service as 业务服务
participant DB as 数据库
Test->>ServiceProvider : GetRequiredService<T>()
ServiceProvider-->>Test : 返回服务实例
Test->>Service : 调用业务方法
Service->>DB : 数据库操作
DB-->>Service : 返回结果
Service-->>Test : 返回业务结果
Test->>Test : 验证结果
Note over Test,DB : 在WithUnitOfWorkAsync上下文中执行
图示来源
- AbpTestsBase.cs
- appsettings.Testing.json
本节来源
- AbpTestsBase.cs
- appsettings.Testing.json
CI/CD流水线
自动化测试流程
CI/CD流水线在代码提交后自动触发,执行完整的测试套件。构建脚本build-aspnetcore-common.ps1定义了服务数组、解决方案数组和迁移数组,为自动化构建和测试提供配置基础。
流水线首先构建所有解决方案,然后运行单元测试和集成测试。测试覆盖率通过.NET内置工具进行检查,质量检查包括代码风格、安全漏洞扫描和依赖项分析。
flowchart TD
A[代码提交] --> B[触发CI/CD流水线]
B --> C[构建所有解决方案]
C --> D[运行单元测试]
D --> E[运行集成测试]
E --> F[代码覆盖率检查]
F --> G[质量检查]
G --> H{检查通过?}
H --> |是| I[构建Docker镜像]
H --> |否| J[终止流水线]
I --> K[推送镜像到仓库]
图示来源
- build-aspnetcore-common.ps1
本节来源
- build-aspnetcore-common.ps1
流水线配置
CI/CD流水线由PowerShell脚本驱动,build-aspnetcore-common.ps1定义了所有服务的路径和名称映射,为自动化部署提供基础配置。每个服务的构建和测试都在独立的上下文中执行,确保构建的可靠性。
插件打包与发布
打包流程
插件打包通过deploy.ps1脚本执行,首先发布.NET项目到Publish目录,然后复制Dockerfile文件。前端项目通过pnpm进行构建,生成静态资源文件。
flowchart TD
A[开始打包] --> B[发布.NET项目]
B --> C[复制Dockerfile]
C --> D[构建前端项目]
D --> E[生成Docker镜像]
E --> F[推送镜像到仓库]
F --> G[更新部署配置]
G --> H[完成打包]
图示来源
- deploy.ps1
本节来源
- deploy.ps1
版本发布
版本发布通过pack.ps1脚本管理,支持将包文件保存到本地NuGet目录。发布过程包括版本号更新、包文件生成和签名等步骤,确保发布的插件具有完整的版本信息和安全性。
部署策略
自动化部署流程
部署流程由deploy.ps1脚本完整管理,包括中间件部署、数据库初始化、数据库迁移、程序包发布、前端构建和应用程序运行等步骤。
sequenceDiagram
participant Deploy as 部署脚本
participant Docker as Docker
participant DB as 数据库
participant App as 应用程序
Deploy->>Docker : 部署中间件
Deploy->>DB : 等待数据库初始化
Deploy->>DB : 创建数据库
Deploy->>DB : 执行数据库迁移
Deploy->>Deploy : 发布.NET程序包
Deploy->>Deploy : 构建前端项目
Deploy->>Docker : 运行应用程序
Docker-->>App : 应用程序运行
Deploy->>Deploy : 部署完成
图示来源
- deploy.ps1
本节来源
- deploy.ps1
灰度部署与回滚
通过docker-compose.override.yml文件配置服务的构建上下文和卷映射,支持灰度部署。每个服务独立部署,可以通过更新特定服务的镜像实现灰度发布。
回滚机制通过保留之前的Docker镜像实现,当新版本出现问题时,可以快速切换回之前的稳定版本。部署脚本支持指定不同的compose文件,便于管理不同环境的部署配置。
graph TB
subgraph 生产环境
A[当前版本]
B[新版本]
C[旧版本]
end
A --> |正常流量| D[用户]
B --> |灰度流量| D
C --> |回滚目标| A
style B stroke:#ff9900,stroke-width:2px
style C stroke:#ff0000,stroke-width:2px
图示来源
- docker-compose.override.yml
本节来源
- docker-compose.override.yml
结论
本指南详细介绍了插件测试与部署的完整流程,从测试策略到CI/CD流水线,再到打包发布和部署策略。通过标准化的流程和自动化工具,确保了插件发布的可靠性和可追溯性,为系统的稳定运行提供了保障。