C# 项目的 CI/CD:从 A 到 Z 的 GitHub Actions 指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 C# 项目需要 CI/CD?

\n

使用 C# 和 .NET 平台开发现代应用程序不仅需要高质量的代码,还需要可靠的交付流程。手动构建、测试和部署不仅速度慢,而且容易出错。这时 CI/CD(持续集成/持续部署)就派上了用场——这是一种自动化软件生命周期所有阶段的实践。

\n

GitHub Actions 是 GitHub 内置的工具,允许您直接在仓库中创建强大的流水线。在本文中,我们将探讨如何使用 GitHub Actions 为 C# 项目配置完整的 CI/CD:从简单的构建到自动部署。您将学习如何编写 YAML 配置、优化测试以及避免常见错误。

\n\n

GitHub Actions 的 .NET 基础

\n

什么是 workflow 和 job?

\n

Workflow(工作流程)是一个自动化的流程,由特定事件(push、pull request、创建 release)触发。它定义在 .github/workflows/*.yml 文件中。Workflow 由一个或多个 job(任务)组成,这些 job 在 runner(虚拟机)上执行。每个 job 可以包含一系列 steps(步骤)。

\n

对于 C# 项目,关键步骤包括恢复依赖项(dotnet restore)、构建(dotnet build)、运行测试(dotnet test)和发布(dotnet publish)。

\n\n

.NET 的基本 workflow 模板

\n

以下是一个用于构建和测试 C# 项目的最小 workflow。将此代码保存到文件 .github/workflows/dotnet-ci.yml 中。

\n
name: .NET CI\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    - name: Setup .NET\n      uses: actions/setup-dotnet@v4\n      with:\n        dotnet-version: '8.0.x'\n\n    - name: Restore dependencies\n      run: dotnet restore\n\n    - name: Build\n      run: dotnet build --no-restore --configuration Release\n\n    - name: Run tests\n      run: dotnet test --no-build --configuration Release --verbosity normal
\n

关键行解析:

\n
    \n
  • actions/checkout@v4 — 将仓库克隆到执行环境中。
  • \n
  • actions/setup-dotnet@v4 — 安装指定版本的 .NET SDK。
  • \n
  • dotnet restore — 下载 NuGet 包。
  • \n
  • dotnet build --configuration Release — 以 Release 模式构建项目。
  • \n
  • dotnet test — 运行解决方案中的所有测试。
  • \n
\n\n

高级配置:缓存和构建矩阵

\n

NuGet 包缓存

\n

每次运行 workflow 都从干净的环境开始。为了加速这个过程,可以缓存 ~/.nuget/packages 文件夹。这对于拥有数十个依赖项的大型项目尤其有用。

\n
steps:\n  - uses: actions/cache@v4\n    with:\n      path: ~/.nuget/packages\n      key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}\n      restore-keys: |\n        ${{ runner.os }}-nuget-\n  - run: dotnet restore
\n

缓存键基于项目文件(.csproj)的哈希值构建。如果依赖项没有变化,缓存将在几秒钟内恢复。

\n\n

构建矩阵(Matrix Strategy)

\n

如果您的应用程序需要针对不同的 .NET 版本或操作系统运行,请使用矩阵。GitHub Actions 会自动为每个组合创建一个单独的 job。

\n
jobs:\n  build:\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n        dotnet: ['6.0.x', '8.0.x']\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: Setup .NET\n                

博客

书籍推荐