简介
本指南向您展示如何构建、测试和发布 .NET 包。
GitHub 托管的运行器具有一个包含预安装软件的工具缓存,其中包括 .NET Core SDK。有关最新软件和预安装的 .NET Core SDK 版本的完整列表,请参阅 GitHub 托管的运行器上安装的软件。
先决条件
您应该已经熟悉 YAML 语法以及它在 GitHub Actions 中的用法。有关更多信息,请参阅 "GitHub Actions 的工作流语法."
我们建议您对 .NET Core SDK 有基本了解。有关更多信息,请参阅 开始使用 .NET。
使用 .NET 启动工作流
要快速入门,请将启动工作流添加到存储库的 .github/workflows
目录中。
GitHub 为 .NET 提供了一个启动工作流,该工作流应该适用于大多数 .NET 项目。本指南的后续部分将提供有关如何自定义此启动工作流的示例。
-
在 GitHub.com 上,导航到存储库的主页。
-
在您的仓库名称下,点击 操作.
-
如果您已经在您的仓库中拥有工作流,请点击 **新建工作流**。
-
“选择工作流”页面显示了一系列推荐的入门工作流。搜索“dotnet”。
-
在“.NET”工作流上,点击 **配置**。
-
根据需要编辑工作流。例如,更改 .NET 版本。
-
点击 **提交更改**。
dotnet.yml
工作流文件将被添加到您的仓库的.github/workflows
目录中。
指定 .NET 版本
要在 GitHub 托管的运行器上使用预安装的 .NET Core SDK 版本,请使用 setup-dotnet
操作。此操作会在每个运行器上的工具缓存中找到特定版本的 .NET,并将必要的二进制文件添加到 PATH
。这些更改将在作业的剩余时间内持续存在。
setup-dotnet
操作是使用 GitHub Actions 中 .NET 的推荐方法,因为它确保了不同运行器和不同 .NET 版本之间的一致行为。如果您使用的是自托管运行器,则必须安装 .NET 并将其添加到 PATH
。有关更多信息,请参阅 setup-dotnet
操作。
使用多个 .NET 版本
name: dotnet package
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
dotnet-version: [ '3.1.x', '6.0.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup dotnet ${{ matrix.dotnet-version }}
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ matrix.dotnet-version }}
# You can test your matrix by printing the current dotnet version
- name: Display dotnet version
run: dotnet --version
使用特定 .NET 版本
您可以配置您的作业以使用特定版本的 .NET,例如 6.0.22
。或者,您可以使用语义版本语法来获取最新的次要版本。此示例使用 .NET 6 的最新次要版本。
- name: Setup .NET 6.x
uses: actions/setup-dotnet@v3
with:
# Semantic version range syntax or exact version of a dotnet version
dotnet-version: '6.x'
安装依赖项
GitHub 托管的运行器已安装 NuGet 包管理器。您可以使用 dotnet CLI 从 NuGet 包注册表安装依赖项,然后再构建和测试您的代码。例如,下面的 YAML 安装了 Newtonsoft
包。
steps:
- uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.x'
- name: Install dependencies
run: dotnet add package Newtonsoft.Json --version 12.0.1
缓存依赖项
您可以使用可选的cache
输入为将来的工作流缓存 NuGet 依赖项。例如,下面的 YAML 缓存 NuGet 的global-packages
文件夹,然后安装Newtonsoft
包。第二个可选输入cache-dependency-path
可用于指定依赖项文件路径:packages.lock.json
。
有关更多信息,请参阅“缓存依赖项以加快工作流速度”。
steps:
- uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.x'
cache: true
- name: Install dependencies
run: dotnet add package Newtonsoft.Json --version 12.0.1
注意:根据依赖项的数量,使用依赖项缓存可能更快。具有许多大型依赖项的项目应该会看到性能提升,因为它减少了下载所需的时间。具有较少依赖项的项目可能不会看到明显的性能提升,甚至可能会看到轻微的下降,因为 NuGet 会安装缓存的依赖项。性能因项目而异。
构建和测试您的代码
您可以使用与本地相同的命令来构建和测试您的代码。此示例演示如何在作业中使用dotnet build
和dotnet test
steps:
- uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.x'
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build
- name: Test with the dotnet CLI
run: dotnet test
将工作流数据打包为工件
工作流完成后,您可以上传生成的工件以进行分析。例如,您可能需要保存日志文件、核心转储、测试结果或屏幕截图。以下示例演示了如何使用upload-artifact
操作上传测试结果。
有关更多信息,请参阅“将工作流数据存储为工件”。
name: dotnet package
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
dotnet-version: [ '3.1.x', '6.0.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup dotnet
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ matrix.dotnet-version }}
- name: Install dependencies
run: dotnet restore
- name: Test with dotnet
run: dotnet test --logger trx --results-directory "TestResults-${{ matrix.dotnet-version }}"
- name: Upload dotnet test results
uses: actions/upload-artifact@v4
with:
name: dotnet-results-${{ matrix.dotnet-version }}
path: TestResults-${{ matrix.dotnet-version }}
# Use always() to always run this step to publish test results when there are test failures
if: ${{ always() }}
发布到包注册表
您可以配置您的工作流,以便在 CI 测试通过时将您的 .NET 包发布到包注册表。您可以使用存储库机密来存储发布二进制文件所需的任何令牌或凭据。以下示例使用dotnet core cli
创建并发布到 GitHub Packages 的包。
name: Upload dotnet package
on:
release:
types: [created]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.x' # SDK Version to use.
source-url: https://nuget.pkg.github.com/<owner>/index.json
env:
NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
- run: dotnet build --configuration Release <my project>
- name: Create the package
run: dotnet pack --configuration Release <my project>
- name: Publish the package to GPR
run: dotnet nuget push <my project>/bin/Release/*.nupkg