GitHub Actions 和 .NET
在本概述中,你将了解 GitHub Actions 在 .NET 应用程序开发中扮演的角色。 GitHub Actions 允许源代码存储库自动执行持续集成(CI)和持续交付(CD)。 除此之外,GitHub Actions 还公开了更高级的方案 - 通过代码评审、分支管理和问题会审提供自动化挂钩。 借助 GitHub 中的 .NET 源代码,可以通过多种方式利用 GitHub Actions。
GitHub 操作
GitHub Actions 表示独立命令,例如:
- actions/checkout - 此操作签出
$GITHUB_WORKSPACE
下的存储库,使工作流可以访问它。 - actions/setup-dotnet - 此操作用于设置 .NET CLI 环境,以便用于操作。
- dotnet/versionsweeper - 此操作在 .NET 存储库中扫描不受支持的 .NET 目标版本。
虽然这些命令仅限于单一动作,但通过工作流组合,它们依旧功能强大。 在工作流组合中,定义触发工作流的 事件。 工作流运行后,系统会指示它执行各种作业。 每个作业定义任意数量的步骤。 步骤将委托给 GitHub Actions,或者调用命令行脚本。
有关详细信息,请参阅 GitHub Actions简介。 将工作流文件视为表示生成、测试和/或发布应用程序的各种步骤的组合。 许多 .NET CLI 命令 可用,其中大多数命令可以在 GitHub 操作的上下文中使用。
自定义 GitHub Actions
虽然市场中提供了大量 GitHub Actions,但你可能希望创建自己的操作。 可以创建运行 .NET 应用程序的 GitHub Actions。 有关详细信息,请参阅 教程:使用 .NET 创建 GitHub 操作
工作流文件
通过工作流文件使用 GitHub Actions。 工作流文件必须位于存储库的 .github/workflows 目录中,并且应为 YAML(*.yml或 *.yaml)。 工作流文件定义工作流组合。 工作流是由一个或多个作业组成的可配置自动化过程。 有关详细信息,请参阅 GitHub Actions的
示例工作流文件
提供了许多 .NET 工作流文件的示例,如 教程 和 快速入门。 下面是工作流文件名的几个好示例:
工作流文件名
描述
编译(或构建)源代码。 如果源代码未编译,则此操作将失败。
练习存储库中的单元测试。 为了运行测试,必须首先编译源代码—这实际上是一个生成和测试工作流(它将取代 build-validation.yml 工作流)。 失败的单元测试将导致工作流失败。
打包源代码并将其发布到目标。
分析代码是否存在安全漏洞和编码错误。 任何发现的漏洞都可能导致故障。
加密的机密
若要在工作流文件中使用 加密的机密,请使用来自 secrets
上下文对象的 工作流表达式语法 引用机密。
${{ secrets.MY_SECRET_VALUE }} # The MY_SECRET_VALUE must exist in the repository as a secret
机密值永远不会在日志中打印。 相反,它们的名称用表示其值的星号打印。 例如,当每个步骤在作业中运行时,它使用的所有值都将输出到操作日志。 机密值的显示方式如下:
MY_SECRET_VALUE: ***
重要
secrets
上下文提供 GitHub 身份验证令牌,其范围限定为存储库、分支和操作。 GitHub 提供,无需任何用户干预:
${{ secrets.GITHUB_TOKEN }}
有关详细信息,请参阅 在工作流中使用加密机密。
事件
工作流由许多不同类型的事件触发。 除了最常见的 Webhook 事件外,还有计划事件和手动事件。
示例 webhook 事件
以下示例演示如何为工作流指定 Webhook 事件触发器:
name: code coverage
on:
push:
branches:
- main
pull_request:
branches:
- main, staging
jobs:
coverage:
runs-on: ubuntu-latest
# steps omitted for brevity
在前面的工作流中,push
和 pull_request
事件将触发工作流运行。
计划事件示例
以下示例演示如何为工作流指定计划的(cron 作业)事件触发器:
name: scan
on:
schedule:
- cron: '0 0 1 * *'
# additional events omitted for brevity
jobs:
build:
runs-on: ubuntu-latest
# steps omitted for brevity
在上述工作流中,schedule
事件指定 '0 0 1 * *'
的 cron
,用于在每个月的第一天触发工作流运行。 按计划运行工作流非常适合需要长时间运行的工作流,或执行不太需要关注的操作的工作流。
手动事件示例
以下示例演示如何为工作流指定手动事件触发器:
name: build
on:
workflow_dispatch:
inputs:
reason:
description: 'The reason for running the workflow'
required: true
default: 'Manual run'
# additional events omitted for brevity
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 'Print manual run reason'
if: ${{ github.event_name == 'workflow_dispatch' }}
run: |
echo 'Reason: ${{ github.event.inputs.reason }}'
# additional steps omitted for brevity
在前面的工作流中,workflow_dispatch
事件需要 reason
作为输入。 GitHub 检测到这一点,并且其UI会动态更改,以提示用户提供手动运行工作流的原因。 steps
将输出用户提供的原因。
有关详细信息,请参阅 触发工作流的事件。
.NET CLI
.NET 命令行接口(CLI)是一个跨平台工具链,用于开发、生成、运行和发布 .NET 应用程序。 .NET CLI 用于 run
工作流文件中的各个 steps
。 常见命令包括:
有关详细信息,请参阅 .NET CLI 概述
另请参阅
若要更深入地了解 .NET 的 GitHub Actions,请考虑以下资源:
快速入门(s):
教程:
- 教程:使用 .NET 创建 GitHub 操作