Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

时间:2023-12-22 16:55:38

一,引言

  之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中。然后还有讲到 Azure Resource Common Module 的 TF 代码的封装。之前还在Azure Terraform 第四节讲到利用 Azure Storage 远程状态文件存储。那么今天我们尝试将封装过 Common Module 的 TF 代码,结合 TF 状态文件远端存储,实现自动化部署基础资源

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

--------------------Azure Terraform 系列--------------------

1,Azure Terraform(一)入门简介

2,Azure Terraform(二)语法详解

3,Azure Terraform(三)部署 Web 应用程序

4,Azure Terraform(四)状态文件存储

5,Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源

6,Azure Terraform(六)Common Module

7,Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

二,正文

1,Azure DevOps 创建项目

输入项目名称 “CnBateBlogWeb_Infrastructure_V2”,点击 “Create” 创建项目。

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2,配置Azure DevOps Release Pipeline 环境

2.1,添加 Release Pipeline

选择 “ Pipelines=》Releases”,点击 “New pipeline” 创建新的 pipeline

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

模板选择 “Empty job”,并且点击图中箭头所指的 “x” 关闭页面

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

Stage 页面,输入新的 Stage name:“Deploy Infra”,并且关闭此页面

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.2,添加 Artifacts

接下来需要添加 “artifact”,点击图中的 “+ Add an artiface”

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

选择 ”GitHub“ ,

Service 添加新的 connection:"github_connection_xxxxx"

Source(repository)选择:TF 代码库

Default branch:“remote_stats”

Default version:”Latest from the default branch“

点击 "Add" 添加 artifact。

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3,添加 task

接下来添加 ”Deploy Infra“ Stages 相关 task

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.1,创建远程存储相关 job

点击图中圈中的 ”+“,添加 new task,并且在右边的输入框中输入 ”Azure CLI“,选中图中的 ”Azure CLI“

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

注意,之前在  一篇文章中讲到远端存储时,需要提前创建 Azure Storage AccuntAzure KeyVault。Azure Storage AccountContainer 中用来存储 TF 的状态文件,Azure KeyVault 存储 Azure Storage Accountaccess_key(访问密钥),之前是手动创建,主要是为了给大家演示。今天,我们通过 Azure CLI 创建快捷操作,并且 Azure CLI 这个 task  移至 Azure Releases Pipeline 中。

输入相关参数:

Display name:”Azure CLI :Create Storage Account,Key Vault And Set KeyVault Secret“

Azure Resource Manager connection:选择自己的订阅 id

Script Type(脚本类型)选择:”Shell“

Script Location(脚本位置)选择:”Inline script“(内联脚本)

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

Inline Script(脚本)在 Azure 中创建以下资源:
  1)Storage 存储帐户
  2)Blob存储容器(将存储状态文件)
  3)密钥库,将用于安全地存储Storage 的访问密钥

Inline Script(内联脚本)如下所示:

# create azure resource group
az group create --location eastasia --name $(terraform_rg)

# create azure storage account
az storage account create --name $(storage_account) --resource-group $(terraform_rg) --location eastasia --sku Standard_LRS

# create storage account container for tf state
az storage container create --name $(storage_account_container) --account-name $(storage_account)

# query storage key and set variable
ACCOUNT_KEY=$(az storage account keys list --resource-group $(terraform_rg) --account-name $(storage_account) --query "[?keyName == 'key1'][value]" --output tsv)

# create azure keyvault
az keyvault create --name $(keyvault) --resource-group $(terraform_rg) --location eastasia --enable-soft-delete false

# set keyvault secret,secret value is ACCOUNT_KEY
az keyvault secret set --name $(keyvault_sc) --vault-name $(keyvault) --value $ACCOUNT_KEY

大家有注意到没 ”Inline Script“ 中既有 Pipeline 设置的变量,又有自定义的系统变量

如果是获取 pipeline 中设置变量:$(varivale_name)

如果是获取自定义系统变量:$variable_name

2.3.2,添加 pipeline variables

接下来设置 pipeline 变量,选择 ”Variables“,点击 ”+Add“,添加相应的参数设置

Name Value
keyvault cnbate-terraform-kv6
keyvault_sc terraform-stste-storage-key
storage_account cnbateterraformstorage
storage_account_container terraform-state
terraform_rg Web_Test_TF_RG

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.3,添加 Azure KeyVault 获取 Access Secret Job

输入 ”Azure Key Vault“,点击 ”Add“  添加 Azure Key Vault Job

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

输入相关参数:

Display name:“Azure Key Vault:Get Storage Access Secret”

Azure subscription 选择当前自己的订阅

Key vault 选择:“cnbate-terraform-kv6”

Secrets filter(机密过滤器):“terraform-stste-storage-key”,如果选择默认 “*”,则下载选定密钥库的所有机密

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.4,添加 Terraform install Job

搜索 “Terraform”,选择 “Terraform tool install”

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

修改相应参数:

Display name:"Install Terraform 0.14.3"

Version(版本):”0.14.3“

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.5,添加 Terraform 初始化 Job

搜索 “Terraform”,点击 “Add”

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

修改相应参数:

Display name:“Terraform:Init”

Configuration directory:选择到 ”~/src/model“ 这个目录下,也就是 terraform 代码的工作目录

Command 选择:“init”

Addition command arguments:”-backend-config="access_key=$(terraform-stste-storage-key)"“ (tf 代码中没有access_key 的配置信息,所以我们需要在 terraform init 过程中传递此参数)

AzureRM backend configuration:

Azure subscription:选择当前自己的订阅

Resource group:”Web_Test_TF_RG“

Storage account:”cnbateterraformstorage“

Container:”terraform-state“

Key:”cnbate.terraform.stats“  

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.6,添加 Terraform 生成部署计划 Job

搜索 ”Terraform“,点击 ”Add“

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

修改相关参数:

Display name:”Terraform:plan“

Command 选择:”plan“

Configuration directory: 选择 terraform 代码的工作目录

Azure subscription 选择当前自己的Azure订阅

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.7,添加 Terraform 执行部署计划 Job

搜索 ”Terraform“,点击 ”Add“

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

修改相应参数:

Display name:”Terraform:auto-apply“

Command:”validate and apply“

Configuration directory:选择 terraform 代码的工作目录

Additional command arguments:“-auto-approve”

Azure subscription:选择当前自己订阅

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

2.3.8,保存 Azure Pipeline 设置,并且设置 Pipeline 的触发条件

修改当前 pipeline 名称,并且点击 “Save” 进行保存

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

设置 pipeline 的触发条件

开启持续部署触发,每次在所选存储库中发生Git推送时触发pipeline,接下来添加分支筛选条件

Type:Include,Branch:“remote_stats”,也就是说每当 “remote_stats” 发生git 推送的时候,触发此 pipeline

设置完毕后,点击 “Save” 进行保存

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

3,测试Azure DevOps 自动化部署基础设施资源

先登录 Azure Portal 确保 “Web_Test_TF_RG” 资源组中不存在任何资源

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

手动触发 Azure Release Pipeline

点击 “Create release” 进行手动触发

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

稍等片刻,等待pipeline 执行完毕

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

查看 “Web_Test_TF_RG” 中的所有资源

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

Bingo,大功告成!!!!

*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

三,结尾

  今天的实战操作比较多,全都是需要在Azure DevOps 上进行操作的,大家要多加练习,熟能生巧。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还希望多多包涵,并且指出不足之处。

参考资料:Terraform 官方azurerm 文档Azure CLI 文档

Terraform_Cnbate_Traffic_Manager github:https://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager

作者:Allen

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。