GitHub Actions 和 .NET

本概述文章介绍 GitHub Actions 在 .NET 应用程序开发中发挥的作用。 GitHub Actions 允许源代码存储库自动实现持续集成 (CI) 和持续交付 (CD)。 除此之外,GitHub Actions 还公开了更高级的方案 - 通过代码评审、分支管理和问题会审提供自动化挂钩。 借助 GitHub 中的 .NET 源代码,可以通过多种方式利用 GitHub Actions。

GitHub 操作

GitHub Actions 代表独立的命令,例如:

虽然这些命令独立于单个操作,但它们可以通过工作流组合发挥强大的作用。 在工作流组合中,可以定义触发工作流的事件。 工作流运行后,系统会指示它执行各种作业。 每个作业定义任意数量的步骤。 步骤将委托给 GitHub Actions,或者调用命令行脚本。

有关详细信息,请参阅 GitHub Actions 简介。 可将工作流文件视为表示生成、测试和/或发布应用程序的各个步骤的组合。 许多 .NET CLI 命令可用,其中的大部分命令可在 GitHub Actions 上下文中使用。

自定义 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

在上述工作流中,pushpull_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,请参阅以下资源: