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

部署代码的最简单方法之一是从本地计算机。 本文介绍如何从本地计算机上的 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\*.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 部署的用户范围部署用户只需要用户名,而不需要密码。 可以通过运行 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 已创建远程服务器。 否则,请按照以下说明创建远程:

  1. 在本地终端中,将目录更改为克隆的 Git 存储库的根目录。

  2. 使用您的 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 门户:

    1. 在应用的门户页上,在左侧导航菜单中的“设置”下选择“环境变量”。
    2. 选择 “添加”,添加名称 DEPLOYMENT_BRANCH 和值 main 的应用程序设置,然后选择“ 应用”。
    3. 在终端窗口中,运行 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\