使用工作流程部署 Bicep 檔案
既然您已建立基本工作流程,現在可以設定工作流程以部署 Bicep 檔案。 在此單元中,您將了解如何從工作流程部署 Bicep 程式碼,以及如何設定部署步驟。
注意
本單元中的命令僅用於示範概念。 請先不要執行命令。 您很快就會在此練習所學到的內容。
簽出您的程式碼
您的 Bicep 檔案是儲存在您的 Git 存放庫中。 在 GitHub Actions 中,您必須明確地告知工作流程從您的 Git 存放庫簽出檔案。 否則,您的工作流程將無法存取檔案。 此步驟通常是您作業所執行的第一件事。
若要簽出您的程式碼,您可以使用 actions/checkout@v3
動作:
name: MyWorkflow
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
請注意,工作流程包含 uses
關鍵字。 該關鍵字表示您想要使用名為 actions/checkout
的預先定義動作。
如同 Bicep 資源,動作一律會建立版本。 在此案例中,工作流程會使用第 3 版,因此 @v3
會附加至動作名稱。
工作流程包含此動作之後,您的存放庫程式碼將會簽出至執行器的檔案系統。 您可以使用 path
參數指定要儲存檔案的路徑。
向 Azure 驗證
當從自己的電腦部署 Bicep 檔案時,您會使用 Azure CLI 或 Azure PowerShell。 您必須先登入 Azure,才可以部署程式碼。 通常,這些工具會要求您在瀏覽器中輸入您的登入資訊。 驗證您的認證之後,即會確認您的資源部署權限,且您可使用這些工具來部署 Bicep 檔案。
提示
在本課程模組中,會建立可供您的工作流程使用的工作負載身分識別。 在使用工作負載身分識別驗證您的 Azure 部署工作流程課程模組中,會進一步詳細說明工作負載身分識別,包括工作負載身分識別的運作方式,以及建立工作負載身分識別、為工作負載身分識別指派角色及管理這些角色的方式。
依工作流程部署也需要驗證。 因為工作流程是在沒有任何人為介入的情況下執行,所以必須使用工作流程身分識別向 Azure 驗證工作流程。 GitHub 和 Microsoft Entra ID 一起運作,可安全地驗證您的工作流程,而無需任何認證。
當您的工作流程需要與 Azure 通訊時,工作流程步驟會使用工作負載身分識別來登入 Azure。 然後,工作流程中定義的這些步驟會使用工作流程的「身分識別」。
您必須確保工作負載身分識別有執行部署步驟所需的權限。 例如,您可能需要將資源群組的參與者角色指派給工作負載身分識別,以便您在其中部署資源。
警告
將您的使用者登入資訊儲存在 YAML 檔案中,然後使用 az login
命令來登入可能似乎更容易。 請絕對不要使用此方法來驗證工作流程。 YAML 檔案會以純文字儲存認證。 任何有權存取您存放庫的人員,都可以看到並使用這些認證。 即使只將存取權限制在 GitHub 存放庫,但只要有人複製您的存放庫,該人員電腦上就會有保存認證的 YAML 檔案。
登入 Azure
在您的工作流程可以針對您的 Azure 環境執行命令之前,其必須先登入。 有一個名為 azure/login
的動作會處理登入程序。 您也需要授與權限,讓您的工作流程使用驗證權杖。
name: MyWorkflow
on: [workflow_dispatch]
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
此 azure/login
動作會要求您提供三項資訊,才能使用工作負載身分識別:Microsoft Entra 應用程式識別碼、Microsoft Entra 租用戶 (目錄) 識別碼,以及您想要使用的 Azure 訂用帳戶識別碼。
執行此動作之後,您的執行器將會由系統進行驗證,而且能夠針對您的 Azure 環境執行陳述式。
部署您的 Bicep 檔案
您的工作流程登入 Azure 之後,即可使用工作負載身分識別來執行 Bicep 部署。 在 GitHub Actions 中,您會使用 azure/arm-deploy
動作來起始 Bicep 部署。
注意
還有其他方法可以從 GitHub Actions 部署 Bicep 檔案。 例如,您可以使用 azure/CLI
動作,然後提供 Azure CLI 命令以執行您的部署。 不過,因為 azure/arm-deploy
工作是特別針對部署而設計的,所以您將在本課程模組中加以使用。
以下是如何設定步驟以使用 azure/arm-deploy
動作的範例:
name: MyWorkflow
on: [workflow_dispatch]
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: azure/arm-deploy@v1
with:
resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
template: ./deploy/main.bicep
parameters: environmentType=Test
azure/arm-deploy
動作接受數個參數,包括:
resourceGroupName
:資源群組的名稱,您想要在其中部署 Bicep 檔案中定義的資源。template
:您的存放庫中 Bicep 檔案的路徑。 路徑相對於儲存機制根路徑。parameters
:表示您在部署時所提供的任何參數值。 在此範例中,我們會提供 environmentType 參數的值。
因為先前的 azure/login
動作已將您的工作流程登入 Azure,所以 azure/arm-deploy
步驟會在已驗證的執行器上執行。
變數
您的工作流程通常會包含您想要在工作流程檔案中的多個位置重複使用的值。 您也可以將這些值儲存在工作流程檔案的頂端,以便輕鬆參考,並且能夠輕鬆地變更值。 在您的工作流程中,您定義的變數將會呈現為環境變數。 若要定義可重複使用的值,請使用「變數」。
建立變數
您可以在工作流程檔案中的不同層級建立變數。 但是,如果您想要讓整個工作流程檔案中使用變數,則可以將其定義在接近檔案頂端的 on
陳述式正下方。 若要定義您的變數,請使用 env
參數:
env:
AZURE_RESOURCEGROUP_NAME: gh-actions
AZURE_WEBAPP_NAME: webapp-gh-actions
在前面的範例中,我們指定了兩個環境變數。
在您的工作流程中使用變數
建立變數之後,您必須使用特殊語法在工作流程的 YAML 檔案中加以參考,如下所示:
${{ env.AZURE_RESOURCEGROUP_NAME }}
預設環境變數
GitHub Actions 也會使用「預設的環境變數」。 預設環境變數包含預先定義的資訊,可用於工作流程中。 以下是一些您可以在工作流程中使用的預設環境變數:
github.sha
:觸發要執行之工作流程的 Git 認可識別碼。github.run_number
:存放庫中每個特定工作流程執行的唯一編號。 此編號會從 1 開始,代表工作流程的第一次執行,並隨著每個新的執行而遞增。 您可以使用此變數為 Azure 部署命名,以便追蹤部署一路回到觸發部署的特定工作流程執行。注意
在 GitHub Actions 中,您可以重新執行工作流程執行。 當您執行此動作時,執行編號不會更改,因此您不應使用
github.run_number
變數來計算您的工作流程已執行的次數。
密碼
有時候,您必須儲存秘密資訊以供您的工作流程使用,例如資料庫密碼或 API 金鑰。 您可以使用 GitHub 秘密,安全地儲存包含認證或敏感性資訊的資訊。 您的工作流程可以存取秘密的值。
祕密是在您的 GitHub 存放庫設定中建立的。 祕密可供存放庫中的所有工作流程使用。 在稍後的課程模組中,您將了解「環境」,這可讓您限制使用祕密來部署至特定環境。
警告
GitHub Actions 預設會模糊化工作流程記錄中的祕密變數值,而您也必須遵循良好的做法。 您的工作流程步驟可存取祕密的值。 如果您的工作流程包含未安全地處理祕密的步驟,則工作流程記錄中有可能會顯示祕密值。 您應該一律仔細檢閱對工作流程定義檔案的任何變更,以確認不會錯誤地處理祕密。
您可以透過使用 GitHub Web 介面來建立祕密。 若要在您的工作流程中參考祕密值,請使用下列語法:
${{ secrets.NAME_OF_THE_SECRET }}
當工作流程啟動時,執行您部署步驟的執行器可存取解密的 GitHub 祕密值。 GitHub Actions 是設計成不會顯示工作流程記錄中的祕密值。
提示
就像 Bicep 參數一樣,您不需要為所有內容建立變數。 為可能因為環境不同而變更的任何內容以及屬於任何祕密內容的 GitHub 祕密建立變數,是不錯的主意。 由於工作流程一律會使用相同的 Bicep 檔案,所以您不需要為路徑建立變數。
在本課程模組中,您將使用 GitHub 秘密來儲存 azure/login
工作登入 Azure 所需的資訊:您的 Microsoft Entra 訂用帳戶和租用戶識別碼,以及工作負載身分識別的應用程式註冊識別碼。