您的位置:首页 > 运维架构

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

2021-01-18 17:07 901 查看

一,引言

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

6,Azure Terraform(六)Common Module

二,正文

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 

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: