以前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,全部的资源代码所有写在一个 main.tf 文件中。而后还有讲到 Azure Resource Common Module 的 TF 代码的封装。以前还在Azure Terraform 第四节讲到利用 Azure Storage 远程状态文件存储。那么今天咱们尝试将封装过 Common Module 的 TF 代码,结合 TF 状态文件远端存储,实现自动化部署基础资源html
--------------------Azure Terraform 系列--------------------git
输入项目名称 “CnBateBlogWeb_Infrastructure_V2”,点击 “Create” 建立项目。github
选择 “ Pipelines=》Releases”,点击 “New pipeline” 建立新的 pipeline安全
模板选择 “Empty job”,而且点击图中箭头所指的 “x” 关闭页面app
Stage 页面,输入新的 Stage name:“Deploy Infra”,而且关闭此页面ide
接下来须要添加 “artifact”,点击图中的 “+ Add an artiface”post
选择 ”GitHub“ ,测试
Service 添加新的 connection:"github_connection_xxxxx"url
Source(repository)选择:TF 代码库spa
Default branch:“remote_stats”
Default version:”Latest from the default branch“
点击 "Add" 添加 artifact。
接下来添加 ”Deploy Infra“ Stages 相关 task
点击图中圈中的 ”+“,添加 new task,而且在右边的输入框中输入 ”Azure CLI“,选中图中的 ”Azure CLI“
注意,以前在 一篇文章中讲到远端存储时,须要提早建立 Azure Storage Accunt 和 Azure KeyVault。Azure Storage Account 的 Container 中用来存储 TF 的状态文件,Azure KeyVault 存储 Azure Storage Account 的 access_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“(内联脚本)
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
接下来设置 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 Key Vault“,点击 ”Add“ 添加 Azure Key Vault Job
输入相关参数:
Display name:“Azure Key Vault:Get Storage Access Secret”
Azure subscription 选择当前本身的订阅
Key vault 选择:“cnbate-terraform-kv6”
Secrets filter(机密过滤器):“terraform-stste-storage-key”,若是选择默认 “*”,则下载选定密钥库的全部机密
搜索 “Terraform”,选择 “Terraform tool install”
修改相应参数:
Display name:"Install Terraform 0.14.3"
Version(版本):”0.14.3“
搜索 “Terraform”,点击 “Add”
修改相应参数:
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“
搜索 ”Terraform“,点击 ”Add“
修改相关参数:
Display name:”Terraform:plan“
Command 选择:”plan“
Configuration directory: 选择 terraform 代码的工做目录
Azure subscription 选择当前本身的Azure订阅
搜索 ”Terraform“,点击 ”Add“
修改相应参数:
Display name:”Terraform:auto-apply“
Command:”validate and apply“
Configuration directory:选择 terraform 代码的工做目录
Additional command arguments:“-auto-approve”
Azure subscription:选择当前本身订阅
修改当前 pipeline 名称,而且点击 “Save” 进行保存
设置 pipeline 的触发条件
开启持续部署触发,每次在所选存储库中发生Git推送时触发pipeline,接下来添加分支筛选条件
Type:Include,Branch:“remote_stats”,也就是说每当 “remote_stats” 发生git 推送的时候,触发此 pipeline
设置完毕后,点击 “Save” 进行保存
先登陆 Azure Portal 确保 “Web_Test_TF_RG” 资源组中不存在任何资源
手动触发 Azure Release Pipeline
点击 “Create release” 进行手动触发
稍等片刻,等待pipeline 执行完毕
查看 “Web_Test_TF_RG” 中的全部资源
Bingo,大功告成!!!!
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。😃😃😃😃😃😃
今天的实战操做比较多,全都是须要在Azure DevOps 上进行操做的,你们要多加练习,熟能生巧。本文所分享的内容也存在着不少我本身的一些理解,有理解不到位的,还但愿多多包涵,而且指出不足之处。
参考资料:Terraform 官方,azurerm 文档,Azure CLI 文档
Terraform_Cnbate_Traffic_Manager github:https://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager
做者:Allen
版权:转载请在文章明显位置注明做者及出处。如发现错误,欢迎批评指正。