持續部署至 Azure App Service
注意
從 2024 年 6 月 1 日起,所有新建立的 App Service 應用程式都可以選擇使用命名慣例 <app-name>-<random-hash>.<region>.azurewebsites.net
來產生唯一的預設主機名稱。 現有的應用程式名稱將保持不變。
範例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
如需詳細資料,請參閱 App Service 資源的唯一預設主機名稱。
Azure App Service 藉由提取最新的更新,從GitHub、Bitbucket 和 Azure Repos 存放庫啟用持續部署。
準備您的存放庫
若要從 Azure App Service 組建伺服器取得自動化組建,請確定存放庫根目錄具有專案中的正確檔案。
執行階段 | 根目錄檔案 |
---|---|
ASP.NET (僅限 Windows) | *.sln 、*.csproj 或 default.aspx |
ASP.NET Core | *.sln 或 *.csproj |
PHP | index.php |
Ruby (僅限 Linux) | Gemfile |
Node.js | server.js 、app.js 或 package.json 搭配啟動指令碼 |
Python | *.py 、requirements.txt 或 runtime.txt |
HTML | default.htm 、default.html 、default.asp 、index.htm 、index.html 或 iisstart.htm |
WebJobs | App_Data/jobs/continuous 下的 <job_name>/run.<extension> 表示連續的 WebJobs,或 App_Data/jobs/triggered 表示觸發的 WebJobs。 如需詳細資訊,請參閱 Kudu WebJobs 文件。 |
函式 | 請參閱 Azure Functions 的持續部署。 |
若要自訂部署,您可以在儲存機制根路徑中包含 .deployment 檔案。 如需詳細資訊,請參閱自訂部署和自訂部署指令碼。
注意
如果您使用 Visual Studio,則可讓 Visual Studio 為您建立存放庫。 您的專案將會立即準備好透過 Git 進行部署。
設定部署來源
在 Azure 入口網站中,移至 App Service 應用程式的管理頁面。
在左窗格中,選取 [部署中心]。 然後,選取 [設定]。
在 [來源] 方塊中,選取其中一個 CI/CD 選項:
選取對應至組建提供者的索引標籤以繼續。
GitHub Actions 是預設組建提供者。 若要變更提供者,請選取 [變更提供者] > [App Service 組建服務] > [確定]。
如果您是第一次從 GitHub 進行部署,請選取 [授權],然後遵循授權提示。 如果您想要從不同的使用者存放庫進行部署,請選取 [變更帳戶]。
使用 GitHub 授權 Azure 帳戶之後,請選取想要的 [組織]、[存放庫] 和 [分支]。
如果找不到組織或存放庫,您可能需要在 GitHub 上啟用更多的權限。 如需詳細資訊,請參閱管理組織存放庫的存取權。
在 [驗證類型] 下,選取 [使用者指派的身分識別] 以獲得更佳的安全性。 如需詳細資訊,請參閱常見問題集。
注意
如果您的 Azure 帳戶具有 [使用者指派的身分識別] 選項的必要權限,Azure 會為您建立使用者指派的受控識別。 如果您未這麼做,請與您的 Azure 系統管理員合作,建立在應用程式上具有必要角色的身分識別,然後在下拉式清單中加以選取。
(選擇性) 若要在儲存變更之前查看檔案,請選取 [預覽檔案]。 App Service 會根據應用程式的語言堆疊設定來選取工作流程範本,並將其認可至您選取的 GitHub 存放庫。
選取 [儲存]。
所選取存放庫和分支中的新認可,現在會持續部署到 App Service 應用程式。 您可以在 [記錄] 索引標籤上追蹤認可和部署。
停用連續部署
在 Azure 入口網站中,移至 App Service 應用程式的管理頁面。
在左窗格中,選取 [部署中心]。 然後選取 [設定]>[中斷連線]:
根據預設,GitHub Actions 工作流程檔案會保留在您的存放庫中,但其會繼續觸發應用程式的部署。 若要從存放庫中刪除檔案,請選取 [刪除工作流程檔案]。
選取 [確定]。
什麼是組建提供者?
依據部署中心的部署來源而定,您可能會看到幾個選項可供建置提供者選取。 建置提供者可透過自動化建置、測試和部署,協助您使用 Azure App Service 建置 CI/CD 解決方案。
您不會受限於在部署中心中找到的建置提供者選項,但 App Service 可讓您快速設定這些選項,並提供整合式部署記錄體驗。
GitHub Actions 建置提供者僅適用於 GitHub 部署。 從應用程式的部署中心進行設定時,會完成這些動作來設定 CI/CD:
- 將 GitHub Actions 工作流程檔案儲放至您的 GitHub 存放庫,以處理對 App Service 的建置和部署工作。
- 針對基本驗證,將應用程式的發佈設定檔新增為 GitHub 祕密。 工作流程檔案會使用此秘密搭配 App Service 進行驗證。
- 如需使用者指派的身分識別,請參閱 GitHub Actions 的使用者指派身分識別選項有何用途?
- 從工作流程執行記錄擷取資訊,並將其顯示在部署中心的 [記錄] 索引標籤上。
您可以透過下列方式自訂 GitHub Actions 組建提供者:
- 在 GitHub 存放庫中產生工作流程檔案之後,自訂該檔案。 如需詳細資訊,請參閱 GitHub Actions 的工作流程語法 (英文)。 只要確定工作流程使用 azure/webapps-deploy 動作部署至 App Service。
- 如果選取的分支受到保護,您仍然可以預覽工作流程檔案而不儲存設定,然後手動將其新增至您的存放庫。 此方法不會提供您與 Azure 入口網站的記錄整合。
- 除了使用基本驗證或使用者指派的身分識別,您也可以使用 Microsoft Entra ID 中的服務主體進行部署。 無法在入口網站中設定這個選項。
在部署期間我的應用程式會發生什麼事?
所有官方支援的部署方法都會對應用程式 /home/site/wwwroot 資料夾中的檔案進行變更。 這些檔案用來執行您的應用程式。 因此,部署可能會由於鎖定的檔案而失敗。 應用程式也可能在部署期間發生無法預期的行為,因為檔案不會全部同時更新。 這不是客戶面向應用程式所想要的行為。 有幾種方式可以避免這些問題:
- 直接從 ZIP 套件執行您的應用程式,而不將其解壓縮。
- 停止您的應用程式,或在部署期間針對其啟用離線模式。 如需詳細資訊,請參閱在部署期間處理鎖定的檔案。
- 在開啟自動交換的情況下,部署到預備位置。
常見問題集
- 如果停用基本驗證,GitHub Actions 建置提供者是否可與基本驗證搭配運作?
- GitHub Actions 的使用者指派身分識別選項有何用途?
- 為什麼我會看到錯誤:「此身分識別在此應用程式上沒有寫入權限。 請選取不同的身分識別,或與您的系統管理員合作,授與此應用程式上身分識別的網站參與者角色」?
- 為什麼我會看到錯誤:「此身分識別在此應用程式上沒有寫入權限。 請選取不同的身分識別,或與您的系統管理員合作,授與此應用程式上身分識別的網站參與者角色」?
如果停用基本驗證,GitHub Actions 建置提供者是否可與基本驗證搭配運作?
否。 嘗試搭配使用 GitHub Actions 與 [使用者指派的身分識別] 選項。
如需詳細資訊,請參閱在沒有基本驗證的情況下進行部署。
GitHub Actions 的使用者指派身分識別選項有何用途?
當您在 GitHub Actions 來源底下選取 [使用者指派的身分識別] 時,App Service 會在 Azure 和 GitHub 中設定所有必要的資源,以使用 GitHub Actions 啟用建議的 OpenID Connect 驗證。
具體來說,App Service 會執行下列作業:
- 在 Azure 中使用者指派的受控識別與 GitHub 中已選存放庫和分支之間建立同盟認證。
- 從已選取 GitHub 存放庫中的同盟認證建立祕密
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
。 - 將身分識別指派給您的應用程式。
在 GitHub 存放庫中的 GitHub Actions 工作流程中,您可以使用 Azure/login 動作,使用 OpenID Connect 向您的應用程式進行驗證。 如需範例,請參閱將工作流程檔案新增至 GitHub 存放庫。
如果您的 Azure 帳戶具有必要權限,App Service 會為您建立使用者指派的受控識別並加以設定。 此身分識別不會顯示在您應用程式的 [身分識別] 頁面中。 如果您的 Azure 帳戶沒有必要權限,您必須選取具有必要角色的現有身分識別。
為什麼我看到錯誤:「您在此應用程式上沒有足夠權限可指派角色型存取給受控識別並設定同盟認證」?
訊息指出您的 Azure 帳戶沒有為 GitHub Actions 建立使用者指派的受控識別的必要權限。 必要權限 (範圍設定為您的應用程式) 為:
Microsoft.Authorization/roleAssignments/write
Microsoft.ManagedIdentity/userAssignedIdentities/write
根據預設,使用者存取系統管理員角色和擁有者角色已有這些權限,但參與者角色沒有這些權限。 如果您沒有必要權限,請與 Azure 管理員合作,使用網站參與者角色建立使用者指派的受控識別。 在部署中心,您接著可以在 [GitHub] > [身分識別] 下拉式清單中選取身分識別。
如需替代步驟的詳細資訊,請參閱使用 GitHub Actions 部署至 App Service。
為什麼我會看到錯誤:「此身分識別在此應用程式上沒有寫入權限。 請選取不同的身分識別,或與您的系統管理員合作,授與此應用程式上身分識別的網站參與者角色」?
訊息指出已選取使用者指派的受控識別沒有必要的角色,可在 GitHub 存放庫與 App Service 應用程式之間啟用 OpenID Connect。 身分識別在應用程式上必須具有下列其中一個角色:擁有者、參與者、網站參與者。 身分識別所需的最低特殊權限角色是網站參與者。