从本地 Git 部署到 Azure 应用服务

本操作方法指南介绍如何将应用从本地计算机上的 Git 存储库部署到 Azure 应用服务

注意

禁用 SCM 基本身份验证后,本地 Git 部署不起作用,并且你无法在应用的部署中心配置本地 Git 部署。

先决条件

按照本操作方法指南中的步骤操作:

  • 如果没有 Azure 订阅,可在开始前创建一个试用帐户

  • 安装 Git

  • 创建包含想要部署的代码的本地 Git 存储库。 若要下载示例存储库,请在本地终端窗口运行以下命令:

    git clone https://github.com/Azure-Samples/nodejs-docs-hello-world.git
    

准备存储库

若要从 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 进行部署。

配置部署用户

请参阅为 Azure 应用服务配置部署凭据。 可以使用用户范围凭据或应用程序范围凭据。

创建启用 Git 的应用

如果已有一个应用服务应用并想要为其配置本地 Git 部署,请改为参阅配置现有应用

使用 --deployment-local-git 选项运行 az webapp create。 例如:

az webapp create --resource-group <group-name> --plan <plan-name> --name <app-name> --runtime "<runtime-flag>" --deployment-local-git

输出包含如下所示的 URL:https://<deployment-username>@<app-name>.scm.chinacloudsites.cn/<app-name>.git。 在下一步骤中,将使用此 URL 部署应用。

配置现有应用

如果你还没有应用,请参阅创建已启用 Git 的应用

运行 az webapp deployment source config-local-git。 例如:

az webapp deployment source config-local-git --name <app-name> --resource-group <group-name>

输出包含如下所示的 URL:https://<deployment-username>@<app-name>.scm.chinacloudsites.cn/<app-name>.git。 在下一步骤中,将使用此 URL 部署应用。

提示

此 URL 包含用户范围部署用户名。 如果需要,可以改为使用应用程序范围凭据

部署 Web 应用

  1. 在本地终端窗口中,将目录更改为 Git 存储库的根目录,并使用从应用获取的 URL 添加 Git 远程库。 如果你选择的方法没有提供 URL,请使用 https://<app-name>.scm.chinacloudsites.cn/<app-name>.git,且你的应用名称在 <app-name> 中。

    git remote add azure <url>
    

    注意

    如果在 PowerShell 中使用 New-AzWebApp 创建了启用 Git 的应用,则已为你创建了远程 Git。

  2. 使用 git push azure master 远程推送到 Azure(请参阅更改部署分支)。

  3. 在“Git 凭据管理器”窗口中,输入用户范围凭据或应用程序范围凭据,而不是 Azure 登录凭据。

    如果 Git 远程 URL 已经包含用户名和密码,则不会出现提示。

  4. 查看输出。 你可能会看到特定于运行时的自动化,例如 MSBuild for ASP.NET、npm install for Node.js 和 pip install for Python。

  5. 在 Azure 门户中浏览到你的应用以检查内容是否已部署。

更改部署分支

将提交推送到应用服务存储库时,应用服务默认在 master 分支中部署文件。 由于许多 Git 存储库正在从 master 转移到 main,因此需要确保通过以下两种方式之一推送到应用服务存储库中的正确分支:

  • 使用如下命令显式部署到 master

    git push azure main:master
    
  • 通过设置 DEPLOYMENT_BRANCH 应用设置来更改部署分支,然后将提交推送到自定义分支。 使用 Azure CLI 执行该操作:

    az webapp config appsettings set --name <app-name> --resource-group <group-name> --settings DEPLOYMENT_BRANCH='main'
    git push azure main
    

    还可以通过在“设置”下选择“配置”并添加新的名称为 DEPLOYMENT_BRANCH 且值为 main 的应用程序设置,在 Azure 门户中更改 DEPLOYMENT_BRANCH 应用设置。

排查部署问题

使用 Git 发布到 Azure 中的应用服务应用时,可能会看到以下常见错误消息:

Message 原因 解决方法
Unable to access '[siteURL]': Failed to connect to [scmAddress] 应用未正常运行。 在 Azure 门户中启动应用。 如果 Web 应用已停止,Git 部署将不可用。
Couldn't resolve host 'hostname' azure 远程实例的地址信息不正确。 使用 git remote -v 命令列出所有远程网站以及关联的 URL。 确认 azure 远程网站的 URL 正确。 如果需要,请删除此远程网站并使用正确的 URL 重新创建它。
No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'main'. 在运行 git push 期间未指定分支,或者未在 .gitconfig 中设置 push.default 值。 再次运行 git push,并指定主分支:git push azure main
Error - Changes committed to remote repository but deployment to website failed. 你推送了与 azure 上的应用部署分支不匹配的本地分支。 请确认当前分支为 master。 若要更改默认分支,请使用 DEPLOYMENT_BRANCH 应用程序设置(见更改部署分支)。
src refspec [branchname] does not match any. 你试图推送到 azure 远程实例中主节点以外的分支。 再次运行 git push,并指定主分支:git push azure main
RPC failed; result=22, HTTP code = 5xx. 如果尝试通过 HTTPS 推送大型 Git 存储库,则可能出现此错误。 在本地计算机上更改 Git 配置,以增大 postBuffer。 例如:git config --global http.postBuffer 524288000
Error - Changes committed to remote repository but your web app not updated. 你已使用一个指定了其他所需模块的 package.json 文件部署了 Node.js 应用。 检查发生此错误之前出现的 npm ERR! 错误消息,以了解有关失败的更多上下文。 下面是此错误的已知原因,以及相应的 npm ERR! 消息:

package.json 文件格式不当npm ERR! Couldn't read dependencies.

本机模块没有适用于 Windows 的二进制分发版
npm ERR! \cmd "/c" "node-gyp rebuild"\ failed with 1

npm ERR! [modulename@version] preinstall: \make || gmake\

更多资源