你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

对持续部署到 Azure 应用服务进行配置

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

先决条件

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

准备存储库

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

运行时 根目录文件
ASP.NET(仅限 Windows) *.sln, *.csprojdefault.aspx
ASP.NET Core *.sln*.csproj
PHP index.php
Ruby(仅限 Linux) Gemfile
Node.js server.jsapp.jspackage.json与启动脚本一起使用。
Python语言 *.py, requirements.txtruntime.txt
HTML default.htm、、default.htmldefault.aspindex.htm、或index.htmliisstart.htm
WebJobs <job_name>/run.<extension> 下的 App_Data/jobs/continuous(表示连续 WebJobs),或者 App_Data/jobs/triggered(表示触发的 WebJobs)。 有关详细信息,请参阅 Kudu WebJobs 文档
功能 请参阅 Azure Functions 的连续部署

若要自定义部署,请在存储库根目录中包括一个 .deployment 文件。 有关详细信息,请参阅自定义部署自定义部署脚本

小窍门

Visual Studio 可以为你创建存储库。 使用此方法,你的项目立即可以通过 Git 进行部署。

启用持续部署

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

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

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

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

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

所有列出的源都可以使用应用服务生成服务进行生成。 某些源还可以使用 GitHub Actions 或 Azure Pipelines 进行生成。 有关详细信息,请参阅生成提供程序

GitHub Actions 是默认的 GitHub 生成提供程序。 若要更改提供程序,请选择 “更改提供程序”,选择 “应用服务生成服务 ”或 “Azure Pipelines”,然后选择“ 确定”。

如有必要,请选择 “授权 ”并按照 GitHub 的授权提示进行作。 若要从其他用户的存储库进行部署,请选择“ 更改帐户”。

  1. 选择相应的 GitHub 组织存储库分支

    如果找不到组织或存储库,可能需要在 GitHub 上启用更多权限。 有关详细信息,请参阅管理对组织存储库的访问权限

  2. 在“身份验证类型”下,选择“用户分配的标识”以提高安全性。

    如果 Azure 帐户具有所需的权限,应用服务会为你创建 用户分配的托管标识 ,也可以选择现有的托管标识。 如果没有所需的权限,请与 Azure 管理员协作,在 应用上创建具有所需角色的标识,然后在下拉列表中选择该标识。

  3. 应用服务根据应用 的语言堆栈设置 选择工作流模板,并将其提交到所选的 GitHub 存储库中。 可以选择预览文件以查看工作流 文件 ,然后再保存更改。

  4. 选择“保存”。

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

禁用持续部署

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

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

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

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

  3. 选择“确定”

对于 GitHub,工作流文件默认保留在存储库中,但部署中心的“日志”选项卡上不再显示集成进度。

生成提供程序有哪些?

构建服务提供商通过自动化生成、测试和部署,帮助您使用 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 正常工作。 基本身份验证比其他身份验证方法安全性更低。 有关详细信息,请参见:

Azure Pipelines(Azure 管道服务)

Azure Pipelines 是 Azure DevOps 的生成组件。 可以配置管道来生成、测试应用并将其从任何受支持的源存储库部署到应用服务。

若要使用 Azure Pipelines 作为生成提供程序,请在应用服务部署中心中选择 Azure Pipelines 选项,然后直接转到 Azure DevOps 以配置管道。 有关详细信息,请参阅使用 Azure Pipelines 部署到应用服务

常见问题解答

如果禁用基本身份验证,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)。 该标识必须在应用上具有 “所有者”、“ 参与者”或 “网站参与者 ”角色。 标识所需的最低特权角色是网站参与者。