一,引言
上一篇我們結合學習 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
作者:Allen
版權:轉載請在文章明顯位置注明作者及出處。如發現錯誤,歡迎批評指正。