套用自動化工作流程

已完成

在本單元中,您將瞭解自動化的工作流程工具,以及它們如何與 Terraform 和 Azure 整合。

關於 GitHub Actions

作為基礎結構管理員,您需要使用與您專案相同的版本控制來組建與部署工作流程。

您可以使用 GitHub Actions,執行連結至 GitHub 存放庫的持續整合和持續傳遞 (CI/CD) 流程。

透過 GitHub Actions,您可以從 GitHub 內組建、測試及部署您的程式碼。 您也可以指派程式碼檢閱、管理分支及分級問題。

GitHub Actions 元件

讓我們來說明各種 GitHub Actions 元件,如下圖所示:

此圖顯示 GitHub Actions 工作流程與其元件作業、步驟和動作的關聯性。

  • 工作流程:由特定事件或活動觸發,工作流程是自動化軟體開發生命週期工作的作業和步驟集合。
  • 作業:在執行器上執行的一組步驟。
  • 步驟:可執行一或多個命令或動作的工作。 每個步驟都是由個別的動作所組成,並在特定事件 (例如提取要求) 發生之後執行。
  • 動作:可合併成步驟的獨立命令。 您可結合多個步驟以建立作業。 個別動作是封裝指令碼,可將軟體開發工作自動化。 若要建立工作流程,您可以將動作新增至 GitHub 存放庫中 .github/workflows 目錄中的 YAML 檔案。

Terraform GitHub 動作

hashicorp/setup-terraform 動作會透過下列方式,在您的 GitHub Actions 工作流程中設定 Terraform CLI:

  • 下載 Terraform CLI 的特定版本,並將其新增至 PATH
  • 使用 Terraform Cloud 或 Enterprise 主機名稱和 API 權杖來設定 Terraform CLI 設定檔。
  • 安裝包裝函式指令碼以包裝稍後對 terraform 二進位檔的呼叫,並以名為 stdoutstderrexitcode 的輸出分別公開其 STDOUT、STDERR 和結束代碼。

使用 Azure 驗證 GitHub Actions

Terraform 支援數個用於向 Azure 驗證的選項:

  • 當您以互動方式使用 Terraform 時,我們建議您透過 Microsoft 帳戶進行驗證。
  • 當您從程式代碼或自動化使用 Terraform 時,建議您透過 Azure 服務主體進行驗證。

服務主體是為了與應用程式、託管服務及自動化工具搭配使用來存取 Azure 資源而建立的身分識別。

後續步驟

在下個單元中,我們將設定範例專案,並使用 GitHub Actions 與 Terraform 將專案部署至 Azure。

新 Azure Pipelines 的重要概念

讓我們來瞭解組成 Azure Pipelines 的元件。

Azure Pipeline 中重要概念和元件圖表。

  • 觸發程序會告知管線要執行。
  • 管線是由一或多個 階段所組成。 管線可以部署到一或多個 環境
  • 階段是一種在管線中組織作業的方式,而且每個階段可以有一或多個 作業
  • 每個作業都會在一個 代理程式上執行。 作業也可以是無代理程式
  • 每個代理程式都會執行包含一或多個 步驟的作業。
  • 步驟可以是工作指令碼,是管線的最小組建區塊。
  • 工作是預先封裝的腳本,可執行動作,例如觸發 REST API 或發布編譯產物。
  • 產物是執行過程中發佈的檔案或套件集合。

提示

如需不同管線元件及其使用方式的詳細資訊,請參閱 摘要 一節中提供的連結。

Azure Pipelines 的 Terraform 工作

執行像 planapplydestroy 這樣與 Azure 互動的命令時,該任務會使用 Azure 服務連線來授權對目標訂用帳戶的操作。 聯機至 Azure 的建議方式是將服務連線系結至 Azure 服務主體。 Azure 服務主體是您為使用自動化工具來存取 Azure 資源所建立的身分識別。

下列 YAML 程式碼片段使用 Azure Pipeline Terraform 提供者 azurerm。 服務連線是透過 environmentServiceNameAzureRM 輸入來指定:

- task: TerraformTaskV1@0
  inputs:
    provider: 'azurerm'
    command: 'apply'
    workingDirectory: $(Build.Repository.LocalPath)/terraform
    backendAzureRmContainerName: 'tfstate'
    backendAzureRmKey: 'tf/terraform.tfstate'
    environmentServiceNameAzureRM: $(serviceConnection)

提示

如果您使用 azurerm 作為 Azure Pipeline Terraform 提供者,則也需要提供服務連線和記憶體容器,以搭配 Terraform 後端 狀態使用。

傳遞參數

有多種方法可將參數傳遞至 terraform 命令。 變數可讓您輕鬆地將資料的重要部分放入管線的各個部分。

您可以遵循下列步驟來設定組建管線的變數:

  1. 移至 [ 管線] 頁面,選取適當的管線,然後選取 [ 編輯]。
  2. 找出此管線的 [變數]
  3. 新增或更新變數。
  4. 若要將變數標記為秘密,請選取 [將此值保密]
  5. 儲存管線。

輸出 Terraform 至管線變數

Terraform CLI 工作支援執行 Terraform output 命令。 執行 CLI 時,會從 terraform output 命令發出每個輸出變數以建立管線變數。

後續步驟

在下個單元中,我們將設定範例專案,並使用 Azure Pipelines 與 Terraform 將專案部署至 Azure。