一,引言

  之前一篇文章有讲解到利用 利用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 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

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

Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)的更多相关文章

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

    一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...

  2. 基于云原生DevOps服务自动化部署前端项目学习总结

    本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...

  3. 运维与自动化系列④自动化部署基础与git

    运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...

  4. 运维与自动化系列③自动化部署基础与shell脚本实现

    自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器纯手工登录git服务器执行git pull或svn服务器执行svn upda ...

  5. 利用Jenkins实现项目自动化部署

    1.安装Jenkins,参考上一篇博客:安装Jenkins 安装Java 安装tomcat 安装maven 2.全局工具配置,填写好后点击save 3.安装git plugin插件

  6. Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署

    一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...

  7. Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布

    一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...

  8. Azure Terraform(十)利用 Azure DevOps 的条件语句选择发布环境

    一,引言 之前我讲过的所有的案例中,都是将整个Azure Resource 部署到同一个订阅下,没有做到灵活的在 Azure Pipeline 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...

  9. Azure Terraform(六)Common Module

    一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...

随机推荐

  1. ADF 第六篇:Copy Data Activity详解

    在Azure 数据工程中,可以使用Copy Data 活动把数据从on-premises 或云中复制到其他存储中.Copy Data 活动必须在一个IR(Integration Runtime)上运行 ...

  2. C盘满了删除C盘文件

    还有很多文件在C:\Users\lock\AppData 比如C:\Users\lock\AppData\Local\Temp  临时文件 C:\Users\lock\AppData\Roaming\ ...

  3. Core3.0部署后访问接口提示500.30

    前言 在localhost直接运行的时候正常,发布之后访问就一直提示500.30 可能原因 app.UseExceptionHandler入参值 1.查看日志 大致提示Startup.cs的某个参数配 ...

  4. Liunx运维(六)-文件备份与压缩命令

    文档目录: 一.tar:打包备份 二.gzip:压缩或解压文件 三.zip:打包和压缩文件 四.unzip:解压zip文件 五.scp:远程文件复制 六.rsync:文件同步工具 ---------- ...

  5. [Deep Learning] 神经网络编程基础 (Basics of Neural Network Programming) - 逻辑回归-梯度下降-计算图

    在神经网络中,假如有m个训练集,我们想把他们加入训练,第一个想到得就是用一个for循环来遍历训练集,从而开始训练.但是在神经网络中,我们换一个计算方法,这就是 前向传播和反向传播. 对于逻辑回归,就是 ...

  6. docker nginx 自定义配置容器

    准备 拉取nginx官方镜像 docker pull nginx etc/nginx/ 下新建目录 cert 和 conf cert 存放证书 conf 存放配置文件 mkdir /etc/nginx ...

  7. docker基本入门知识-小白向

    基本概念 Docker是一个开源项目,前身是dotCloud公司的内部项目,但苦于无法扩大使用和推广,后期开源后吸引大量的开发人员的参与,以至于公司直接改名为Docker Inc. Docker项目的 ...

  8. NOIP初赛篇——07信息编码表示

    一.基本概念 编码 ​ 计算机要处理的数据除了数值数据以外,还有各类符号.图形.图像和声音等非数值数据.而计算机只能识别两个数字0,1.要使计算机能处理这些信息,首先必须要将各类信息转换成0与1表示的 ...

  9. Tomcat7,Tomcat8 的manager 配置

    1.打开文件:tomcat目录-->conf-->tomcat-users.xml  2.将以下代码替换原来的所有内容,不要犹豫,就是所有内容. <?xml version=&quo ...

  10. js 数组的方法总结

    1.Array.map() 此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组 let arr = [1, 2, 3, 4, 5]     let newAr ...