从本地 Git 部署到 Azure 应用服务
本操作方法指南介绍如何将应用从本地计算机上的 Git 存储库部署到 Azure 应用服务。
注意
禁用 SCM 基本身份验证后,本地 Git 部署不起作用,并且你无法在应用的部署中心配置本地 Git 部署。
先决条件
按照本操作方法指南中的步骤操作:
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
创建包含想要部署的代码的本地 Git 存储库。 若要下载示例存储库,请在本地终端窗口运行以下命令:
git clone https://github.com/Azure-Samples/nodejs-docs-hello-world.git
准备存储库
若要从 Azure 应用服务生成服务器获取自动生成,请确保项目中存储库根路径具有正确的文件。
运行时 | 根目录文件 |
---|---|
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 |
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 应用
在本地终端窗口中,将目录更改为 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。
使用
git push azure master
远程推送到 Azure(请参阅更改部署分支)。在“Git 凭据管理器”窗口中,输入用户范围凭据或应用程序范围凭据,而不是 Azure 登录凭据。
如果 Git 远程 URL 已经包含用户名和密码,则不会出现提示。
查看输出。 你可能会看到特定于运行时的自动化,例如 MSBuild for ASP.NET、
npm install
for Node.js 和pip install
for Python。在 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\ |