套用自動化工作流程

已完成

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

關於 GitHub Actions

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

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

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

GitHub Actions 元件

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

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

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

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 工作

執行與 Azure 互動的命令 (例如 planapplydestroy) 時,此工作將使用 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。