一,引言
上一篇我们结合学习 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
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。