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

持续部署到 Azure 应用服务

Azure 应用服务可以通过拉取最新的更新,来使你能够通过 GitHubBitBucketAzure Repos 存储库执行持续部署。

准备存储库

若要从 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 *.pyrequirements.txtruntime.txt
HTML default.htmdefault.htmldefault.aspindex.htmindex.htmliisstart.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 进行部署。

配置部署源

  1. Azure 门户中,转到应用服务应用的管理页面。

  2. 从左窗格中,选择“部署中心”。 然后选择“设置”。

  3. 在“部署源”方框中,选择 CI/CD 选项之一:

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

选择与生成提供程序对应的选项卡以继续。

  1. GitHub Actions 是默认的生成提供程序。 若要更改提供程序,选择“更改提供程序”>“应用服务生成服务”>“确定”

  2. 若是第一次从 GitHub 进行部署,请选择“授权”并按授权提示进行操作。 若要从另一个用户的存储库进行部署,请选择“更改帐户”。

  3. 通过 GitHub 授权 Azure 帐户后,选择所需的“组织”、“存储库”和“分支”

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

  4. 在“身份验证类型”下,选择“用户分配的标识”以提高安全性。 有关详细信息,请参阅“常见问题”

    注意

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

  5. (可选)若要在保存更改之前查看文件,请选择“预览文件”。 应用服务会根据应用的语言堆栈设置选择工作流模板,并将其提交到所选 GitHub 存储库中。

  6. 选择“保存”。

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

禁用持续部署

  1. Azure 门户中,转到应用服务应用的管理页面。

  2. 从左窗格中,选择“部署中心”。 然后选择“设置”>“断开连接”:

    显示如何在 Azure 门户中断开 Cloud Folder Sync 与应用服务应用之间的连接的屏幕截图。

  3. 默认情况下,GitHub Actions 工作流文件保留在你的存储库中,但会持续触发向你的应用进行部署。 若要从存储库中删除文件,请选择“删除工作流文件”。

  4. 选择“确定”

生成提供程序有哪些?

你可能会看到一些可供选择的生成提供程序选项,具体取决于部署中心内的部署源。 生成提供程序通过自动完成生成、测试和部署来帮助你使用 Azure 应用服务生成 CI/CD 解决方案。

你不受限于部署中心内的生成提供程序选项,但应用服务可让你快速设置它们并提供一些集成的部署日志记录体验。

GitHub Actions 生成提供程序仅适用于 GitHub 部署。 从应用的部署中心进行配置时,它会完成以下操作来设置 CI/CD:

  • 将 GitHub Actions 工作流文件存储到 GitHub 存储库中,以便处理目标为应用服务的生成和部署任务。
  • 对于基本身份验证,请添加应用的发布配置文件作为 GitHub 机密。 工作流文件使用此机密通过应用服务进行身份验证。
  • 对于用户分配的标识,请参阅用户分配的标识选项对 GitHub Actions 有何用途?
  • 捕获工作流运行日志中的信息,并在“部署中心”的“日志”选项卡中显示这些信息

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

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

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

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

常见问题解答

如果禁用基本身份验证,GitHub Actions 生成提供程序是否可以使用基本身份验证?

错误。 尝试将 GitHub Actions 与“用户分配的标识”选项结合使用。

有关详细信息,请参阅不使用基本身份验证的部署

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

在 GitHub Actions 源下选择“用户分配的标识”时,应用服务会在 Azure 和 GitHub 中配置所有必要的资源,以通过 GitHub Actions 启用建议的 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 管理员协作,使用网站参与者角色创建用户分配的托管标识。 然后就可以在部署中心内的“GitHub”>“标识”下拉列表中选择标识。

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

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

该消息指示所选的用户分配的托管标识没有所需的角色在 GitHub 存储库和应用服务应用之间启用 OpenID Connect。 该标识必须在应用上具有以下角色之一:所有者、参与者、网站参与者。 标识所需的最低特权角色是网站参与者

更多资源