共用方式為


在 Azure App 服務中使用自訂容器進行持續部署

本文說明如何從受控 Azure Container Registry 存放庫或 Docker Hub 設定自定義容器映像的持續整合和持續傳遞 (CI/CD)。

1.移至部署中心

Azure 入口網站中,移至 Azure App Service 應用程式的管理窗格。

在 [ 部署] 底下的提要欄中,選取 [部署中心]。 選擇 [設定] 索引標籤。

2. 選取原始碼

從 [ 來源 ] 下拉功能表中,根據下列準則選取部署來源:

  • 容器登錄設置 CI/CD,連接您的容器登錄與 App Service。
  • 如果您在 GitHub 中維護容器映像的原始程式碼,請選擇 [GitHub Actions ] 選項。 對您的 GitHub 存放庫的新認可會觸發部署動作,其可以直接對您的容器登錄執行 docker builddocker push。 然後它會更新App Service 應用程式以執行新的映像。 如需詳細資訊,請參閱CI/CD 如何與 GitHub Actions 搭配運作
  • 若要使用 Azure Pipelines 設定 CI/CD,請參閱將 Azure Web 應用程式容器部署於 Azure Pipelines
  • 針對 Docker Compose 應用程式,選取 [容器登錄]

如果您選擇 [GitHub Actions],請選取 [ 授權 ],然後遵循授權提示。 如果您先前已獲得 GitHub 的授權,您可以選取 [變更帳戶],從不同的使用者存放庫進行部署。

使用 GitHub 授權 Azure 帳戶之後,請選取要從中部署 的組織存放庫分支

2.設定登錄設定

3.設定登錄設定

附註

Sidecar 容器將取代 App Service 中的多容器(Docker Compose)應用程式。 若要開始使用,請參閱 教程:在 Azure App Service 中設定自訂容器的 Sidecar 容器

若要部署多容器 (Docker Compose) 應用程式,請選取 [容器類型] 中的 [Docker Compose]。

如果您沒有看到 [容器類型 ] 下拉式清單,請向上捲動至 [來源 ],然後選取 [Container Registry]。

[登錄來源] 中,選取容器登錄所在的位置。 如果不是 Azure Container Registry 或 Docker Hub,請選取 [私人登錄]。

附註

如果您的多容器 (Docker Compose) 應用程式使用多個私人映像,請確定私人映像位於相同的私人登錄中,且可使用相同的使用者認證存取。 如果您的多容器應用程式只使用公用映射,請選取 [Docker Hub],即使某些映射不在 Docker Hub 中也一樣。

選取符合您選擇的索引標籤以遵循後續步驟。

[ 登錄 ] 下拉式清單會顯示與您的應用程式相同的訂用帳戶中的登錄。 選擇您想要的註冊表。

若要從不同訂用帳戶中的登錄進行部署,請改為選取 [登錄來源中的私人登錄]。

若要使用受控識別來鎖定 Azure Container Registry 存取權,請參閱:

選取要部署的 映像標籤 。 您可以選擇在 啟動檔案中輸入啟動命令。

遵循下一個步驟,視 容器類型 值而定:

  • 針對 Docker Compose,選取私人映像的登錄。 選取 [選擇檔案] 以上傳 您的 Docker Compose 文件,或將 Docker Compose 文件的內容直接貼到 Config 中。
  • 針對 [單一容器],選取要部署的 映像標籤 。 您可以選擇在 啟動檔案中輸入啟動命令。

App Service 會在啟動您的容器時將啟動檔案中的字串附加至 docker run 命令的結尾 (作為 [COMMAND] [ARG...] 區段)。

3.啟用持續整合與持續傳遞

4.啟用持續整合與持續傳遞

App Service 支援與 Azure Container Registry 和 Docker Hub 的 CI/CD 整合。 若要啟用 CI/CD 整合,請在持續部署中選取 [開啟]。

附註

如果您在Source中選取 GitHub Actions,則不會看到此選項,因為 GITHub Actions 會直接處理 CI/CD。 相反地,您會看到 [工作流程組態 ] 區段,您可以在其中選取 [預覽檔案 ] 來檢查工作流程檔案。 Azure 會將此檔案認可至您選取的 GitHub 來源存放庫,以處理建置和部署工作。 如需詳細資訊,請參閱CI/CD 如何與 GitHub Actions 搭配運作

當您啟用此選項時,App Service 會在 Azure Container Registry 或 Docker Hub 中將 Webhook 新增至您的存放庫。 每當選取的影像更新且含有docker push時,您的存放庫就會向此 Webhook 發送訊息。 Webhook 會導致您的 App Service 應用程式重新啟動並執行 docker pull,以取得更新的映像。

若要確保 Webhook 正常運作,請務必在 Web 應用程式中啟用 [基本驗證發佈認證 ] 選項。 如果沒有,您可能會收到 Webhook 的「401 未經授權」錯誤。

