在 Azure App 服務 中使用自定義容器的持續部署

在本教學課程中,您會從受控 Azure Container Registry 存放庫或 Docker Hub 設定自定義容器映像的持續部署。

1.移至部署中心

Azure 入口網站中,瀏覽至 App Service 應用程式的管理頁面。

從左側功能表中,按一下 [部署中心]> [設定]

2.選擇部署來源

選擇 部署來源取決於您的案例:

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

注意

針對 Docker Compose 應用程式,選取 [Container Registry]。

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

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

2.設定登錄設定

3.設定登錄設定

注意

Sidecar 容器 (預覽) 會在 App Service 中成功多容器 (Docker Compose) 應用程式。 若要開始使用,請參閱教學課程:在 Azure App 服務 中設定自定義容器的 Sidecar 容器(預覽版)。

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

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

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

注意

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

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

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

注意

選取 要部署的 映像標籤 。 如果您想要,請在啟動檔案輸入啟動命令。

根據容器類型,遵循下一個步驟

  • 針對 [Docker Compose], 選取 私人映像的登錄。 按兩下[選擇檔案 ] 以上傳您的 Docker Compose 檔案,或只 將 Docker Compose 檔案的內容貼Config 中。
  • 針對 [單一容器], 選取 要部署的 映像標籤 。 如果您想要,請在啟動檔案輸入啟動命令。

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

3.啟用 CI/CD

4.啟用 CI/CD

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

注意

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

當您啟用此選項時,App Service 會將 Webhook 新增至 Azure Container Registry 或 Docker Hub 中的存放庫。 每當選取的映像更新 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 push 包括 Docker Compose 檔案未參考的存放庫,會觸發應用程式重新啟動。 您可能想要 將 Webhook 修改為較窄的範圍。
  • Docker Hub 不支援登錄層級的 Webhook。 您必須 手動將 Webhook 新增 至 Docker Compose 檔案中指定的映像。

4.儲存您的設定

5.儲存您的設定

按兩下 [儲存]。

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 識別碼中使用 服務主體 進行部署,而不是發佈配置檔。

使用服務主體進行驗證

此選擇性組態會將預設驗證取代為產生的工作流程檔案中的發行配置檔。

在 Azure CLI 中使用 az ad sp create-for-rbac 命令產生服務主體。 在下列範例中,將 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>'

更多資源