HsMod持续集成实践:自动化测试与构建流程
【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod
你是否还在为HsMod插件的手动构建和测试耗费大量时间?本文将详细介绍如何基于现有项目结构实现自动化测试与构建流程,让你只需专注于功能开发,将集成工作交给CI/CD流水线自动完成。读完本文你将掌握:Docker容器化构建、多平台适配方案、自动化测试策略以及版本号管理最佳实践。
项目构建基础架构
HsMod采用.NET Core开发框架,项目根目录下的Dockerfile定义了完整的构建流程。该文件分为两个阶段:首先使用mcr.microsoft.com/dotnet/sdk:5.0作为构建环境,通过dotnet restore还原依赖并执行dotnet publish -c Release -o out生成发布版本;然后使用轻量级的runtime:5.0镜像作为运行环境,仅包含必要的运行时依赖。
构建流程解析
# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app
COPY *.sln ./
COPY HsMod/*.csproj ./HsMod/
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
# 运行阶段
FROM mcr.microsoft.com/dotnet/runtime:5.0
WORKDIR /app
COPY --from=build-env /app/out .
EXPOSE 8080
ENTRYPOINT ["dotnet", "HsMod.dll"]
上述Dockerfile实现了构建环境隔离,确保不同开发环境下的构建结果一致性。通过多阶段构建策略,最终镜像大小从SDK镜像的1.7GB缩减至runtime镜像的200MB左右,显著提升部署效率。
自动化测试策略
虽然项目当前未包含显式的测试目录,但可基于现有代码结构实现以下测试策略:
单元测试实现
在HsMod目录下创建Test子目录,添加针对工具类的单元测试项目。以Utils.cs为例,可编写测试用例验证卡牌计数逻辑:
[TestClass]
public class UtilsTests
{
[TestMethod]
public void CardCount_CalculateTotal_ReturnsCorrectSum()
{
var cardCount = new CardCount { Common = 5, Rare = 3, Epic = 2, Legendary = 1 };
Assert.AreEqual(11, Utils.CalculateTotal(cardCount));
}
}
集成测试方案
利用项目的WebServer.cs实现API自动化测试。该类通过HttpListener提供Web服务,可使用xUnit编写HTTP请求测试:
[TestMethod]
public async Task WebServer_InfoEndpoint_Returns200()
{
WebServer.Start();
using var client = new HttpClient();
var response = await client.GetAsync("http://localhost:8080/info");
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
WebServer.Restart(); // 测试后重启服务
}
多平台构建适配
HsMod支持Windows、macOS和Linux多平台运行,CI流程需针对不同系统进行构建优化。
平台特定配置
- Windows平台:通过install.bat实现编译后自动复制到Hearthstone目录
- Unix平台:使用UnstrippedCorlibUnix下的特定运行时库
在CI配置中可使用矩阵构建策略,示例GitHub Actions配置:
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 5.0.x
- run: dotnet build --configuration Release
版本号管理机制
HsMod采用四段位版本号策略(如7.1.2.0),定义于PluginInfo.cs:
public const string PLUGIN_VERSION = "7.1.2.0";
版本号规则:
- 第一位:对应Hearthstone主版本(3 → 26.x)
- 第二位:Hearthstone更新次数
- 第三位:HsMod新功能计数
- 第四位:编译版本(bug修复计数)
在CI流程中,可通过Git标签自动更新版本号:
# 获取最新标签并递增修订号
NEW_VERSION=$(git describe --abbrev=0 --tags | awk -F. '{print $1"."$2"."$3"."$4+1}')
# 更新PluginInfo.cs中的版本号
sed -i "s/PLUGIN_VERSION = \".*\"/PLUGIN_VERSION = \"$NEW_VERSION\"/" HsMod/PluginInfo.cs
自动化部署流程
结合项目现有WebServer.cs的HTTP服务能力,可实现构建产物的自动部署:
- 构建产物打包:在Docker构建完成后,通过
docker save导出镜像 - 部署脚本集成:利用WebApi.cs的
RunShellCommandAsync方法远程执行部署命令 - 版本自动发布:配置CI在tag推送时自动创建GitHub Release,如ReadMe.md中所述的版本更新机制
持续集成最佳实践
关键监控指标
- 构建时间:跟踪
dotnet build命令执行耗时,优化依赖管理 - 测试覆盖率:使用Coverlet收集测试覆盖率数据,重点关注Patcher.cs中的补丁逻辑
- 构建成功率:监控不同平台构建成功率,及时发现平台兼容性问题
常见问题解决方案
- 依赖冲突:使用
dotnet restore --locked-mode锁定依赖版本,如ReadMe.md所示 - 构建缓存:在CI配置中缓存
~/.nuget/packages目录加速构建 - 端口占用问题:修改WebServer.cs中的
CommandConfig.webServerPort,动态分配测试端口
通过以上实践,HsMod项目可实现从代码提交到自动部署的完整CI/CD流程,显著提升开发效率并降低人为错误。建议结合项目的PluginConfig.cs配置系统,添加CI特定的环境变量支持,进一步优化自动化流程。
【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



