Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
一,引言
上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构。通过 Terraform 部署执行计划,将整个 Azure Traffic Manager 结合 Azure Web App 的架构快速部署到云上。然后再将我们的示例项目代码部署到对应的不同区域的Azure Web 应用程序上。最后Azure Traffic Manager 将不同地理位置的用户的访问请求转发到后端的 Azure Web 应用上。
这时,又有人提问了,现在都流行 DevOps ,整个应用层面的项目代码都可以实现 CI/CD 整个过程,那这些基础设施代码可以实现 CI/CD 吗?
答案是肯定的,今天要演示的正如文章标题那样,利用 Azure DevOps 快速实现自动化部署基础设施资源。
开始内容之前,我们先看看整个 pipeline 过程

--------------------Azure Terraform 系列--------------------
1,Azure Terraform(一)入门简介
2,Azure Terraform(二)语法详解
3,Azure Terraform(三)部署 Web 应用程序
4,Azure Terraform(四)状态文件存储
5,Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
二,正文
1,Azure DevOps 创建项目
Azure DevOps 上创建 "CnBateBlogWeb_Infrastructure" 项目,Azure DevOps 地址:dev.azure.com。

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

选择模板页面,我们先选择 “Empty job”

修改 "Stage name",并且点击 “x” 进行关闭此页面

接下来,我们需要给当前 "pipeline" 添加 “artifact”

选择 “GitHub”,点击 “Service” 旁边的 “+” ,添加新的 “github connection”

输入 “Connection name” :“github_connection_yunqian44”,并且点击 “Authorize using OAuth” 进行登陆 github 认证

等待验证完成后,我们需要选择 terraform 对应的代码仓库,点击图中的箭头指向的位置

输入相应参数
Source(repository): "Terraform_Cnbate_Traffic_Manager"
Default branch(默认仓库):“remote_stats”
Default version:“Lastest from the default branch”
Source alias 选择默认后,点击 “Add” 进行添加

接下来就需要我们添加 “task” 了,点击图中箭头指向

点击 “Agent Job” 旁白 “+”,并在右边的输入框中输入 “Azure Key Vault”,选中图中的“Azure Key Vault”。点击 “Add”,添加 task。

修改相关参数
Display name:“Azure Key Vault:Get Storage Access Secret”
Azure subscription 选择当前自己的订阅
Key vault 选择:“cnbate-terraform-kv”
Secrets filter(机密过滤器):“terraform-stste-storage-key”,如果选择默认 “*”,则下载选定密钥库的所有机密

然后添加新的 task,搜索 “Terraform”,选择 “Terraform tool install”

修改 Terraform 版本 “0.14.3”

接下来再添加 Terraform 新的 task,选择 “Terraform”,点击 “Add”

修改相应参数:
Display name:“Terraform:Init”
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“

设置完 terraform init 相应参数后,我们需要修改 terraform init 的工作目录,选择完成后,点击 ”Add“ 进行添加操作

再次添加 ”Terraform“ task,用来配置 生成 terraform 部署计划

Display name:”Terraform:plan“
Command 选择:”plan“
Configuration directory: 选择 terraform 代码所在目录
Azure subscription 选择当前自己的Azure订阅

最后一步,再次添加 Terraform 新的 task,选择 “Terraform”,点击 “Add”

修改相应参数:
Display name:”Terraform:auto-apply“
Command:”validate and apply“
Configuration directory:选择 terraform 代码的工作目录
Additional command arguments:“-auto-approve”
Azure subscription:选择当前自己订阅

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

最后,我们需要设置 pipeline 的触发条件
开启持续部署触发,每次在所选存储库中发生Git推送时触发pipeline,接下来添加分支筛选条件
Type:Include,Branch:“remote_stats”,也就是说每当 “remote_stats” 发生git 推送的时候,触发此 pipeline
设置完毕后,点击 “Save” 进行保存

3,对Service principal 设置Key Vault 访问策略
具体操作步骤,我就不再演示了,大家可以参考:Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息

4,测试 Terraform 自动化部署
回到 terraform 代码上,我们提交并且推送新的代码到 “remote_stats” 远端分支上

这个时候,我们回到Azure DevOps 上我们就可以看到,当前 pipeline 已被触发。
等待稍许时间,我们可以看到当前 pipeline 执行日志,部署成功

同样,我们需要登陆Azure Portal 上确认 使用 terraform 管理的资源是否创建成功

查看Storage Account 的 Bolb 中的 terraform 状态文件

Bingo,今天的内容就到此结束,下期我们继续/
最后,大家试验完,记得删除刚刚使用 terraform 部署的资源,防止 Auzre 扣费
三,结尾
今天的内容比较多,基本上全都是需要在Azure DevOps 上进行操作的,大家要多加练习,熟能生巧。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还希望多多包涵,并且指出不足之处。
参考资料:Terraform 官方,azurerm 文档
Terraform_Cnbate_Traffic_Manager github:https://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源的更多相关文章
- Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)
一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...
- 基于云原生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插件
- 五、RF中UI自动化操作基础
列表分类 1.打开浏览器 Open Browser url browser [ url | browser=firefox | alias=None | remote_url=False | ...
- 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 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...
随机推荐
- java实现TCP通信(带界面)
服务端: package NetWork; import java.io.*;import java.net.*;import java.awt.event.*;import java.awt.*;i ...
- Difference between @Bean and @Autowired
Demo01 1 @SpringBootApplication 2 public class Application { 3 4 @Autowired 5 BookingService booking ...
- Servlet中的装饰者模式
装饰者模式 Decorator模式或者Wrapper模式允许修饰或者封装(在字面意义中,即修改行为)一个对象,即使你没有该对象的源代码或者该对象标识为final. Decorator模式适用于无法继承 ...
- jmeter的一些知识目录
1.JDK安装及环境变量配置2.Jmeter安装及环境变量配置3.如何启动 jmeter 4.下载并安装mysql驱动5.创建JDBC连接池及配置6 .新建线程组及参数配置7.http默认请求及参数配 ...
- 使用vika维格表来管理寺庙原来如此轻松~
我有一款适合用于寺庙管理的软件推荐,它是vika维格表,一款一站式的项目管理工具. 一站式项目管理 一个小小的寺庙需要管理的内容也非常的多,你应该不会购买多个系统去管理不同的项目,这样会让寺庙的花费大 ...
- MySQL高可用(一)主备同步:MySQL是如何保证主备一致的
主备同步,也叫主从复制,是MySQL提供的一种高可用的解决方案,保证主备数据一致性的解决方案. 在生产环境中,会有很多不可控因素,例如数据库服务挂了.为了保证应用的高可用,数据库也必须要是高可用的. ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.6)- 串行NOR Flash下载算法(MCUXpresso IDE篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE开发环境下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行N ...
- nginx反向代理部署springboot项目报404无法加载静态资源
问题:nginx反向代理部署springboot项目报404无法加载静态资源(css,js,jpg,png...) springboot默认启动端口为8080,如果需要通过域名(不加端口号)直接访问s ...
- jmeter+jdk环境配置
一:JDK 安装配置:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html ,下载JDK8 安装 1. ...
- 什么情况下调用doGet()和doPost()?
默认情况是调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法: 为get的时候,调用deGet()方法.