Share via


使用 GitHub 動作部署至 Azure 容器應用程式

Azure 容器應用程式可讓您使用 GitHub Actions 將修訂發佈至您的容器應用程式。 當提交被推送到您的 GitHub 存放庫時,會觸發一個工作流程來更新容器登錄中的容器映像。 「Azure 容器應用程式」會根據更新的容器映像來建立新的修訂版。

GitHub 存放庫的變更會觸發動作以建立新的修訂。

GitHub Actions 工作流程會透過提交到存放庫中的特定分支來觸發。 建立工作流程時,您可決定哪個分支觸發該工作流程。

本文說明如何建立可完全自定義的工作流程。 若要使用 Azure CLI 產生入門 GitHub Actions 工作流程,請參閱 使用 Azure CLI 產生 GitHub Actions 工作流程。

Azure Container Apps GitHub 動作

若要建置及部署容器應用程式,請將動作新增 azure/container-apps-deploy-action 至 GitHub Actions 工作流程。

此動作支援下列案例:

  • 從 Dockerfile 建置並部署至容器應用程式
  • 從不含 Dockerfile 的原始程式碼建置,並部署至 Container Apps。 支援的語言包括 .NET、Java、Node.js、PHP 和 Python
  • 將現有的容器映射部署至 Container Apps

使用範例

以下是使用動作的一些常見案例。 如需詳細資訊,請參閱 動作的 GitHub Marketplace 頁面

建置並部署至容器應用程式

下列代碼段示範如何從原始程式碼建置容器映像,並將其部署至 Container Apps。

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

動作會使用 中的 appSourcePath Dockerfile 來建置容器映像。 如果找不到 Dockerfile,動作會嘗試從 中的 appSourcePath原始程式碼建置容器映射。

將現有的容器映射部署至 Container Apps

下列代碼段示範如何將現有的容器映射部署至 Container Apps。

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

重要

如果您要在另一個步驟中建置容器映像,請務必使用唯一的標籤,例如認可 SHA,而不是穩定的標記,例如 latest。 如需詳細資訊,請參閱 映像標記最佳做法

使用 Azure Container Registry 進行驗證

Azure Container Apps 動作必須向 Azure Container Registry 進行驗證,才能推送容器映像。 容器應用程式也需要向 Azure Container Registry 進行驗證,才能提取容器映像。

若要推送映像,動作會自動使用提供給azure/login動作的認證,向 中指定的acrName容器登錄進行驗證。

若要提取映像,Azure Container Apps 會使用受控識別(建議)或系統管理員認證向 Azure Container Registry 進行驗證。 若要使用受控識別,您必須 將動作部署的容器應用程式設定為使用受控識別。 若要使用登錄的系統管理員認證進行驗證,請設定動作的 acrUsernameacrPassword 輸入。

組態

您可以採取下列步驟來設定 GitHub Actions 工作流程以部署至 Azure Container Apps。

  • 為您的應用程式建立 GitHub 存放庫
  • 建立已啟用受控識別的容器應用程式
  • AcrPull Azure Container Registry 的角色指派給容器應用程式的受控識別
  • 在 GitHub 存放庫中設定秘密
  • 建立 GitHub Actions 工作流程

必要條件

需求 指示
Azure 帳戶 如果您沒有帳戶,可免費建立帳戶。 您需要 Azure 訂用帳戶的參與者擁有者 許可權才能繼續。 如需詳細資訊,請參閱使用 Azure 入口網站 指派 Azure 角色。
GitHub 帳戶 免費註冊
Azure CLI 安裝 Azure CLI

建立 GitHub 存放庫並複製原始程式碼

建立工作流程之前,應用程式的原始程式碼必須位於 GitHub 存放庫中。

  1. 使用 Azure CLI 登入 Azure。

    az login
    
  2. 接下來,安裝 CLI 的最新 Azure Container Apps 擴充功能。

    az extension add --name containerapp --upgrade
    
  3. 如果您沒有自己的 GitHub 存放庫,請從範例建立一個存放庫。

    1. 瀏覽至下列位置以建立新的存放庫:
    2. 將您的存放函式庫 my-container-app命名為 。
  4. 將存放庫複製到本機電腦。

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

建立已啟用受控識別的容器應用程式

在下列步驟中使用 az containerapp up 命令建立容器應用程式。 此命令會建立 Azure 資源、建置容器映像、將映像儲存在登錄中,並部署至容器應用程式。

建立應用程式之後,您可以將受控識別新增至應用程式,並將身分識別 AcrPull 指派給角色,以允許身分識別從登錄提取映像。

  1. 變更為 複製存放庫的 src 資料夾。

    cd my-container-app
    cd src
    
  2. 使用 az containerapp up 命令建立 Azure 資源並部署容器應用程式。

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. 在命令輸出中,記下 Azure Container Registry 的名稱。

  4. 取得容器登錄的完整資源標識碼。

    az acr show --name <ACR_NAME> --query id --output tsv
    

    以您的登錄名稱取代 <ACR_NAME>

  5. 啟用容器應用程式的受控識別。

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned \
      --output tsv
    

    請注意命令輸出中受控識別的主體標識碼。

  6. AcrPull將 Azure Container Registry 的角色指派給容器應用程式的受控識別。

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    將 取代為受控識別的主體標識碼,並以 <ACR_RESOURCE_ID> Azure Container Registry 的資源識別碼取代 <MANAGED_IDENTITY_PRINCIPAL_ID>

  7. 將容器應用程式設定為使用受控識別從 Azure Container Registry 提取映像。

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    將 取代 <ACR_NAME> 為您的 Azure Container Registry 名稱。

在 GitHub 存放庫中設定秘密

GitHub 工作流程需要名為 AZURE_CREDENTIALS 的秘密,才能向 Azure 進行驗證。 秘密包含服務主體的認證,其中包含 容器應用程式和容器登錄的資源群組上具有參與者 角色。

  1. 在包含容器應用程式和容器登錄的資源群組上建立具有 參與者 角色的服務主體。

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    將取代 <SUBSCRIPTION_ID> 為您的 Azure 訂用帳戶標識碼。 如果您的容器登錄位於不同的資源群組中,請在 參數中 --scopes 指定這兩個資源群組。

  2. 從命令複製 JSON 輸出。

  3. 在 GitHub 存放庫中,流覽至 [設定> Secrets Actions]>,然後選取 [新增存放庫密碼]。

  4. 輸入 AZURE_CREDENTIALS 作為名稱,並將 JSON 輸出的內容貼上為 值。

  5. 選取 [新增祕密]。

建立 GitHub Actions 工作流程

  1. 在 GitHub 存放庫中,流覽至 [動作 ],然後選取 [ 新增工作流程]。

  2. 選取 [ 自行設定工作流程]。

  3. 將下列 YAML 貼到編輯器中。

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    將 取代 <ACR_NAME> 為您的 Azure Container Registry 名稱。 確認、 containerAppNameappSourcePath值底下的branches分支名稱,並resourceGroup符合存放庫和 Azure 資源的值。

  4. 認可主要分支的變更。

GitHub Actions 工作流程執行應該會開始建置和部署您的容器應用程式。 若要檢查其進度,請流覽至 [動作]。

若要部署應用程式的新修訂,請將新的認可推送至 main 分支。