应用自动化工作流

已完成

在本单元中,你将了解自动化工作流工具以及它们如何与 Terraform 和 Azure 集成。

关于 GitHub Actions

作为基础结构管理员,你需要生成和部署工作流,以使用与项目相同的版本控制。

使用 GitHub Actions,你可以运行链接到你的 GitHub 存储库的持续集成和持续交付 (CI/CD) 流程。

借助 GitHub Actions,你可以直接从 GitHub 生成、测试和部署代码。 你还可以分配代码评审、管理分支和会审问题。

GitHub Actions 组件

让我们描述一下各种 GitHub Actions 组件,如下图所示:

Diagram showing the relationship of GitHub Actions workflows to their component jobs, steps, and actions.

  • 工作流:工作流由某些事件或活动触发,是自动执行软件开发生命周期任务的作业和步骤的集合。
  • 作业:在运行器上执行的一组步骤。
  • 步骤:一个任务,可运行一个或多个命令或操作。 每个步骤都由在特定事件(例如拉取请求)发生后运行的各个操作组成。
  • 操作:可合并到步骤中的独立命令。 可组合多个步骤来创建一个作业。 各个操作是自动执行软件开发任务的已打包脚本。 若要创建工作流,需在 GitHub 存储库中将操作添加到 .github/workflows 目录中的 YAML 文件。

Terraform GitHub 操作

hashicorp/setup-terraform 操作通过以下方式在 GitHub Actions 工作流中设置 Terraform CLI:

  • 下载特定版本的 Terraform CLI 并将其添加到 PATH
  • 使用 Terraform 云或企业主机名和 API 令牌配置 Terraform CLI 配置文件。
  • 安装包装器脚本以包装以后对 terraform 二进制文件的调用,并将其 STDOUT、STDERR 和退出代码分别显示为名为 stdoutstderrexitcode 的输出。

通过 Azure 对 GitHub Actions 进行身份验证

Terraform 支持几种使用 Azure 进行身份验证的选项:

  • 以交互方式使用 Terraform 时,建议通过 Microsoft 帐户进行身份验证。
  • 通过代码或自动化使用 Terraform 时,建议通过 Azure 服务主体进行身份验证。

服务主体是用于应用程序、托管服务和自动化工具以访问 Azure 资源的标识。

后续步骤

在下一个单元中,我们将设置一个示例项目,并结合使用 GitHub Actions 和 Terraform 将其部署到 Azure。

新 Azure Pipelines 的关键概念

让我们来了解一下组成 Azure 管道的组件。

Diagram of the key concepts and components in Azure Pipeline.

  • 触发器告知管道运行。
  • 每个管道都由一个或多个阶段组成。 管道可以部署到一个或多个环境。
  • 阶段是在管道中组织作业的一种方式,每个阶段可以有一个或多个作业。
  • 每个作业在一个代理上运行。 作业也可以是无代理的。
  • 每个代理运行包含一个或多个步骤的作业。
  • 步骤可以是任务或脚本,是管道的最小构建基块。
  • 任务是一种预打包的脚本,用于执行操作,如调用 REST API 或发布生成工件。
  • 生成工件是由运行发布的文件或包的集合。

提示

有关不同管道组件以及如何使用它们的详细信息,请参阅“摘要”部分中提供的链接。

Azure Pipelines 的 Terraform 任务

当执行与 Azure 交互的命令(如 planapplydestroy)时,任务将使用 Azure 服务连接来授权针对目标订阅的操作。 连接到 Azure 的推荐方法是将服务连接绑定到 Azure 服务主体。 Azure 服务主体是你为使用自动化工具访问 Azure 资源而创建的标识。

以下 YAML 代码片段使用 Azure Pipeline Terraform 提供程序 azurerm。 通过 environmentServiceNameAzureRM 输入指定服务连接:

- task: TerraformTaskV1@0
  inputs:
    provider: 'azurerm'
    command: 'apply'
    workingDirectory: $(Build.Repository.LocalPath)/terraform
    backendAzureRmContainerName: 'tfstate'
    backendAzureRmKey: 'tf/terraform.tfstate'
    environmentServiceNameAzureRM: $(serviceConnection)

提示

如果使用“azurerm”作为 Azure Pipeline Terraform 提供程序,则还需要提供服务连接和存储容器,以便与 Terraform 后端“状态”一起使用。

传递参数

有多种方法可将参数传递给 terraform 命令。 变量为你提供了一种简便方法,可以将关键数据位导入管道的各个部分。

可以通过以下步骤设置生成管道的变量:

  1. 转到“管道”页,选择适当的管道,并选择“编辑”。
  2. 找到该管道的变量。
  3. 添加或更新该变量。
  4. 若要将该变量标记为机密,请选择“将此值保密”。
  5. 保存管道。

Terraform 输出到管道变量

TerraformCLI 任务支持运行 Terraform output 命令。 CLI 运行时,将通过 terraform output 命令发出的每个输出变量创建管道变量。

后续步骤

在下一个单元中,我们将设置一个示例项目,并结合使用 Azure Pipelines 和 Terraform 将其部署到 Azure。