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

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

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

先决条件

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

  • 安装 Git
  • 使用想要部署的代码维护本地 Git 存储库。

要遵循示例存储库操作,请在本地终端窗口运行以下命令:

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

准备存储库

确保存储库根路径具有项目中的正确文件。

运行时 根目录文件
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(仅限 Windows) *.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 文档
函数 请参阅 Azure Functions 的连续部署

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

Note

请确保 git commit 想要部署的所有更改。

配置部署用户

使用 az webapp deployment user set 命令创建部署凭据。

在 Web 应用中进行 FTP 和本地 Git 部署时需要一个部署用户。 用户名和密码都为帐户级别。 它们与 Azure 订阅凭据不同。

在以下命令中,将 <user-name> 和 <password> 替换为新的用户名和密码。 用户名必须唯一。 密码长度必须至少为 8 个字符,其中包含以下 3 种元素中的两种:字母、数字、符号。

az webapp deployment user set --user-name <username> --password <password>

如果收到 'Conflict'. Details: 409 错误,请更改用户名。 如果收到 'Bad Request'. Details: 400 错误,请使用更强的密码。

只创建此部署用户一次;可对所有 Azure 部署使用此用户。

Note

记录用户名和密码。 稍后需要使用它们来部署 Web 应用。

使用 Kudu 启用本地 Git

若要使用 Kudu 生成服务器为应用启用本地 Git 部署,请运行 az webapp deployment source config-local-git

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

要创建启用 Git 的应用,请结合 --deployment-local-git 参数运行 az webapp create

az webapp create --name <app_name> --resource-group <group_name> --plan <plan_name> --deployment-local-git

az webapp create 命令的输出应如下所示:

Local git is configured with url of 'https://<username>@<app_name>.scm.chinacloudsites.cn/<app_name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.chinacloudsites.cn",
  "deploymentLocalGitUrl": "https://<username>@<app_name>.scm.chinacloudsites.cn/<app_name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

部署项目

回到本地终端窗口,将 Azure 远程功能添加到本地 Git 存储库。 使用从启用应用的 Git中获取的 Git 远程 URL 替换 <url>。

git remote add azure <url>

使用以下命令推送到 Azure 远程功能以部署应用。 提示输入密码时,请确保输入在配置部署用户中创建的密码,而不是用于登录到 Azure 门户的密码。

```bash  
git push azure master
```

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

部署完成后,Azure 门户中的应用现应在“部署选项”页具有 git push 的记录。

![](./media/app-service-deploy-local-git/deployment_history.png)

浏览到应用以验证内容已部署。

故障排除

以下是使用 Git 发布到 Azure 中的应用服务应用时遇到的常见错误或问题:


症状:无法访问“[siteURL]”:无法连接到 [scmAddress]

原因:如果应用无法启动和运行,则会发生该错误。

解决方法:在 Azure 门户中启动应用。 如果 Web 应用停止时,Git 部署将不可用。


症状:无法解析主机“主机名”

原因:如果创建“azure”远程网站时输入的地址信息不正确,则会发生该错误。

解决方法:使用 git remote -v 命令列出所有远程网站以及关联的 URL。 确认“azure”远程网站的 URL 正确。 如果需要,请删除此远程网站并使用正确的 URL 重新创建它。


症状:无通用引用且未指定任何引用;不采取任何措施。 或许你应指定一个分支,例如“master”。

原因:如果在 git push 期间未指定分支,或者未在 .gitconfig 中设置 push.default 值,则会出现此错误。

解决方法:再次运行 git push,指定主分支。 例如:

git push azure master

症状:src refspec [分支名] 不匹配任何内容。

原因:如果尝试推送到“azure”远程网站上主分支之外的分支,则会发生该错误。

解决方法:再次运行 git push,指定主分支。 例如:

git push azure master

症状:RPC 失败;结果 = 22,HTTP 代码 = 5xx。

原因:如果尝试通过 HTTPS 推送大型 Git 存储库,则可能出现此错误。

解决方法:在本地计算机上更改 Git 配置,以增大 postBuffer

git config --global http.postBuffer 524288000

症状:错误 - 已将更改提交到远程存储库,但未更新 Web 应用。

原因:如果部署 Node.js 应用时使用的 package.json 文件指定了其他所需模块,则会发生该错误。

解决方法:应在发生此错误之前记录包含“npm ERR!” 的其他消息,这些消息可提供有关失败的其他上下文。 以下是该错误的已知原因和相应的“npm ERR!” 消息:

  • package.json 文件格式不正确:npm ERR! 无法读取依赖项。
  • 不具有 Windows 的二进制分发的本机模块

    • npm ERR! \cmd "/c" "node-gyp rebuild"\ failed with 1

      OR

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

其他资源