一,引言

  上一篇我们结合学习 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 实现自动化部署基础资源的更多相关文章

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

    一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...

  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. 五、RF中UI自动化操作基础

    列表分类 1.打开浏览器 Open Browser   url   browser [ url | browser=firefox | alias=None | remote_url=False | ...

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

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

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

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

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

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

随机推荐

  1. git单人本地操作

    git配置个人信息 git config --global user.name "用户名" git config --global user.email "邮箱" ...

  2. Yii 文件上传类的使用

    https://segmentfault.com/a/1190000009674814 以上链接的文章已经写的很好了,一目了然,这里不再多做说明. 补充:当执行 UploadedFile->sa ...

  3. vue API 知识点(3) --- 实例 总结

    一.实例 property 1.vm.$data Vue 实例观察的数据对象,Vue 实例代理了对其 data 对象 property 的的访问 2.vm.$props 当前组件接收到的 props ...

  4. C#中获取DataTable某一列的值转换为集合

    直接使用 //Linqvar l1 = (from d in dt.AsEnumerable() select d.Field<int>("ID")).ToList() ...

  5. 从最长公共子序列问题理解动态规划算法(DP)

    一.动态规划(Dynamic Programming) 动态规划方法通常用于求解最优化问题.我们希望找到一个解使其取得最优值,而不是所有最优解,可能有多个解都达到最优值. 二.什么问题适合DP解法 如 ...

  6. 记一次Apache的代码导致生产服务耗时增加

    引言 二狗:二胖快醒醒,赶紧看看刚才报警邮件,你上次写的保存用户接口耗时(<二胖的参数校验坎坷之路>)大大上升,赶紧排查下原因. 二胖:好的,马上看,内心戏可十足(心里却在抱怨,大中午的搅 ...

  7. 【Go】我与sync.Once的爱恨纠缠

    原文链接: https://blog.thinkeridea.com/202101/go/exsync/once.html 官方描述 Once is an object that will perfo ...

  8. Redis底层数据结构实现

    REDIS  较宽泛的支持5种数据结构  分别为 字符串 列表 集合 散列 有序集合 关于这几种数据结构的使用 相信网上有很多资料,查看官网API 也很详细了  读者可以自己随意翻阅 很方便 . 接下 ...

  9. select机制

    select机制 函数作用: 在一段时间指定的时间内,监听用户感兴趣的文件描述符上可读.可写和异常事件. 函数原型: #include <sys/time.h> #include < ...

  10. 出现org.apache.ibatis.binding.BindingException异常

    出现绑定式异常 查看target文件夹里面再mapper中,发现运行时缺少xml文件 解决办法 1.将xml文件复制到target中Mapper文件夹下面. 2.将xml放到resource目录下 3 ...