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

一,引言

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

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

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” 建立项目。github

2,配置Azure DevOps Release Pipeline 环境 

2.1,添加 Release Pipeline

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

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

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

2.2,添加 Artifacts

接下来须要添加 “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。

2.3,添加 task

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

2.3.1,建立远程存储相关 job

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

注意,以前在  一篇文章中讲到远端存储时,须要提早建立 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“(内联脚本)

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

 

2.3.3,添加 Azure KeyVault 获取 Access Secret Job

输入 ”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”,若是选择默认 “*”,则下载选定密钥库的全部机密

2.3.4,添加 Terraform install Job

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

修改相应参数:

Display name:"Install Terraform 0.14.3"

Version(版本):”0.14.3“

2.3.5,添加 Terraform 初始化 Job

搜索 “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“  

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

搜索 ”Terraform“,点击 ”Add“

修改相关参数:

Display name:”Terraform:plan“

Command 选择:”plan“

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

Azure subscription 选择当前本身的Azure订阅

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

搜索 ”Terraform“,点击 ”Add“

修改相应参数:

Display name:”Terraform:auto-apply“

Command:”validate and apply“

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

Additional command arguments:“-auto-approve”

Azure subscription:选择当前本身订阅

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

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

设置 pipeline 的触发条件

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

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

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

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

 先登陆 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 

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

相关文章
相关标签/搜索