在 Azure 应用服务上进行持续部署

本文介绍如何通过从 GitHubBitbucketAzure Repos 或其他存储库拉取更新来配置持续部署(CD)到 Azure 应用服务

先决条件

在源代码管理存储库中对 Azure 应用服务应用写入权限。

准备存储库

若要从 Azure 应用服务生成服务器获取自动生成,请确保项目中存储库根路径具有正确的文件。

运行时 根目录文件
ASP.NET(仅限 Windows) \*.sln\*.csprojdefault.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
Web 作业 App_Data/jobs/continuous(适用于连续的 WebJobs)或 App_Data/jobs/triggered(适用于触发的 WebJobs)下的 job_name/run.extension。 有关详细信息,请参阅 Kudu WebJobs 文档

要自定义部署,可以在存储库根路径中添加 .deployment 文件。 有关详细信息,请参阅自定义部署自定义部署脚本

备注

如果在 Visual Studio 中进行开发,让 Visual Studio 创建存储库。 该项目可立即通过 Git 进行部署。

启用持续部署

  1. Azure 门户中,转到应用服务应用的页面,然后从左侧导航菜单中选择 部署中心

  2. 在“源”下的“设置”选项卡上,选择源代码管理存储库类型。

    显示如何选择部署源的屏幕截图。

  3. 请根据您的源类型说明来配置部署。

    显示如何配置部署源的屏幕截图。

选定存储库和分支中的新提交现在将持续部署到应用服务应用中。 可以在“日志”选项卡中,跟踪提交和部署。

禁用持续部署

若要禁用连接的源的持续部署,请执行以下操作:

  1. Azure 门户中,转到应用服务应用的页面,然后从左侧导航菜单中选择 部署中心

  2. “设置” 选项卡上,选择“ 断开连接”。

    显示如何在 Azure 门户中将云文件夹同步与应用服务应用断开连接的屏幕截图。

  3. 选择“确定”

生成提供程序有哪些?

构建提供商通过 Azure 应用服务自动化构建、测试和部署过程,从而帮助您构建持续集成和持续交付(CI/CD)解决方案。 某些部署源提供了多个构建提供方选项。 所有列出的源都可以使用应用服务生成服务进行生成。

可供选择的不仅限于列出的构建服务选项,但应用服务可以使你快速设置这些选项,并开始接收集成部署日志记录。

GitHub 操作

GitHub Actions 构建提供程序仅适用于 GitHub 源代码,并且是 GitHub 部署的默认选项。 生成提供程序通过将 GitHub Actions 工作流文件存入处理应用服务生成和部署任务的 GitHub 存储库来设置 CI/CD。

对于基本身份验证,GitHub Actions 生成提供程序会将应用的发布配置文件添加为 GitHub 机密。 工作流文件使用此机密通过应用服务进行身份验证。

对于用户分配的标识,应用服务启用建议Microsoft OpenID Connect 身份验证并在 Azure 和 GitHub 中配置必要的资源。 有关详细信息,请参阅 用户分配的标识选项对 GitHub Actions 有何用途?

GitHub Actions 生成提供程序从工作流运行日志中捕获信息,并将其显示在应用的部署中心的日志”选项卡上。

可以通过多种方式自定义 GitHub Actions 生成提供程序:

  • 在工作流文件在 GitHub 存储库中生成后,自定义该文件。 有关详细信息,请参阅 GitHub Actions 的工作流语法。 使用 azure/webapps-deploy 操作将自定义工作流部署到应用服务。
  • 如果所选分支受到保护,则预览工作流文件而不保存配置。 自定义文件,然后手动将其添加到存储库。 此方法不提供与 Azure 门户集成日志。
  • 使用 Microsoft Entra ID 服务主体 而不是使用基本身份验证或用户分配的标识进行部署。 无法在门户中配置此方法。

应用服务生成服务

应用服务生成服务是本机应用服务部署和生成引擎。 选择此选项时,应用服务会将 Webhook 添加到已授权的存储库中。 任何推送到存储库的代码都会触发“Webhook”,应用服务会拉取更改并执行相应的部署任务。 有关详细信息,请参阅从 GitHub (Kudu) 进行部署

应用服务生成服务需要 源代码管理管理器(SCM)基本身份验证 才能使 Webhook 正常工作。 基本身份验证比其他身份验证方法安全性更低。 有关详细信息,请参见:

常见问题解答

如果禁用基本身份验证,GitHub Actions 生成提供程序将如何工作?

如果禁用基本身份验证,则 GitHub Actions 生成提供程序不适用于基本身份验证。 请尝试改用具有用户分配的标识选项的 GitHub Actions。 有关详细信息,请参阅 “在没有基本身份验证的情况下部署”。

部署期间我的应用会发生什么情况?

所有官方支持的部署方法均会更改应用的 /home/site/wwwroot 文件夹中的文件。 这些文件用于运行你的应用。 因此,部署可能会因为锁定的文件而失败。 应用可能会在部署期间发生不可预测的行为,因为这些文件并非同时更新。 这种行为对于面向客户的应用来说是需要避免的。 可以通过几种方法避免这些问题:

用户分配的标识选项对 GitHub Actions 有何用途?

GitHub 源选择用户分配的标识时,应用服务在 Azure 和 GitHub 中配置所有必要的资源。 应用服务使用 GitHub Actions 启用推荐的 Microsoft OpenID Connect 身份验证。

具体来说,应用服务执行以下操作:

  • 在 Azure 中的用户分配的托管标识与你在 GitHub 中选择的存储库和分支之间创建联合凭据
  • 根据所选 GitHub 存储库中的联合凭据创建机密 AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID
  • 将标识分配给应用。

然后,您可以在 GitHub 存储库中的 GitHub Actions 工作流中使用 Azure/login 操作,通过 OpenID Connect 进行应用身份验证。 有关示例,请参阅将工作流文件添加到 GitHub 存储库

如果 Azure 帐户具有所需的权限,应用服务会创建用户分配的托管标识并为你配置它。 此标识不会显示在应用的 “标识 ”页上。 如果 Azure 帐户没有所需的权限,则必须选择一个具有所需角色的现有标识

为什么我看到错误信息“您没有足够的权限来为此应用分配角色访问权限以管理标识并配置联合凭据”?

该消息指示 Azure 帐户没有为 GitHub Actions 创建用户分配的托管标识所需的权限。 需要以下权限,范围限定为应用:

  • Microsoft.Authorization/roleAssignments/write
  • Microsoft.ManagedIdentity/userAssignedIdentities/write

默认情况下,Azure 用户访问管理员所有者 角色具有这些权限,但 参与者 角色没有。 如果没有所需的权限,请与 Azure 管理员合作,创建具有 网站参与者 角色的用户分配托管标识。 然后,可以在应用服务部署中心的 GitHub 源的“标识”下拉列表中选择该标识。

有关使用替代步骤的详细信息,请参阅 使用 GitHub Actions 部署到应用服务

为什么我会看到“此标识对此应用没有写入权限”的错误? 请选择其他标识,或者与管理员协作,在此应用上向标识授予网站参与者角色”?

该消息指示所选的用户分配的托管标识没有所需的角色在 GitHub 存储库和应用服务应用之间[启用 OpenID Connect]((#what-does-the-user-assigned-identity-option-do-for-github-actions)。 该标识必须在应用上具有 “所有者”、“ 参与者”或 “网站参与者 ”角色。 标识所需的最低特权角色是网站参与者