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

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

2,配置Azure DevOps Release Pipeline 环境
2.1,添加 Release Pipeline
选择 “ Pipelines=》Releases”,点击 “New pipeline” 创建新的 pipeline

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

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

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

选择 ”GitHub“ ,
Service 添加新的 connection:"github_connection_xxxxx"
Source(repository)选择:TF 代码库
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 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
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
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)的更多相关文章
- Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...
- 基于云原生DevOps服务自动化部署前端项目学习总结
本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...
- 运维与自动化系列④自动化部署基础与git
运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...
- 运维与自动化系列③自动化部署基础与shell脚本实现
自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器纯手工登录git服务器执行git pull或svn服务器执行svn upda ...
- 利用Jenkins实现项目自动化部署
1.安装Jenkins,参考上一篇博客:安装Jenkins 安装Java 安装tomcat 安装maven 2.全局工具配置,填写好后点击save 3.安装git plugin插件
- Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...
- Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布
一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...
- Azure Terraform(十)利用 Azure DevOps 的条件语句选择发布环境
一,引言 之前我讲过的所有的案例中,都是将整个Azure Resource 部署到同一个订阅下,没有做到灵活的在 Azure Pipeline 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...
- Azure Terraform(六)Common Module
一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...
随机推荐
- 如何用Python判断一个文件是否被占用?
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 今天有同学问,用os模块的access()能否判断一个文件是否被占用?直觉上,这是行不通的,因为ac ...
- python 简单逻辑回归实例
import sys reload(sys) sys.setdefaultencoding('utf-8') from sklearn.feature_extraction.text import T ...
- LINQ to Entities 不识别方法“System.String ToString(“yyyy-MM-dd”)”
将Queryable转化为IEnumerable或者直接Tolist()
- 请收好 Linux 网络命令集锦
看着kali linux上百个网络命令,我陷入了沉思.专业的网络命令实在是太多了,如果要罗列,上千个也是有的.个人不是渗透测试工作者,大部分功能只知皮毛.所以本文是非常浅显的技术总结,仅聚焦工作中常用 ...
- MySQL、DM 行转列及字段去重(Group_Concat())
最近在使用数据库迁移适配,由MySQL 库迁移到达梦数据库,其中进行行转列时,MySQL转换达梦sql语法有些问题,特记录. 在MySQL 下有Group_Concat(expr) ,在达梦及神通数 ...
- x264编码demo定制修改介绍
x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264.c,另外一个是简洁版的example.c. 其中,前者demo,可以配置很多编码参数,但太冗长繁杂,对初学者不太友好. 后者 ...
- ARP局域网断网攻击
Kali--ARP局域网攻击 什么是ARP? ARP ( Address Resolution Protocol)地址转换协议,工作在OSI模型的数据链路层,在以太网中,网络设备之间互相通信是用MAC ...
- Eclipse中,No compiler is provided in this environment. Perhaps you are running on a JRE rather than a
问题说明 Eclipse导入Maven项目后,执行 mvn clean install后,出现如下错误: [INFO] ---------------------------------------- ...
- 吞食鱼2(FeedingFrenzyTwo) 修改器
吞食鱼2(FeedingFrenzyTwo) 修改器 童年回忆系列.小时候特别喜欢玩这类游戏,软件不大,很慢的网速也不会下载太久,然后对配置要求不高,很破的电脑也可以玩得很开心.不过也有糟心的时候啊, ...
- 二进制格式mysql
1.二进制MySQL安装 #下载二进制格式的mysql软件包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.31- ...