部署代码的最简单方法之一是从本地计算机。 本文介绍如何从本地计算机上的 Git 存储库将应用部署到 Azure 应用服务 。
注意
本地 Git 部署需要 源代码管理器(SCM)基本身份验证,这比其他 部署方法的安全性较低。 如果 禁用了基本身份验证,则无法在应用的部署中心中配置本地 Git 部署。
先决条件
若要完成本文中的步骤,需要:
- 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 
- 已安装 Git,以及包含要部署的应用代码的本地 Git 存储库。 - 可以通过在本地 Bash 终端窗口中运行以下命令来克隆示例 Node.js 应用存储库: - git clone https://github.com/Azure-Samples/nodejs-docs-hello-world.git
- 若要使用 Azure CLI 命令,请在本地计算机上安装最新版本的 Azure CLI 。 使用 az login 登录到 Azure。 
- 若要运行 Azure PowerShell 命令, 请安装最新版本的 Azure PowerShell。 使用 Connect-AzAccount 登录到 Azure。 
准备存储库
若要从 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 部署的用户范围部署用户只需要用户名,而不需要密码。 可以通过运行 Azure CLI 命令az webapp deployment user set --user-name <username>,或在应用的部署中心中,“本地 Git/FTPS 凭据”选项卡的“用户作用域”下设置用户作用域用户名。
创建用户范围部署用户后,可以将其用于你有权访问的所有应用服务应用。 有关详细信息,请参阅 “配置用户范围凭据”。
应用程序范围部署用户特定于应用,并在创建应用时自动创建。 可以从应用的部署中心的“本地 Git/FTPS 凭据”选项卡获取用于部署的应用程序范围用户凭据。
创建和配置已启用 Git 的应用
可以使用 Azure CLI、Azure PowerShell 或 Azure 门户为预先存在的应用创建和配置已启用 Git 的应用,或配置本地 Git 部署。
- 若要创建为本地 Git 部署配置的新 Web 应用,请使用 - --deployment-local-git该选项运行 az webapp create。 例如:- az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name myApp --runtime "NODE:20-lts" --deployment-local-git
- 若要为已有的应用配置本地 Git 部署,请运行 az webapp deployment source config-local-git。 例如: - az webapp deployment source config-local-git --name myApp --resource-group myResourceGroup
任一命令生成包含 URL 的输出,例如:
Local git is configured with url of 'https://contoso-user@myapp.scm.chinacloudsites.cn/myApp.git'
上述 URL 包含 用户范围部署用户名contoso-user。 如果没有用户范围部署用户名,则 URL 使用 应用程序范围用户名,例如 https://$myApp@myApp.scm.chinacloudsites.cn/myApp.git。
使用此 Git 克隆 URL 在下一步中部署应用。
部署 Web 应用
若要将应用部署到 Azure,请在必要时创建远程分支,确保部署到正确的分支,然后将代码推送到远程分支。
创建远程分支
如果使用 Azure PowerShell New-AzWebApp 从示例代码创建应用,则 azure 已创建远程服务器。 否则,请按照以下说明创建远程:
- 在本地终端中,将目录更改为克隆的 Git 存储库的根目录。 
- 使用您的 Git 克隆的 URL 添加一个名为 - azure的 Git 远程。 如果不知道 Git 克隆 URL,请使用- https://<app-name>.scm.chinacloudsites.cn/<app-name>.git。- git remote add azure <git-clone-url>
推送到正确的分支
默认情况下,应用服务存储库将 master 文件部署到分支。 如果预先存在的本地文件位于存储库的分支中 master ,现在可以通过运行 git push azure master来部署应用。
但是,许多 Git 存储库(包括本文的示例代码存储库)使用 main 或其他默认分支名称。 若要部署到正确的分支,必须显式部署到远程 master 分支,或者将部署分支更改为 main 或其他分支名称并部署到该分支。
显式使用以下push命令从main分支部署到master。
git push azure main:master
或者先将DEPLOYMENT_BRANCH的应用设置更改为main,然后直接推送到main,如下所示:
- Azure CLI: - az webapp config appsettings set --name <app-name> --resource-group <group-name> --settings DEPLOYMENT_BRANCH='main' git push azure main
- Azure 门户: - 在应用的门户页上,在左侧导航菜单中的“设置”下选择“环境变量”。
- 选择 “添加”,添加名称 DEPLOYMENT_BRANCH 和值 main 的应用程序设置,然后选择“ 应用”。
- 在终端窗口中,运行 git push azure main。
 
完成并验证部署
如果在推送代码后出现 Git 凭据管理器 对话框,请输入用户范围部署用户名或应用程序范围用户名和密码。 如果 Git 远程 URL 已包含登录信息,则不会提示你输入它。
检查 push 命令的输出。 你可能会看到特定于运行时的自动化,例如 npm install Node.js、 MSBuild ASP.NET 或 pip install Python。 如果遇到错误,请参阅排查部署问题。
转到 Azure 门户,通过在应用的“概述”页上选择“默认域”链接来验证是否已成功部署应用。 应用应在浏览器选项卡中打开,并显示 Hello World!。
排查部署问题
使用本地 Git 发布到 Azure 中的应用服务应用时,可能会出现以下常见错误:
| 消息 | 原因 | 解决方法 | 
|---|---|---|
| Unable to access '[siteURL]': Failed to connect to [scmAddress] | 应用未运行。 | 在 Azure 门户中,启动应用。 如果 Web 应用已停止,Git 部署将不可用。 | 
| Couldn't resolve host 'hostname' | azure远程实例的地址信息不正确。 | 使用 git remote -v命令列出所有远程库及其关联的 URL。 确认azure远程网站的 URL 正确。 如果需要,请使用git remote remove删除不正确的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 <branch> | 
| Error - Changes committed to remote repository but deployment to website failed. | 你推送了与 azure上的应用部署分支不匹配的本地分支。 | 按照“推送到正确的分支”中的说明,验证当前分支是否为 master或更改部署分支。 | 
| src refspec [branchname] does not match any. | 已尝试推送到 main远程库上azure以外的分支。 | 请再次运行 git push,并使用git push azure main指定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\ | 
