以前一篇文章有講解到利用 利用Azure DevOps 實現自動化部署基礎資源,當時 TF 代碼沒有針對 Azure 各個資源的封裝,全部的資源代碼所有寫在一個 main.tf 文件中。而後還有講到 Azure Resource Common Module 的 TF 代碼的封裝。以前還在Azure Terraform 第四節講到利用 Azure Storage 遠程狀態文件存儲。那麼今天咱們嘗試將封裝過 Common Module 的 TF 代碼,結合 TF 狀態文件遠端存儲,實現自動化部署基礎資源html
--------------------Azure Terraform 系列--------------------git
輸入項目名稱 「CnBateBlogWeb_Infrastructure_V2」,點擊 「Create」 建立項目。github
選擇 「 Pipelines=》Releases」,點擊 「New pipeline」 建立新的 pipeline安全
模板選擇 「Empty job」,而且點擊圖中箭頭所指的 「x」 關閉頁面app
Stage 頁面,輸入新的 Stage name:「Deploy Infra」,而且關閉此頁面ide
接下來須要添加 「artifact」,點擊圖中的 「+ Add an artiface」post
選擇 」GitHub「 ,測試
Service 添加新的 connection:"github_connection_xxxxx"url
Source(repository)選擇:TF 代碼庫spa
Default branch:「remote_stats」
Default version:」Latest from the default branch「
點擊 "Add" 添加 artifact。
接下來添加 」Deploy Infra「 Stages 相關 task
點擊圖中圈中的 」+「,添加 new task,而且在右邊的輸入框中輸入 」Azure CLI「,選中圖中的 」Azure CLI「
注意,以前在 一篇文章中講到遠端存儲時,須要提早建立 Azure Storage Accunt 和 Azure KeyVault。Azure Storage Account 的 Container 中用來存儲 TF 的狀態文件,Azure KeyVault 存儲 Azure Storage Account 的 access_key(訪問密鑰),以前是手動建立,主要是爲了給你們演示。今天,咱們經過 Azure CLI 建立快捷操做,而且 Azure CLI 這個 task 移至 Azure Releases Pipeline 中。
輸入相關參數:
Display name:」Azure CLI :Create Storage Account,Key Vault And Set KeyVault Secret「
Azure Resource Manager connection:選擇本身的訂閱 id
Script Type(腳本類型)選擇:」Shell「
Script Location(腳本位置)選擇:」Inline script「(內聯腳本)
Inline Script(腳本)在 Azure 中建立如下資源:
1)Storage 存儲賬戶
2)Blob存儲容器(將存儲狀態文件)
3)密鑰庫,將用於安全地存儲Storage 的訪問密鑰
Inline Script(內聯腳本)以下所示:
# create azure resource group
az group create --location eastasia --name $(terraform_rg)
# create azure storage account az storage account create --name $(storage_account) --resource-group $(terraform_rg) --location eastasia --sku Standard_LRS
# create storage account container for tf state az storage container create --name $(storage_account_container) --account-name $(storage_account)
# query storage key and set variable ACCOUNT_KEY=$(az storage account keys list --resource-group $(terraform_rg) --account-name $(storage_account) --query "[?keyName == 'key1'][value]" --output tsv)
# create azure keyvault az keyvault create --name $(keyvault) --resource-group $(terraform_rg) --location eastasia --enable-soft-delete false
# set keyvault secret,secret value is ACCOUNT_KEY az keyvault secret set --name $(keyvault_sc) --vault-name $(keyvault) --value $ACCOUNT_KEY
你們有注意到沒 」Inline Script「 中既有 Pipeline 設置的變量,又有自定義的系統變量
若是是獲取 pipeline 中設置變量:$(varivale_name)
若是是獲取自定義系統變量:$variable_name
接下來設置 pipeline 變量,選擇 」Variables「,點擊 」+Add「,添加相應的參數設置
Name | Value |
keyvault | cnbate-terraform-kv6 |
keyvault_sc | terraform-stste-storage-key |
storage_account | cnbateterraformstorage |
storage_account_container | terraform-state |
terraform_rg | Web_Test_TF_RG |
輸入 」Azure Key Vault「,點擊 」Add「 添加 Azure Key Vault Job
輸入相關參數:
Display name:「Azure Key Vault:Get Storage Access Secret」
Azure subscription 選擇當前本身的訂閱
Key vault 選擇:「cnbate-terraform-kv6」
Secrets filter(機密過濾器):「terraform-stste-storage-key」,若是選擇默認 「*」,則下載選定密鑰庫的全部機密
搜索 「Terraform」,選擇 「Terraform tool install」
修改相應參數:
Display name:"Install Terraform 0.14.3"
Version(版本):」0.14.3「
搜索 「Terraform」,點擊 「Add」
修改相應參數:
Display name:「Terraform:Init」
Configuration directory:選擇到 」~/src/model「 這個目錄下,也就是 terraform 代碼的工做目錄
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「,點擊 」Add「
修改相關參數:
Display name:」Terraform:plan「
Command 選擇:」plan「
Configuration directory: 選擇 terraform 代碼的工做目錄
Azure subscription 選擇當前本身的Azure訂閱
搜索 」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」 進行保存
先登陸 Azure Portal 確保 「Web_Test_TF_RG」 資源組中不存在任何資源
手動觸發 Azure Release Pipeline
點擊 「Create release」 進行手動觸發
稍等片刻,等待pipeline 執行完畢
查看 「Web_Test_TF_RG」 中的全部資源
Bingo,大功告成!!!!
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。😃😃😃😃😃😃
今天的實戰操做比較多,全都是須要在Azure DevOps 上進行操做的,你們要多加練習,熟能生巧。本文所分享的內容也存在着不少我本身的一些理解,有理解不到位的,還但願多多包涵,而且指出不足之處。
參考資料:Terraform 官方,azurerm 文檔,Azure CLI 文檔
Terraform_Cnbate_Traffic_Manager github:https://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager
做者:Allen
版權:轉載請在文章明顯位置註明做者及出處。如發現錯誤,歡迎批評指正。