Share via


設定 GitHub Actions 以建立容器執行個體

GitHub Actions 為 GitHub 中的一組功能,其可在與您儲存程式碼相同的位置將您的軟體開發工作流程自動化,並針對提取要求和問題進行共同作業。

使用部署至 Azure 容器執行個體 GitHub Actions,將對於 Azure 容器執行個體的單一容器部署自動化。 該動作可讓您設定容器執行個體的屬性,該執行個體類似於 az container create 命令中的容器執行個體。

本文會說明如何在執行下列動作的 GitHub 存放庫中設定工作流程:

  • 從 Dockerfile 建置映像
  • 將映像推送至 Azure 容器登錄
  • 將容器映像部署至 Azure 容器執行個體

本文會說明設定工作流程的兩種方式:

重要

Azure 容器執行個體的 GitHub Actions 目前為預覽狀態。 若您同意補充的使用規定即可取得預覽。 在公開上市 (GA) 之前,此功能的某些領域可能會變更。

必要條件

  • GitHub 帳戶 - 如果您還沒有帳戶,請在 https://github.com 上建立帳戶。
  • Azure CLI - 您可以使用 Azure Cloud Shell 或安裝在本機的 Azure CLI 來完成這些 Azure CLI 步驟。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • Azure 容器登錄 - 如果您沒有 Azure 容器登錄,請使用 Azure CLIAzure 入口網站或其他方法,在基本層中建立 Azure 容器登錄。 請記下用於部署的資源群組,其會用於 GitHub 工作流程。

設定存放庫

  • 如需本文中的範例,請使用 GitHub 來對下列存放庫進行派生:https://github.com/Azure-Samples/acr-build-helloworld-node

    此存放庫包含了 Dockerfile 和來源檔案,可建立小型 Web 應用程式的容器映像。

    GitHub 中 [分支] 按鈕 (醒目提示) 的螢幕快照

  • 請確定您已為存放庫啟用動作。 瀏覽至分支存放庫,然後選取 [設定]> [動作]。 在 [動作權限] 中,請確定您已選取 [允許所有動作]

設定 GitHub 工作流程

建立 Azure 驗證的認證

在 GitHub 工作流程中,您必須提供 Azure 認證來向 Azure CLI 進行驗證。 下列範例會建立服務主體,其參與者角色的範圍為您容器登錄的資源群組。

首先,取得資源群組的資源識別碼。 在下列 az group show 命令中取代您的群組名稱:

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

使用 az ad sp create-for-rbac 來建立服務主體:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --sdk-auth

輸出會類似:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "xxxx251c-xxxx-xxxx-xxxx-bf99a306xxxx",
  "tenantId": "xxxx88bf-xxxx-xxxx-xxxx-2d7cd011xxxx",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

儲存 JSON 輸出,因為在稍後的步驟中會用到。 此外,請記下 clientId,您需要在下一節中更新服務主體。

登錄驗證的更新

更新 Azure 服務主體認證,以便允許容器登錄的推送和提取存取權。 此步驟可讓 GitHub 工作流程使用服務主體,以便對容器登錄進行驗證,並推送和提取 Docker 映像。

取得容器登錄的資源識別碼。 在下列 az acr show 命令中,以您的登錄名稱取代名稱:

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

使用 az role assignment create 來指派 AcrPush 角色,其可提供登錄的推送和提取存取權。 取代您服務主體的用戶端識別碼:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

將認證儲存至 GitHub 存放庫

  1. 在 GitHub UI 中,瀏覽至分支存放庫,並選取 [安全性] > [祕密和變數] > [動作]

  2. 選取 [新增存放庫密碼] 來新增下列祕密:

祕密
AZURE_CREDENTIALS 服務主體建立步驟的整個 JSON 輸出
REGISTRY_LOGIN_SERVER 您登錄的登入伺服器名稱 (全部小寫)。 範例:myregistry.azurecr.io
REGISTRY_USERNAME 來自服務主體的建立,整個 JSON 輸出的 clientId
REGISTRY_PASSWORD 來自服務主體的建立,整個 JSON 輸出的 clientSecret
RESOURCE_GROUP 您用來設定服務主體範圍的資源群組名稱

