本文說明如何從 GitHub、Bitbucket、Azure Repos 或其他存放庫提取更新,以設定持續部署至 Azure App Service。
先決條件
在原始檔控制存放庫中的 Azure App Service 應用程式上寫入許可權。
準備您的存放庫
若要從 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 |
<job_name>/run.<extension> 下的 App_Data/jobs/continuous 表示連續的 WebJobs,或 App_Data/jobs/triggered 表示觸發的 WebJobs。 如需詳細資訊,請參閱 Kudu WebJobs 文件。 |
| 函式 | 請參閱 Azure Functions 的持續部署。 |
若要自定義您的部署,請在存放庫根目錄中包含檔案 .deployment 。 如需詳細資訊,請參閱自訂部署和自訂部署指令碼。
小提示
Visual Studio 可以為您建立存放庫。 透過此方法,您的專案會立即準備好透過 Git 進行部署。
啟用持續部署
在 Azure 入口網站中,移至 App Service 應用程式的頁面,然後從左側導覽功能表中選取 [部署中心 ]。
在 [來源] 下的 [設定] 索引標籤上,選取原始檔控制存放庫類型。
請遵循來源類型的指示來設定部署。
所有列出的來源都可以使用App Service組建服務進行建置。 某些來源也可以使用 GitHub Actions 或 Azure Pipelines 進行建置。 如需詳細資訊,請參閱 建置提供者。
GitHub Actions 是預設的 GitHub 組建提供者。 若要變更提供者,請選取 [變更提供者],選取 [App Service 建置服務 ] 或 [Azure Pipelines],然後選取 [ 確定]。
如有必要,請選取 [ 授權 ],然後遵循 GitHub 的授權提示。 若要從其他使用者的存放庫部署,請選取 [變更帳戶]。
選取適當的 GitHub 組織、 存放庫和 分支。
如果您找不到組織或存放庫,您可能需要在 GitHub 上啟用更多許可權。 如需詳細資訊,請參閱管理組織存放庫的存取權。
在 [驗證類型] 下,選取 [使用者指派的身分識別] 以獲得更佳的安全性。
如果您的 Azure 帳戶具有必要許可權,App Service 會為您建立 使用者指派的受控識別 ,或者您可以選擇現有的受控識別。 如果您沒有必要的許可權,請與您的 Azure 系統管理員合作,以 在應用程式上建立具有必要角色的身分識別,然後在下拉式清單中加以選取。
App Service 會根據應用程式 的語言堆疊設定 來選取工作流程範本,並將它認可至您選取的 GitHub 存放庫。 您可以選擇性地選取 [預覽檔案 ] 來查看工作流程檔案,再儲存變更。
選取 [儲存]。
所選取存放庫和分支中的新認可,現在會持續部署到 App Service 應用程式。 您可以在 Logs 索引標籤上追蹤提交和部署。
停用連續部署
若要停用已連線來源的持續部署:
在 Azure 入口網站中,移至 App Service 應用程式的頁面,然後從左側導覽功能表中選取 [部署中心 ]。
在 [ 設定] 索引標籤上,選取 [ 中斷連線]。
選取 [確定]。
針對 GitHub,工作流程檔案預設會保留在存放庫中,但您不再在部署中心的 [記錄] 索引標籤上看到整合式進度。
什麼是組建提供者?
建置提供者可透過自動化建置、測試和部署,協助您使用 Azure App Service 建置持續整合和持續傳遞 (CI/CD) 解決方案。 某些部署來源提供數個組建提供者選項。 所有列出的來源都可以使用App Service組建服務進行建置。
您不限於列出的組建提供者選項,但 App Service 可協助您快速設定列出的選項,並開始取得整合式部署記錄。
GitHub 工作流程
GitHub Actions 組建提供者僅適用於 GitHub 原始碼,而且是 GitHub 部署的預設選項。 建置提供者透過將 GitHub Actions 工作流程檔案放入您的 GitHub 存放庫中,來設定 CI/CD,並處理 App Service 的建置和部署任務。
針對基本身份驗證,GitHub Actions 建置提供者會將應用程式的發佈配置檔新增為 GitHub 秘密。 工作流程檔案會使用此秘密搭配 App Service 進行驗證。
針對使用者指派的身分識別,App Service 會啟用建議Microsoft OpenID Connect 驗證,並在 Azure 和 GitHub 中設定必要的資源。 如需詳細資訊,請參閱 GitHub Actions 的使用者指派身分識別選項有何用途?
GitHub Actions 建置提供者會從工作流程執行記錄擷取資訊,並在應用程式部署中心的 [記錄] 索引卷標上顯示它。
您可以透過數種方式自訂 GitHub Actions 建置提供者:
- 在 GitHub 存放庫中產生工作流程檔案之後,自定義該檔案。 如需詳細資訊,請參閱 GitHub Actions 的工作流程語法 (英文)。 使用
azure/webapps-deploy動作將自定義工作流程部署至 App Service。 - 如果選取的分支是受保護的,請預覽工作流程,但不要保存設定。 自定義檔案,然後手動將它新增至您的存放庫。 此方法不會提供您與 Azure 入口網站的記錄整合。
- 使用 Microsoft Entra ID 服務主體 進行部署,而不是使用基本身份驗證或使用者指派的身分識別。 您無法在入口網站中設定此方法。
App Service 建置服務
App Service 建置服務是原生 App Service 部署和建置引擎。 當您選取此選項時,App Service 會將 Webhook 新增至您授權的存放庫。 任何推送至存放庫的程式代碼會觸發 Webhook,而 App Service 會提取變更並執行任何部署工作。 如需詳細資訊,請參閱從 GitHub 部署 (Kudu)。
App Service 建置服務需要 原始檔控制管理員 (SCM) 基本身份驗證 ,Webhook 才能運作。 基本身份驗證比其他驗證方法不安全。 如需詳細資訊,請參閱:
Azure 管道服務 (Azure Pipelines)
Azure Pipelines 是 Azure DevOps 的組建元件。 您可以設定管線,從任何支援的來源存放庫建置、測試應用程式並部署至 App Service。
若要使用 Azure Pipelines 作為建置提供者,請在 App Service 部署中心中選取 [Azure Pipelines] 選項,然後直接移至 Azure DevOps 以設定管線。 如需詳細資訊,請參閱使用 Azure Pipelines 部署至 App Service。
常見問題集
- 如果停用基本身份驗證,GitHub Actions 建置提供者如何運作?
- 在部署期間,我的應用程式會發生什麼情況,可能會導致失敗或無法預期的行為?
- GitHub Actions 的使用者指派身分識別選項有何用途?
- 為什麼我會看到「您在此應用程式上沒有足夠的許可權可指派受管理的身分識別的角色型存取權限,並設定聯合認證」錯誤?
- 為什麼我看到錯誤「此身分識別在此應用程式上沒有寫入許可權。 請選取不同的身分識別,或與您的系統管理員合作,授與此應用程式上身分識別的網站參與者角色」?
如果停用基本身份驗證,GitHub Actions 建置提供者如何運作?
如果停用基本身份驗證,GitHub Actions 建置提供者將無法使用基本身份驗證。 請嘗試改用 GitHub Actions 搭配使用者指派的身分識別選項。 如需詳細資訊,請參閱 不使用基本身份驗證部署。
在部署期間,我的應用程式會發生什麼情況,可能會導致失敗或無法預期的行為?
正式支援的部署方法會變更用來執行應用程式的 /home/site/wwwroot 資料夾中的檔案。 部署可能會因為鎖定的檔案而失敗。 如果檔案並非全部同時更新,則應用程式在部署期間也會發生無法預期的行為,這對客戶面向應用程式而言並不理想。
有幾種方式可以避免這些問題。
- 直接從 ZIP 套件執行您的應用程式, 而不需解除封裝。
- 停止您的應用程式,或在部署期間啟用離線模式。 如需詳細資訊,請參閱在部署期間處理鎖定的檔案。
- 在開啟自動交換的情況下,部署到預備位置。
GitHub Actions 的使用者指派身分識別選項有何用途?
當您選取 GitHub 來源的使用者指派身分識別時,App Service 會在 Azure 和 GitHub 中設定所有必要的資源。 App Service 會啟用使用建議的 Microsoft OpenID Connect 驗證搭配 GitHub Actions。
具體來說,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/writeMicrosoft.ManagedIdentity/userAssignedIdentities/write
根據預設,Azure 使用者存取管理員 和 擁有者 角色具有這些許可權,但 參與者 角色則沒有。 如果您沒有必要的許可權,請與您的 Azure 系統管理員合作,建立具有 網站參與者 角色的使用者指派受控識別。 然後,您可以在 App Service 部署中心的 GitHub 來源的 身分下拉式清單中選取該身分識別。
如需使用替代步驟的詳細資訊,請參閱 使用 GitHub Actions 部署至 App Service。
為什麼我看到錯誤「此身分識別在此應用程式上沒有寫入許可權。 請選取不同的身分識別,或與您的系統管理員合作,授與此應用程式上身分識別的網站參與者角色」?
訊息指出,選取的使用者指派的受控身分識別沒有在 GitHub 儲存庫與 App Service 應用之間[啟用 OpenID Connect](#what-does-the-user-assigned-identity-option-do-for-github-actions) 所需的角色。 帳戶必須在應用程式上具有擁有者、參與者或網站參與者角色。 身分識別所需的最低特殊權限角色是網站參與者。