一,引言

  之前一篇文章有讲解到利用 利用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. CCNP第二天之复习CCNA

    1.静态路由的扩展配置: (1).环回接口: 在设备上用于测试TCP/IP协议栈能否正常使用.默认没有.需要手工创建   R1(config)#interface loopback 1         ...

  2. ajax上传单个文件

    jsp页面 <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML> ...

  3. 加班申请单flowable中

    /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source ...

  4. Java Hash表 数据结构

    思考: 数组由于内存地址连续,是一种查询快增删慢的数据结构: 链表由于内存地址不连续,是一种查询慢增删快的数据结构: 那么怎么实现查询又快,增删也快的数据结构呢? 要是把数组和链表结合起来会怎么样? ...

  5. Windows Terminal 新手入门

    翻译自 Kayla Cinnamon 2020年12月17日的文章<Getting Started with Windows Terminal> [1] 安装 Windows Termin ...

  6. 数据库分库分表容量划分建议参考阿里云DRDS原则

    做分库分表的时候 一直想知道分库分表容量的最优规则有什么好的建议,以下是参考阿里云 DRDS 分库分表的规则,还是有一定的参考意义 .

  7. C#自定义控件的应用(数据绑定,属性等)

    刚刚开始程序设计的码农生涯,也许一些开发工具上的控件可以满足我们的需求,但是随之时间的迁移,我们对控件的呈现形式需求越来越多样化,这个时候就需要我们来自定义控件,我是一个刚刚入职没多久的菜鸟,接触软件 ...

  8. 敏捷史话(二):Scrum社区的悲剧性损失——Mike Beedle

    2018年3月23日,在美国的芝加哥发生了一起意外刺杀事件.一名男子刺杀了一位首席执行官,而这位不幸的首席执行官就是<敏捷宣言>的合著者--Mike Beedle.Mike 的这场意外令 ...

  9. ARM杂散知识

    画重点: 1.存储器格式:重点是大小端识别 经常考 2.对齐后结构体占用空间大小:使用aligned,packed,#pragma pack()三种方式都要会 Thumb指令集 Thumb指令集能够以 ...

  10. vue element 表单验证不通过,滚动到固对应位置

    我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...