­

Azure Terraform(七)利用Azure DevOps 實現自動化部署基礎資源(補充)

一,引言

  之前一篇文章有講解到利用 利用Azure DevOps 實現自動化部署基礎資源,當時 TF 代碼沒有針對 Azure 各個資源的封裝,所有的資源代碼全部寫在一個 main.tf 文件中。然後還有講到 Azure Resource Common Module 的 TF 代碼的封裝。之前還在Azure Terraform 第四節講到利用 Azure Storage 遠程狀態文件存儲。那麼今天我們嘗試將封裝過 Common Module 的 TF 代碼,結合 TF 狀態文件遠端存儲,實現自動化部署基礎資源

——————–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 實現自動化部署基礎資源(補充)

二,正文

1,Azure DevOps 創建項目

輸入項目名稱 「CnBateBlogWeb_Infrastructure_V2」,點擊 「Create」 創建項目。

2,配置Azure DevOps Release Pipeline 環境 

2.1,添加 Release Pipeline

選擇 「 Pipelines=》Releases」,點擊 「New pipeline」 創建新的 pipeline

模板選擇 「Empty job」,並且點擊圖中箭頭所指的 「x」 關閉頁面

Stage 頁面,輸入新的 Stage name:「Deploy Infra」,並且關閉此頁面

2.2,添加 Artifacts

接下來需要添加 「artifact」,點擊圖中的 「+ Add an artiface」

選擇 」GitHub「 ,

Service 添加新的 connection:”github_connection_xxxxx”

Source(repository)選擇:TF 代碼庫

Default branch:「remote_stats」

Default version:」Latest from the default branch「

點擊 “Add” 添加 artifact。

2.3,添加 task

接下來添加 」Deploy Infra「 Stages 相關 task

2.3.1,創建遠程存儲相關 job

點擊圖中圈中的 」+「,添加 new task,並且在右邊的輸入框中輸入 」Azure CLI「,選中圖中的 」Azure CLI「

注意,之前在  一篇文章中講到遠端存儲時,需要提前創建 Azure Storage AccuntAzure KeyVault。Azure Storage AccountContainer 中用來存儲 TF 的狀態文件,Azure KeyVault 存儲 Azure Storage Accountaccess_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

2.3.2,添加 pipeline variables

接下來設置 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

 

2.3.3,添加 Azure KeyVault 獲取 Access Secret Job

輸入 」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」,如果選擇默認 「*」,則下載選定密鑰庫的所有機密

2.3.4,添加 Terraform install Job

搜索 「Terraform」,選擇 「Terraform tool install」

修改相應參數:

Display name:”Install Terraform 0.14.3″

Version(版本):」0.14.3「

2.3.5,添加 Terraform 初始化 Job

搜索 「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「  

2.3.6,添加 Terraform 生成部署計劃 Job

搜索 」Terraform「,點擊 」Add「

修改相關參數:

Display name:」Terraform:plan「

Command 選擇:」plan「

Configuration directory: 選擇 terraform 代碼的工作目錄

Azure subscription 選擇當前自己的Azure訂閱

2.3.7,添加 Terraform 執行部署計劃 Job

搜索 」Terraform「,點擊 」Add「

修改相應參數:

Display name:」Terraform:auto-apply「

Command:」validate and apply「

Configuration directory:選擇 terraform 代碼的工作目錄

Additional command arguments:「-auto-approve」

Azure subscription:選擇當前自己訂閱

2.3.8,保存 Azure Pipeline 設置,並且設置 Pipeline 的觸發條件

修改當前 pipeline 名稱,並且點擊 「Save」 進行保存

設置 pipeline 的觸發條件

開啟持續部署觸發,每次在所選存儲庫中發生Git推送時觸發pipeline,接下來添加分支篩選條件

Type:Include,Branch:「remote_stats」,也就是說每當 「remote_stats」 發生git 推送的時候,觸發此 pipeline

設置完畢後,點擊 「Save」 進行保存

3,測試Azure DevOps 自動化部署基礎設施資源

 先登錄 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://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager

作者:Allen 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。