我想创建一个 devops 管道以使用 Terraform 在 Azure 中创建我的资源
I want to create a devops pipeline to create my resources in Azure using Terraform
我在网上看了很多教程....所有教程都是在发布管道中完成的......我没有要构建的 dotnetcore 应用程序和工件....我想在没有任何应用程序构建的情况下提供我的资源......
我可以在构建管道中进行吗?
是否有任何教程可以解决上述问题?
我想知道如何在没有任何演示生成管道的情况下配置资源...我有 .tf 文件,只想创建自动创建资源的管道。
您尝试了什么,您期望什么?
描述你尝试了什么,你期望发生什么,以及实际结果如何。至少 20 个字符。
事实上,可以从 Azure DevOps 构建管道使用 Terraform 来配置资源。但是,有几点需要考虑:
你需要create a service connection for Azure Pipelines。这是授权 Azure Pipelines 连接到您的云提供商并管理您订阅中的资源所必需的。有可用于 Azure 资源管理器(当然)的服务连接提供程序,也可用于 AWS 和 GCP。甚至还有一个通用的提供程序供一般使用。
安装Azure DevOps右上角的Terraform extension for Azure Pipelines. Click on the shopping bag icon和select浏览市场
找到并安装扩展程序。
Terraform 总是需要一个可以存储托管基础设施状态的后端。如果您没有在 Terraform 配置中明确指定后端,默认情况下它将使用 local
后端并将状态存储在 terraform.tfstate
文件中。然而,当 Terraform 在管道中执行时,这将不起作用,因为管道的每个 运行 都将在新的虚拟机上执行,并且 local
后端中的状态将不会持续存在。为了克服这个问题,您需要定义一个远程后端,例如Azure 存储帐户、AWS S3 存储桶或 Google 云存储存储桶。
满足这些先决条件后,您可以在 YAML 管道编辑器 中借助 任务助手[=37= 从头开始创建管道] 或者您从下面的代码片段开始。
假设您的 Terraform 文件位于存储库的 terraform/
文件夹中,管道的以下步骤将在构建代理上安装 Terraform,初始化工作目录,并计划和应用执行计划到提供资源:
stages:
- stage: Infra
displayName: Deploy Infrastructure
jobs:
- job: Infra
displayName: Deploy Infrastructure
pool:
vmImage: 'ubuntu-latest'
steps:
- task: TerraformInstaller@0
displayName: 'Install Terraform'
inputs:
terraformVersion: '0.14.4'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'init'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
backendServiceArm: '<SERVICE_CONNECTION_NAME>'
backendAzureRmResourceGroupName: '<RESOURCEGROUP_NAME>'
backendAzureRmStorageAccountName: '<STORAGE_ACCOUNT_NAME>'
backendAzureRmContainerName: '<STORAGE_CONTAINER_NAME>'
backendAzureRmKey: '<NAME_OF_TERRAFORM_STATE_FILE>'
- task: TerraformTaskV1@0
displayName: 'Terraform Plan'
inputs:
provider: 'azurerm'
command: 'plan'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
environmentServiceNameAzureRM: '<SERVICE_CONNECTION_NAME>'
- task: TerraformTaskV1@0
displayName: 'Terraform Apply'
inputs:
provider: 'azurerm'
command: 'apply'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
environmentServiceNameAzureRM: '<SERVICE_CONNECTION_NAME>'
我在网上看了很多教程....所有教程都是在发布管道中完成的......我没有要构建的 dotnetcore 应用程序和工件....我想在没有任何应用程序构建的情况下提供我的资源......
我可以在构建管道中进行吗? 是否有任何教程可以解决上述问题?
我想知道如何在没有任何演示生成管道的情况下配置资源...我有 .tf 文件,只想创建自动创建资源的管道。
您尝试了什么,您期望什么? 描述你尝试了什么,你期望发生什么,以及实际结果如何。至少 20 个字符。
事实上,可以从 Azure DevOps 构建管道使用 Terraform 来配置资源。但是,有几点需要考虑:
你需要create a service connection for Azure Pipelines。这是授权 Azure Pipelines 连接到您的云提供商并管理您订阅中的资源所必需的。有可用于 Azure 资源管理器(当然)的服务连接提供程序,也可用于 AWS 和 GCP。甚至还有一个通用的提供程序供一般使用。
安装Azure DevOps右上角的Terraform extension for Azure Pipelines. Click on the shopping bag icon和select浏览市场 找到并安装扩展程序。
Terraform 总是需要一个可以存储托管基础设施状态的后端。如果您没有在 Terraform 配置中明确指定后端,默认情况下它将使用
local
后端并将状态存储在terraform.tfstate
文件中。然而,当 Terraform 在管道中执行时,这将不起作用,因为管道的每个 运行 都将在新的虚拟机上执行,并且local
后端中的状态将不会持续存在。为了克服这个问题,您需要定义一个远程后端,例如Azure 存储帐户、AWS S3 存储桶或 Google 云存储存储桶。
满足这些先决条件后,您可以在 YAML 管道编辑器 中借助 任务助手[=37= 从头开始创建管道] 或者您从下面的代码片段开始。
假设您的 Terraform 文件位于存储库的 terraform/
文件夹中,管道的以下步骤将在构建代理上安装 Terraform,初始化工作目录,并计划和应用执行计划到提供资源:
stages:
- stage: Infra
displayName: Deploy Infrastructure
jobs:
- job: Infra
displayName: Deploy Infrastructure
pool:
vmImage: 'ubuntu-latest'
steps:
- task: TerraformInstaller@0
displayName: 'Install Terraform'
inputs:
terraformVersion: '0.14.4'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'init'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
backendServiceArm: '<SERVICE_CONNECTION_NAME>'
backendAzureRmResourceGroupName: '<RESOURCEGROUP_NAME>'
backendAzureRmStorageAccountName: '<STORAGE_ACCOUNT_NAME>'
backendAzureRmContainerName: '<STORAGE_CONTAINER_NAME>'
backendAzureRmKey: '<NAME_OF_TERRAFORM_STATE_FILE>'
- task: TerraformTaskV1@0
displayName: 'Terraform Plan'
inputs:
provider: 'azurerm'
command: 'plan'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
environmentServiceNameAzureRM: '<SERVICE_CONNECTION_NAME>'
- task: TerraformTaskV1@0
displayName: 'Terraform Apply'
inputs:
provider: 'azurerm'
command: 'apply'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
environmentServiceNameAzureRM: '<SERVICE_CONNECTION_NAME>'