建立工作流程檔案

  1. 在 GitHub UI 中,選取 [動作]
  2. 選取 [自行設定工作流程]
  3. 在 [編輯新檔案] 中,貼上下列 YAML 內容以覆寫範例程式碼。 接受預設檔案名稱 main.yml,或提供您選擇的檔案名稱。
  4. 選取 [開始認可],選擇性地提供您認可的簡短和延伸描述,然後選取 [認可新檔案]
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - name: 'Build and push image'
          uses: azure/docker-login@v1
          with:
            login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

驗證工作流程

認可工作流程檔案之後,就會觸發工作流程。 若要檢閱工作流程進度,請瀏覽至 [動作]> [工作流程]

檢視工作流程進度

如需關於檢視工作流程中每個步驟的狀態和結果的資訊,請參閱檢視工作流程執行歷程記錄。 如果工作流程未完成,請參閱檢視記錄以診斷失敗情形

當工作流程順利完成時,請執行 az container show 命令,以便取得名為 aci-sampleapp 的容器執行個體相關資訊。 取代您的資源群組名稱:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

輸出會類似:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

佈建執行個體之後,瀏覽至瀏覽器中容器的 FQDN,以便檢視執行中的 Web 應用程式。

在瀏覽器中執行 Web 應用程式

使用部署至 Azure 擴充功能

或者,使用 Azure CLI 中的部署至 Azure 擴充功能來設定工作流程。 擴充功能中的 az container app up 命令會接受您的輸入參數,以便設定部署至Azure 容器執行個體的工作流程。

Azure CLI 建立的工作流程類似於您可以使用 GitHub 手動建立的工作流程。

額外必要條件

除了此案例的必要條件存放庫設定之外,您還需要安裝適用於 Azure CLI 的部署至 Azure 擴充功能

執行 az extension add 命令來安裝擴充功能:

az extension add \
  --name deploy-to-azure

如需尋找、安裝及管理擴充功能的詳細資訊,請參閱使用 Azure CLI 擴充功能

az container app up執行

若要執行 az container app up 命令,請至少提供:

  • Azure 容器登錄的名稱,例如 myregistry
  • GitHub 存放庫的 URL,例如 https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

範例命令:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

命令進度

  • 出現提示時,請提供 GitHub 認證,或提供 GitHub 個人存取權杖 (PAT),且該權杖的範圍包含了存放庫使用者,以便向 GitHub 帳戶進行驗證。 如果您提供 GitHub 認證,那麼該命令會為您建立 PAT。 請遵循其他提示來設定工作流程。

  • 該命令會建立工作流程的存放庫祕密:

    • Azure CLI 的服務主體認證
    • 這些認證是用來存取 Azure 容器登錄的
  • 當命令將工作流程檔案認可至存放庫之後,就會觸發工作流程。

輸出會類似:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

若要檢視 GitHub UI 中每個步驟的工作流程狀態和結果,請參閱檢視工作流程執行歷程記錄

驗證工作流程

工作流程會以您 GitHub 存放庫的基底名稱來部署 Azure 容器執行個體,在此案例中為 acr-build-helloworld-node。 當工作流程順利完成時,請執行 az container show 命令,以便取得名為 az container show 的容器執行個體相關資訊。 取代您的資源群組名稱:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

輸出會類似:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

佈建執行個體之後,瀏覽至瀏覽器中容器的 FQDN,以便檢視執行中的 Web 應用程式。

清除資源

使用 az container delete 命令停止容器執行個體:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

若要刪除資源群組和其中所有資源,請執行 az group delete 命令:

az group delete \
  --name <resource-group-name>

下一步

瀏覽 GitHub Marketplace 來取得更多動作,以便將您的開發工作流程自動化