一,引言

  上一篇我们结合学习 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

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

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

二,正文

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


本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还希望多多包涵,并且指出不足之处。