若要確認是否已啟用基本身份驗證發佈認證,請移至 Web 應用程式的 [>設定一般設定]。 尋找 [平台設定] 區段,然後選取 [基本驗證發佈認證 ] 選項。

針對其他私人登錄,您可以手動張貼至 Webhook,或作為 CI/CD 管道中的步驟。 在 [Webhook URL] 中,選取 [ 複製] 按鈕以取得 Webhook URL。

選取 [儲存] 以儲存您的設定。

附註

對多容器 (Docker Compose) 應用程式的支援有限。 針對 Azure Container Registry,App Service 會在選取的登錄中建立 Webhook,並將登錄作為範圍。 對登錄中任何存放庫 (包含 Docker Compose 檔案未參考的存放庫) 的 docker push 皆會觸發應用程式重新啟動。 您可能想要將 Webhook 修改為較窄的範圍。 Docker Hub不支援登錄層級的 Webhook。 您必須手動將 Webhook 新增至 Docker Compose 檔案中指定的映像。

CI/CD 如何與 GitHub Actions 搭配運作

如果您從 [選取程式代碼來源] 下拉功能表中選擇 [GitHub Actions],App Service 會以下列方式設定 CI/CD:

  • 它會將 GitHub Actions 工作流程檔案儲存至 GitHub 存放庫,以處理建置和部署工作至 App Service。
  • 它會將私人登錄的認證新增為 GitHub 秘密。 產生的工作流程檔案會 Azure/docker-login 執行動作以登入您的私人註冊表,然後執行 docker push 將其部署到該註冊表。
  • 它會將應用程式的發佈設定檔設為 GitHub 秘密。 產生的工作流程檔案會使用此秘密向 App Service 進行驗證,然後執行 Azure/webapps-deploy 動作來設定更新的映像,這會觸發應用程式重新啟動以提取更新的映像。
  • 它會從工作流程執行記錄擷取資訊,並將其顯示在您應用程式的部署中心的 [記錄] 索引標籤中。

您可以透過下列方式自訂 GitHub Actions 組建提供者:

  • 在 GitHub 存放庫中產生工作流程檔案之後,自定義該檔案。 如需詳細資訊,請參閱 GitHub Actions 的工作流程語法 (英文)。 工作流程必須以動作結束 Azure/webapps-deploy ,才能觸發應用程式重新啟動。
  • 如果選取的分支受到保護,您仍然可以預覽工作流程檔案,而不儲存組態。 手動將它和必要的 GitHub 秘密新增至您的存放庫。 此方法不會為您提供與 Azure 入口網站的日誌整合。
  • 不要發佈設定檔,而是在 Microsoft Entra ID 中使用服務主體進行部署。

使用服務主體進行驗證

此選用的設定會將預設驗證取代為所產生工作流程檔案中的發佈設定檔。

使用 az ad sp create-for-rbacAzure CLI 中的 命令來產生服務主體。 在下列範例中,以您自己的值取代 <subscription-id>、<group-name> 和 <app-name>。 儲存下一個步驟的整個 JSON 輸出,包括最上層 {}

az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
                            --json-auth

重要

基於安全性,請授與服務主體最低必要存取權。 上一個範例中的範圍限制為特定 App Service 應用程式,而不是整個資源群組。

GitHub 中,移至您的存放庫,然後選取 [ 設定>秘密>][新增秘密]。 將 Azure CLI 命令的整個 JSON 輸出輸入到機密的 [值] 欄位中。 提供秘密名稱,例如 AZURE_CREDENTIALS

部署中心所產生的工作流程檔案中,以類似下列範例的程序代碼修改 azure/webapps-deploy 步驟:

- name: Sign in to Azure 
# Use the GitHub secret you added
- uses: azure/login@v1
    with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
    with:
    app-name: '<app-name>'
    slot-name: 'production'
    images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
    - name: Sign out of Azure
    run: |
    az logout

使用 CLI 自動化

若要設定容器登入和 Docker 映像, 請執行 az webapp config container set

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'

若要設定多容器 (Docker Compose) 應用程式,請在本機準備 Docker Compose 檔案,然後使用 參數執行az webapp config container set--multicontainer-config-file。 如果您的 Docker Compose 檔案包含私人映像,請新增 --docker-registry-server-* 參數,如上一個範例所示。

az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>

若要設定從容器登錄到您的應用程式的 CI/CD,請執行 az webapp deployment container config 搭配 --enable-cd 參數。 命令會輸出 Webhook URL,但您必須在個別步驟中手動在登錄中建立 Webhook。 下列範例會在您的應用程式上啟用 CI/CD,然後使用輸出中的 Webhook URL 在 Azure Container Registry 中建立 Webhook。

ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)

az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'