GitHub Actions 和 .NET

在本概述中,你将了解 .net 应用程序开发中GitHub 操作所扮演的角色。 GitHub 操作允许源代码存储库自动 (CI) 和持续交付 (CD) 进行持续集成。 除此之外,GitHub 操作公开了更高级的方案,为自动化提供挂钩,代码评审、分支管理和会审问题。 GitHub 中的 .net 源代码,可以通过多种方式利用 GitHub 操作。

GitHub 操作

GitHub 操作表示独立命令,例如:

  • 操作/结帐 -此操作会在下 $GITHUB_WORKSPACE 检查你的存储库,因此你的工作流可以访问它。
  • 操作/设置-dotnet -此操作设置 .net CLI 环境以在操作中使用。
  • dotnet/versionsweeper -此操作将为 .net 的不支持目标版本扫描 .net 存储库。

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

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

自定义 GitHub 操作

Marketplace中有大量 GitHub 操作时,可能需要创作自己的操作。 你可以创建运行 .net 应用程序 GitHub 操作。 有关详细信息,请参阅教程:使用 .net 创建 GitHub 操作

工作流文件

GitHub 操作通过工作流文件使用。 工作流文件必须位于存储库的 github/ workflow 目录中,并且应为 YAML (docker-compose.override.yml 或 *. YAML) 。 工作流文件定义 工作流组合。 工作流是由一个或多个作业组成的可配置的自动化过程。 有关详细信息,请参阅 GitHub Actions 的工作流语法

示例工作流文件

作为 教程快速入门,提供了许多 .net 工作流文件示例。 下面是工作流文件名称的几个很好的示例:

工作流文件名

说明

编译源代码) (或生成。 如果源代码未编译,则会失败。

练习存储库中的单元测试。 若要运行测试,必须先编译源代码,这实际上是生成和测试工作流 (会取代 docker-compose.override.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 事件指定 cron'0 0 1 * *' 将在每个月的第一天触发工作流运行的。 按计划运行工作流非常适合需要很长时间运行的工作流,或者执行需要较少关注的操作。

示例手动事件

下面的示例演示如何为工作流指定手动事件触发器:

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 操作,请参阅以下资源: