HsMod持续集成实践:自动化测试与构建流程

HsMod持续集成实践:自动化测试与构建流程

【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 【免费下载链接】HsMod 项目地址: 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";

版本号规则:

  1. 第一位:对应Hearthstone主版本(3 → 26.x)
  2. 第二位:Hearthstone更新次数
  3. 第三位:HsMod新功能计数
  4. 第四位:编译版本(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服务能力,可实现构建产物的自动部署:

  1. 构建产物打包:在Docker构建完成后,通过docker save导出镜像
  2. 部署脚本集成:利用WebApi.csRunShellCommandAsync方法远程执行部署命令
  3. 版本自动发布:配置CI在tag推送时自动创建GitHub Release,如ReadMe.md中所述的版本更新机制

持续集成最佳实践

关键监控指标

  1. 构建时间:跟踪dotnet build命令执行耗时,优化依赖管理
  2. 测试覆盖率:使用Coverlet收集测试覆盖率数据,重点关注Patcher.cs中的补丁逻辑
  3. 构建成功率:监控不同平台构建成功率,及时发现平台兼容性问题

常见问题解决方案

  1. 依赖冲突:使用dotnet restore --locked-mode锁定依赖版本,如ReadMe.md所示
  2. 构建缓存:在CI配置中缓存~/.nuget/packages目录加速构建
  3. 端口占用问题:修改WebServer.cs中的CommandConfig.webServerPort,动态分配测试端口

通过以上实践,HsMod项目可实现从代码提交到自动部署的完整CI/CD流程,显著提升开发效率并降低人为错误。建议结合项目的PluginConfig.cs配置系统,添加CI特定的环境变量支持,进一步优化自动化流程。

【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 【免费下载链接】HsMod 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值