应用自动化工作流
在本单元中,你将了解自动化工作流工具以及它们如何与 Terraform 和 Azure 集成。
关于 GitHub Actions
作为基础结构管理员,你需要生成和部署工作流,以使用与项目相同的版本控制。
使用 GitHub Actions,你可以运行链接到你的 GitHub 存储库的持续集成和持续交付 (CI/CD) 流程。
借助 GitHub Actions,你可以直接从 GitHub 生成、测试和部署代码。 你还可以分配代码评审、管理分支和会审问题。
GitHub Actions 组件
让我们描述一下各种 GitHub Actions 组件,如下图所示:
- 工作流:工作流由某些事件或活动触发,是自动执行软件开发生命周期任务的作业和步骤的集合。
- 作业:在运行器上执行的一组步骤。
- 步骤:一个任务,可运行一个或多个命令或操作。 每个步骤都由在特定事件(例如拉取请求)发生后运行的各个操作组成。
- 操作:可合并到步骤中的独立命令。 可组合多个步骤来创建一个作业。 各个操作是自动执行软件开发任务的已打包脚本。 若要创建工作流,需在 GitHub 存储库中将操作添加到 .github/workflows 目录中的 YAML 文件。
Terraform GitHub 操作
hashicorp/setup-terraform
操作通过以下方式在 GitHub Actions 工作流中设置 Terraform CLI:
- 下载特定版本的 Terraform CLI 并将其添加到
PATH
。 - 使用 Terraform 云或企业主机名和 API 令牌配置 Terraform CLI 配置文件。
- 安装包装器脚本以包装以后对
terraform
二进制文件的调用,并将其 STDOUT、STDERR 和退出代码分别显示为名为stdout
、stderr
和exitcode
的输出。
通过 Azure 对 GitHub Actions 进行身份验证
Terraform 支持几种使用 Azure 进行身份验证的选项:
- 以交互方式使用 Terraform 时,建议通过 Microsoft 帐户进行身份验证。
- 通过代码或自动化使用 Terraform 时,建议通过 Azure 服务主体进行身份验证。
服务主体是用于应用程序、托管服务和自动化工具以访问 Azure 资源的标识。
后续步骤
在下一个单元中,我们将设置一个示例项目,并结合使用 GitHub Actions 和 Terraform 将其部署到 Azure。
新 Azure Pipelines 的关键概念
让我们来了解一下组成 Azure 管道的组件。
- 触发器告知管道运行。
- 每个管道都由一个或多个阶段组成。 管道可以部署到一个或多个环境。
- 阶段是在管道中组织作业的一种方式,每个阶段可以有一个或多个作业。
- 每个作业在一个代理上运行。 作业也可以是无代理的。
- 每个代理运行包含一个或多个步骤的作业。
- 步骤可以是任务或脚本,是管道的最小构建基块。
- 任务是一种预打包的脚本,用于执行操作,如调用 REST API 或发布生成工件。
- 生成工件是由运行发布的文件或包的集合。
提示
有关不同管道组件以及如何使用它们的详细信息,请参阅“摘要”部分中提供的链接。
Azure Pipelines 的 Terraform 任务
当执行与 Azure 交互的命令(如 plan
、apply
和 destroy
)时,任务将使用 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 命令。 变量为你提供了一种简便方法,可以将关键数据位导入管道的各个部分。
可以通过以下步骤设置生成管道的变量:
- 转到“管道”页,选择适当的管道,并选择“编辑”。
- 找到该管道的变量。
- 添加或更新该变量。
- 要将该变量标记为机密,请选择将此值保密。
- 保存管道。
Terraform 输出到管道变量
TerraformCLI 任务支持运行 Terraform output
命令。 CLI 运行时,将通过 terraform output
命令发出的每个输出变量创建管道变量。
后续步骤
在下一个单元中,我们将设置一个示例项目,并结合使用 Azure Pipelines 和 Terraform 将其部署到 Azure。