了解 GitHub Actions

已完成

您可以使用「工作流程」將部署程序中的步驟自動化。 每次變更您的程式碼並將變更認可至 Git 存放庫時,工作流程都會執行您預先定義的程序。 工作流程可以驗證 Bicep 程式碼是否符合您的品質標準,然後自動執行將資源部署到 Azure 的動作。 此程序是在您建立的「工作流程定義」中定義的。

GitHub Actions 是 GitHub 的功能。 GitHub 也裝載 Git 存放庫,其可讓您用來儲存程式碼及與您的共同作業者共用程式碼。 當將 Bicep 程式碼儲存在 GitHub 時,GitHub Actions 可存取您的程式碼以將部署程序自動化。 在此單元中,您將了解什麼是 GitHub Actions。

什麼是工作流程?

工作流程是在檔案中定義的可設定、可重複流程,用來測試及部署程式碼。 工作流程是由您需要執行的所有步驟所組成 (依適當順序排列)。

當您使用 GitHub Actions 時,您會在 YAML 檔案中定義您的工作流程設定。 因為工作流程 YAML 檔案是程式碼檔案,所以該檔案會與 Bicep 程式碼一起儲存在您名為 .github/workflows 之資料夾的 Git 存放庫中。 YAML 檔案是一種結構化文字檔,類似於 Bicep 結構化文字檔。 您可以使用任何文字編輯器建立及編輯 YAML 檔案。 在此課程模組中,您將使用 Visual Studio Code 作為編輯器。 GitHub Web 介面提供工具,可讓您用來檢視及編輯工作流程 YAML 檔案、在工作流程定義上共同作業,以及使用認可與分支來管理工作流程檔案的不同版本。

執行器

到目前為止,您已從本機電腦部署 Bicep 檔案。 在您撰寫 Bicep 範本之後,便可以使用 Azure CLI 或 Azure PowerShell 將其部署至 Azure。 這些工具會使用您的電腦資源將範本提交至 Azure。 其會使用您的個人身分識別向 Azure 驗證,並確認您有部署這些資源的權限。

工作流程也需要存取具有正確作業系統與硬體平台的電腦或 GPU,以便執行部署動作。 GitHub Actions 會使用執行器,也就是設定為執行工作流程部署步驟的電腦。 每個執行器都已經有您在前幾個課程模組中使用過的 Bicep 與 Azure 工具,因此能夠執行您從自己電腦執行的相同作業。 GitHub Actions 服務會指示執行器執行您在工作流程 YAML 檔案中定義的步驟,而不是人工執行命令。

GitHub Actions 為不同的作業系統 (例如 Linux 或 Windows) 提供多種執行器以及不同的工具組。 GitHub 會管理這些執行器,因此您不需要為執行器維護任何計算基礎結構。 執行器有時稱為「GitHub 裝載的執行器」或「裝載的執行器」,因為它們是代表您裝載。 當您的工作流程執行時,會自動建立裝載的執行器。 當您的工作流程完成執行時,會自動刪除裝載的執行器。 您無法直接存取裝載的執行器,因此您的工作流程必須包含部署解決方案所需的所有步驟。

Diagram that shows a workflow that runs on a runner.

注意

您可以建立稱為 「自我裝載式執行器」 的自訂執行器。 如果執行工作流程時需要有特定的軟體,或者需要精確控制執行器的設定方式,建議您建立自我裝載式執行器。 我們不會在此課程模組中討論自我裝載式執行器,但會在摘要中提供詳細資訊的連結。

觸發程序

您必須使用「觸發程序」來指示 GitHub Actions 執行您工作流程的「時間」。 有多種類型的觸發程序可供選擇。 現在,您將使用「手動觸發程序」來告知 GitHub Actions 何時開始執行您的工作流程。 稍後在此課程模組中,您將深入了解其他類型的觸發程序。

Diagram that shows a trigger initiating a workflow.

步驟

一個「步驟」代表工作流程執行的單一作業。 步驟類似您在 Bash 或 PowerShell 中執行的個別命令。 在大部分的部署中,您會依序執行數個步驟。 您會在工作流程 YAML 檔案中定義每個步驟的順序與所有詳細資料。

GitHub Actions 提供兩種類型的步驟:

  • 執行步驟:你可以使用執行步驟,在 Bash、PowerShell 或 Windows 命令介面中執行單一命令或一系列命令。
  • 動作步驟:動作步驟讓您無須撰寫指令碼陳述式,就能輕鬆存取許多不同功能。 例如,有內建工作可將 Bicep 檔案部署到 Azure。 任何人都可以撰寫動作,並與其他使用者共用。 有大量的商業和開放原始碼工作可供使用。

相較於動作,有些人更偏好使用指令碼陳述式,因為後者讓您對執行的項目擁有更大的控制權。 有些人則偏好使用動作,因為不需要撰寫及管理指令碼。 在此課程模組中,我們會混合使用這兩種方法。

工作

在 GitHub Actions 中,「作業」代表一組已排序的步驟。 工作流程中至少一定要有一個作業,而且當您建立複雜的部署時,有多個作業也非常常見。

注意

您可以將每個作業設定為在不同的執行器上執行。 當您建置及部署的解決方案必須在作業工作流程的不同部分使用不同的作業系統時,在不同的執行器執行作業便相當實用。

例如,假設您正在建置 iOS 應用程式與應用程式的後端服務。 您可能會在 macOS 執行器中執行某個作業,以建置此 iOS 應用程式;在 Ubuntu 或 Windows 執行器上執行另一個作業,以建置後端。 您甚至可能會指示工作流程同時執行兩個作業,以加速工作流程的執行。

Diagram that shows a workflow with two steps, both within one job.

基本工作流程範例

您現在已經了解 GitHub Actions 的基本概念,讓我們來看看 YAML 中的簡單工作流程定義:

name: learn-github-actions

on: [workflow_dispatch]

jobs:
  say-hello:
    runs-on: ubuntu-latest
    steps:
      - name: 'Run a one-line command'
        run: echo "hello from GitHub Actions"
      - name: 'Run a multi-line command'
        run: |
          echo "We'll add more steps soon."
          echo "For example, we'll add our Bicep deployment step."

讓我們仔細看看這個檔案的每一部分:

  • name 是您的工作流程名稱。 此名稱會顯示在 GitHub Web 介面上。
  • on 會告訴您的工作流程何時執行。 在此案例中,on: [workflow_dispatch] 會告訴 GitHub Actions 您要手動觸發工作流程。
  • jobs 會將工作流程中的所有作業組成群組。
  • say-hello 是此工作流程中第一個和唯一作業的名稱。
  • runs-on 指示工作流程執行作業時要使用的執行器。 在此範例中,工作流程會在 Ubuntu 作業系統上執行,這來自 GitHub 裝載的執行器的集區。
  • steps 會列出要在作業中執行的步驟順序。 範例 YAML 包含兩個步驟。 兩個步驟都會執行簡單的指令碼以回應某些文字。 每個步驟都有一個 name 值,其為一般人看得懂的值。 您將會在工作流程記錄中看到該名稱。 若要建立多行指令碼步驟,請使用直立線字元 (|),如範例所示。 在步驟執行之後,您將會在工作流程記錄中看到輸出。

重要

在 YAML 檔案中,縮排相當重要。 請查看範例 YAML。 YAML 中的某些行會縮排兩或四個空格。 如果不能正確縮排檔案,GitHub Actions 就無法加以解譯。 Visual Studio Code 可協助您尋找並修正 YAML 檔案中的縮排錯誤。