在 Azure App 服務中使用自訂容器進行持續部署
在本教學課程中,您可以從受控 Azure Container Registry 存放庫或 Docker Hub 設定自訂容器映像的持續部署。
1.移至部署中心
在 Azure 入口網站中,瀏覽至 App Service 應用程式的管理頁面。
從左側功能表中,按一下 [部署中心] > [設定]。
2.選擇部署來源
根據您的案例選擇部署來源:
- 容器登錄會設定容器登錄與 App Service 之間的持續整合與持續傳遞。
- 如果您在 GitHub 中維護容器映像的原始程式碼,則 GitHub Actions選項適合您。 由新認可至觸發您的 GitHub 存放庫,部署動作可以直接將
docker build
與docker push
執行至容器登錄,然後更新您的 App Service 應用程式以執行新的映像。 如需詳細資訊,請參閱持續整合與持續傳遞如何與 GitHub Actions 搭配運作。 - 若要使用 Azure Pipelines 設定持續整合與持續傳遞,請參閱從 Azure Pipelines部署 Azure Web 應用程式容器。
注意
針對 Docker Compose 應用程式,選取 [容器登錄]。
如果您選擇 GitHub Actions,請按一下 [授權],然後遵循授權提示。 如果您先前已獲得 GitHub 授權,則可以按一下 [變更帳戶],以從不同的使用者存放庫進行部署。
使用 GitHub 授權 Azure 帳戶之後,請選取要從中部署的 [組織]、[存放庫]和 [分支]。
2.設定登錄設定
3.設定登錄設定
注意
側車容器 (預覽) 將會成功在 App Service 中使用多容器 (Docker Compose) 應用程式。 若要開始使用,請參閱教學課程:在 Azure App Service 中設定自訂容器的側車容器 (預覽)。
若要部署多個容器 (Docker Compose) 應用程式,請在 [容器類型] 中選取 [Docker Compose]。
如果您沒有看到 [容器類型] 下拉式清單,請向上捲動至 [來源],然後選取 [容器登錄]。
在 [登錄來源]中,選取容器登錄所在的位置。 如果來源不是 Azure Container Registry 或 Docker Hub,請選取 [私人登錄]。
注意
如果您的多個容器 (Docker Compose) 應用程式使用多個私人映像,請確定私人映像位於相同的私人登錄中,且能使用相同的使用者認證存取。 如果您的多個容器應用程式只使用公用映像,即使某些映像不在 Docker Hub 中,請選取 [Docker Hub]。
選取符合您選擇的索引標籤以遵循後續步驟。
[登錄] 下拉式清單會在與您應用程式相同的訂用帳戶中顯示登錄。 選取您想要的登錄。
注意
- 如果您想要使用受控識別來鎖定 ACR 存取,請遵循本指南:
- 若要從不同訂用帳戶中的登錄進行部署,請改為選取 [登錄來源] 中的 [私人登錄]。
選取要部署的 [映像] 和 [標籤]。 如果您想要,請在 [啟動檔案] 中輸入啟動命令。
根據 [容器類型] 遵循下一個步驟:
- 針對 [Docker Compose],選取私人映像的登錄。 按一下 [選擇檔案] 以上傳 Docker Compose 檔案,或只將 Docker Compose 檔案的內容貼到 [設定]。
- 針對 [單一容器],選取要部署的 [映像] 和 [標籤]。 如果您想要,請在 [啟動檔案] 中輸入啟動命令。
App Service 會在啟動容器時將 [啟動檔案] 中的字串附加至命令結尾docker run
(作為[COMMAND] [ARG...]
區段)。
3.啟用持續整合與持續傳遞
4.啟用持續整合與持續傳遞
App Service支援持續整合與持續傳遞與 Azure Container Registry 和 Docker Hub 整合。 若要啟用,請在 [持續部署] 中選取 [開啟]。
注意
如果您在 [來源] 中選取 [GitHub Actions],則不會取得此選項,因為 GitHub Actions 會直接處理持續整合與持續傳遞。 相反地,您會看到 [工作流程組態] 區段,您可以在其中按一下 [預覽檔案] 來檢查工作流程檔案。 Azure 會將此檔案認可至您選取的 GitHub 來源存放庫,以處理建置和部署工作。 如需詳細資訊,請參閱持續整合與持續傳遞如何與 GitHub Actions 搭配運作。
當您啟用此選項時,App Service 會在 Azure Container Registry 或 Docker Hub 中將 Webhook 新增至您的存放庫。 每當使用 docker push
更新選取的映像時,您的存放庫就會張貼至此 Webhook。 Webhook 會導致您的 App Service 應用程式重新啟動並執行 docker pull
,以取得更新的映像。
注意
若要確保 Webhook 正常運作,務必在 Web 應用程式內啟用 [基本驗證發佈認證] 選項。 若未這麼做,可能會導致 Webhook 發生 401 未經授權的錯誤。 若要確認是否已啟用 [基本驗證發佈認證],請遵循下列步驟:
- 瀏覽至 Web 應用程式的 [組態] > [一般設定]。
- 尋找 [平台設定] 區段,您會在其中找到 [基本驗證發佈認證] 選項。
針對其他私人登錄,您可以手動張貼至 Webhook,或作為持續整合與持續傳遞管道中的步驟。 在 [Webhook URL]中,按一下 [複製] 按鈕以取得 Webhook URL。
注意
對於多個容器 (Docker Compose) 應用程式的支援有限:
- 針對 Azure Container Registry,App Service 會在選取的登錄中建立 Webhook,並將登錄作為範圍。 對於登錄中任何存放庫 (包含 Docker Compose 檔案未參考的存放庫) 的
docker push
皆會觸發應用程式重新啟動。 您可能想要將 Webhook 修改為較窄的範圍。 - Docker Hub不支援登錄層級的 Webhook。 您必須手動將 Webhook 新增至 Docker Compose 檔案中指定的映像。
4.儲存您的設定
5.儲存您的設定
按一下 [儲存]。
持續整合與持續傳遞如何與 GitHub Actions 搭配運作
如果您在 [來源] 中選擇 [GitHub Actions] (請參閱選擇部署來源),App Service 會以下列方式設定持續整合與持續傳遞:
- 將 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 中使用服務主體進行部署。
使用服務主體進行驗證
這個選擇性設定會將預設驗證取代為所產生工作流程檔案中的發佈設定檔。
使用 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 檔案,然後使用 --multicontainer-config-file
參數執行 az webapp config container set。 如果您的 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 設定至您的應用程式,請使用 --enable-cd
參數執行 az webapp deployment container config。 命令會輸出 Webhook URL,但您必須在個別步驟中手動在登錄中建立 Webhook。 下列範例會在您的應用程式上啟用持續整合與持續傳遞,然後使用輸出中的 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>'