一,引言

  之前一篇文章有讲解到利用 利用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. Python 中日期函数

    导入日期库 datetime import datetime # 或者from datetime import datetime ,date 字符串转datetime

  2. 【命令】at命令和cron命令

    博文链接:https://www.cnblogs.com/l75790/articles/9191753.html

  3. 如何用tep完成增删改查接口自动化

    tep的设计理念是让人人都可以用Python写自动化,本文就来介绍如何用tep完成增删改查接口自动化. 环境变量 编辑fixtures/fixture_admin.py: "qa" ...

  4. How to install android studio on ubuntu14.04

    First: open the web page: https://developer.android.com/studio/index.html download the Android Studi ...

  5. Future.get(并发之从任务中产生返回值)

    import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java ...

  6. 从 Eclipse 到 IDEA,金字塔到太空堡垒【转]

    https://blog.csdn.net/X5fnncxzq4/article/details/83829223 工欲善其事,必先利其器.对于程序员来说,具有生产力的工具能让你事半功倍,心情大好.两 ...

  7. SQL Server 数据库还原进度查看

    SQL Server 数据库还原进度查看 关键字:数据库,还原,进度,查看 文档说明: 本文档受某实际需求启发,某约500G大小数据库还原,由于对应服务器性能较差(内存仅4G且可用内存仅2.8G),数 ...

  8. shell脚本学习之6小时搞定(1)

    shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...

  9. git切换分支后远程提交报错

    切换分支后提交,报错如下 解决办法

  10. Spring Boot -- 外部配置的属性使用

    Spring Boot允许使用propertities文件.yaml文件或者命令行参数作为外部配置. 命令行参数配置 Spring Boot可以基于jar包运行,打成jar包的程序可以直接通过下面的命 ...