了解 GitHub Actions

已完成

可以使用 工作流自动执行部署过程中的步骤。 每次对代码进行更改并将更改提交到 Git 存储库时,工作流都会运行预定义的进程。 工作流可以验证你的 Bicep 代码是否符合质量标准,然后自动执行将资源部署到 Azure 的工作。 该过程在创建的 工作流定义 中定义。

GitHub Actions 是 GitHub 的一项功能。 GitHub 还托管用于存储和与协作者共享代码的 Git 存储库。 在 GitHub 上存储 Bicep 代码时,GitHub Actions 可以访问代码以自动执行部署过程。 在本单元中,你将了解 GitHub Actions。

什么是工作流?

工作流是在用于测试和部署代码的文件中定义的可配置可重复过程。 工作流包含需要执行的所有步骤(按正确的顺序)。

使用 GitHub Actions 时,可以在 YAML 文件中定义工作流配置。 由于工作流 YAML 文件是一个代码文件,因此该文件与 Bicep 代码一起存储在 Git 存储库中名为 .github/workflows 的文件夹中。 YAML 文件是结构化文本文件,类似于 Bicep 结构化文本文件。 可以使用任何文本编辑器创建和编辑 YAML 文件。 在本模块中,你将使用 Visual Studio Code 作为编辑器。 GitHub Web 界面提供了可用于查看和编辑工作流 YAML 文件、协作处理工作流定义的工具,以及通过使用提交和分支管理工作流文件的不同版本。

运行程序

到目前为止,你已经从本地计算机部署了 Bicep 文件。 编写 Bicep 模板后,可以使用 Azure CLI 或 Azure PowerShell 将其部署到 Azure。 这些工具使用计算机的资源将模板提交到 Azure。 他们使用你的个人标识向 Azure 进行身份验证,并验证你是否有权部署资源。

工作流还需要计算机或 GPU 配备正确的操作系统和硬件平台,以便它可以执行部署操作。 GitHub Actions 使用运行器,它们是配置为运行工作流部署步骤的计算机。 每个运行器都已拥有你在之前模块中使用的 Bicep 和 Azure 工具,因此可以执行你在自己计算机上执行的相同操作。 GitHub Actions 服务指示运行程序运行工作流 YAML 文件中定义的步骤,而不是人工执行命令。

GitHub Actions 为不同的作系统(例如 Linux 或 Windows)和不同的工具集提供了多种类型的运行程序。 GitHub 管理这些运行程序,因此无需维护运行程序的任何计算基础结构。 运行器有时称为 GitHub 托管的运行器托管运行器,因为它们是为你托管的。 工作流运行时,将自动创建托管运行器。 工作流运行完成后,托管执行器将被自动删除。 无法直接访问托管运行程序,因此工作流必须包含部署解决方案所需的所有步骤。

显示在运行器上运行的工作流的图表。

注释

可以创建自定义运行程序,该 运行程序称为自承载运行程序。 如果你有需要作为工作流的一部分运行的特定软件,或者需要精确控制运行程序的配置方式,则可以创建自承载运行程序。 本模块中不讨论自托管运行器,但在“摘要”部分中提供了相关详细信息的链接。

触发器

使用 触发器 指示 GitHub Actions 何时 运行工作流。 可以在多种类型的触发器中进行选择。 现在,你将使用 手动触发器 告诉 GitHub Actions 何时开始运行工作流。 本模块的稍后部分将介绍其他类型的触发器。

显示触发器启动工作流的图。

步骤

步骤表示工作流执行的单个操作。 步骤类似于在 Bash 或 PowerShell 中运行的单个命令。 在大多数部署中,将按顺序执行多个步骤。 定义工作流 YAML 文件中每个步骤的顺序和所有详细信息。

GitHub Actions 提供两种类型的步骤:

  • 运行步骤:可以使用运行步骤在 Bash、PowerShell 或 Windows 命令行界面中运行单个命令或一系列命令。
  • 动作步骤:动作步骤是访问许多不同功能的便捷方法,而无需编写脚本语句。 例如,可以利用内置任务将 Bicep 文件部署到 Azure。 任何人都可以编写一个动作,并将其与其他用户共享。 它提供了大量商业和开源任务。

有些人更喜欢使用脚本语句而不是动作,因为可以对所执行内容进行更好的控制。 其他人更喜欢使用动作,这样他们就不必编写和管理脚本。 在本模块中,我们将结合使用这两种方法。

职位

在 GitHub Actions 中, 作业 表示一组有序的步骤。 工作流中始终至少有一个作业,创建复杂部署时通常有多个作业。

注释

可以将每个作业设置为在不同的运行程序上运行。 在构建和部署需要在作业工作流的不同部分中使用不同操作系统的解决方案时,在不同的运行器上运行作业非常有用。

例如,假设要构建一个 iOS 应用及应用后端服务。 你可能有一个作业在 macOS 运行程序上运行以生成 iOS 应用,另一个作业在 Ubuntu 或 Windows 运行程序上运行以生成后端。 你甚至可以告诉工作流同时运行这两个作业,从而加快工作流的执行速度。

显示一个工作流的示意图,其中两个步骤都在一个作业中。

基本工作流示例

了解基本的 GitHub Actions 概念后,让我们看看 YAML 中的简单工作流定义:

name: learn-github-actions

on: [workflow_dispatch]

jobs:
  say-hello:
    runs-on: ubuntu-latest
    steps:
      - name: 'Run a one-line command'
        run: echo "hello from GitHub Actions"
      - name: 'Run a multi-line command'
        run: |
          echo "We'll add more steps soon."
          echo "For example, we'll add our Bicep deployment step."

让我们仔细看看文件的每个部分:

  • name 是工作流的名称。 名称显示在 GitHub Web 界面上。
  • on 告知工作流何时执行。 在这种情况下, on: [workflow_dispatch] 告知 GitHub Actions 你想要手动触发工作流。
  • jobs 将工作流中的所有作业组合在一起。
  • say-hello 是此工作流中第一个和唯一作业的名称。
  • runs-on 指示工作流在运行作业时要使用哪个运行器。 在本例中,工作流将在 Ubuntu 操作系统上运行,它来自 GitHub 托管的运行器池。
  • steps 列出要在作业中运行的步骤序列。 示例 YAML 有两个步骤。 这两个步骤都运行一个简单的脚本以回显一些文本。 每个步骤都有一个 name 值,该值是人可读的。 你将在工作流日志中看到该名称。 若要创建多行脚本步骤,请使用管道字符 (|),如示例中所示。 执行步骤后,你将在工作流日志中看到输出。

重要

在 YAML 文件中,缩进非常重要。 请查看示例 YAML。 YAML 中的某些行缩进两个或四个空格。 如果没有正确缩进文件,GitHub Actions 将无法解释它。 Visual Studio Code 可帮助查找和修复 YAML 文件缩进中的错误。