持續部署至 Azure App Service
Azure App 服務 透過提取最新的更新,從 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 | <job_name>/run.<extension> 下 App_Data/jobs/continuous 表示連續的 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 應用程式的管理頁面。
在左窗格中,選取 [部署中心]。 然後選取 [設定> Disconnect:
根據預設,GitHub Actions 工作流程檔案會保留在您的存放庫中,但它會繼續觸發對應用程式的部署。 若要從存放庫刪除檔案,請選取 [ 刪除工作流程檔案]。
選取 [確定]。
什麼是組建提供者?
視部署中心中的部署來源而定,您可能會看到幾個選項可供建置提供者選取。 建置提供者可透過自動化建置、測試和部署,協助您使用 Azure App 服務 建置 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 連線 驗證。
具體來說,App Service 會執行下列作業:
- 在 Azure 中使用者指派的受控識別與 GitHub 中選取的存放庫和分支之間建立同盟認證 。
- 從選取 GitHub 存放庫中的同盟認證建立秘密
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
。 - 將身分識別指派給您的應用程式。
在 GitHub 存放庫中的 GitHub Actions 工作流程中,您可以使用 Azure/登入動作,使用 OpenID 連線 向您的應用程式進行驗證。 如需範例,請參閱 將工作流程檔案新增至 GitHub 存放庫。
如果您的 Azure 帳戶具有 必要的許可權,App Service 會建立使用者指派的受控識別,並為您進行設定。 此身分識別不會顯示在 您應用程式的 [身分 識別] 頁面中。 如果您的 Azure 帳戶沒有必要的許可權,您必須選取 具有必要角色的現有身分識別。
為什麼我看到錯誤:「您在此應用程式上沒有足夠的許可權可指派角色型存取權給受控識別並設定同盟認證」?
訊息指出您的 Azure 帳戶沒有為 GitHub Actions 建立使用者指派的受控識別所需的許可權。 所需的權限(範圍設定為您的應用程式) 為:
Microsoft.Authorization/roleAssignments/write
Microsoft.ManagedIdentity/userAssignedIdentities/write
根據預設,使用者存取 管理員 istrator 角色和擁有者角色已有這些許可權,但參與者角色則沒有。 如果您沒有必要的許可權,請與您的 Azure 系統管理員合作,以使用 網站參與者角色建立使用者指派的受控識別。 在 [部署中心] 中,您可以接著在 [GitHub>身分識別] 下拉式清單中選取身分識別。
如需替代步驟的詳細資訊,請參閱 使用 GitHub Actions 部署至 App Service。
為什麼我會看到錯誤:「此身分識別在此應用程式上沒有寫入許可權。 請選取不同的身分識別,或與您的系統管理員合作,將此應用程式的身分識別授與網站參與者角色」?
訊息指出選取的使用者指派受控識別沒有啟用 GitHub 存放庫與 App Service 應用程式之間 OpenID 連線 的必要角色。 身分識別在應用程式上必須具有下列其中一個角色: 擁有者、 參與者、 網站參與者。 身分識別所需的最低許可權角色是 網站參與者。