了解 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 应用及应用的后端服务。 你可能有一个为生成 iOS 应用在 macOS 运行程序上运行的作业,以及另一个为生成后端在 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 文件缩进中的错误。