你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

部署代码的最简单方法之一是从本地计算机。 本文介绍如何从本地计算机上的 Git 存储库将应用部署到 Azure 应用服务

注意

本地 Git 部署需要 源代码管理(SCM)基本身份验证,这不如其他 部署方法安全。 如果 禁用了基本身份验证,则无法在应用的部署中心中配置本地 Git 部署。

Prerequisites

若要完成本文中的步骤,你需要:

  • Azure 帐户和具有创建应用服务资源权限的订阅。 如果没有 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。

准备存储库

若要从应用服务生成服务器获取自动构建,请确保项目的存储库根目录中有正确的文件。

运行时 根目录文件
ASP.NET(仅限 Windows) *.sln, *.csprojdefault.aspx
ASP.NET Core *.sln*.csproj
PHP index.php
Ruby(仅限 Linux) Gemfile
Node.js server.jsapp.jspackage.json与启动脚本一起使用。
Python语言 *.py, requirements.txtruntime.txt
HTML default.htm、、default.htmldefault.aspindex.htm、或index.htmliisstart.htm
WebJobs App_Data/jobs/continuous 下的 <job_name>/run.<extension>(表示连续 WebJobs),或者 App_Data/jobs/triggered(表示触发的 WebJobs)。 有关详细信息,请参阅 Kudu WebJobs 文档
函数 请参阅 Azure Functions 的连续部署

若要自定义部署,请在存储库根目录中包括一个 .deployment 文件。 有关详细信息,请参阅自定义部署自定义部署脚本

提示

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.azurewebsites.net/myApp.git'

上述 URL 包含 用户范围部署用户名contoso-user。 如果没有用户范围部署用户名,则 URL 使用 应用程序范围用户名,例如 https://$myApp@myApp.scm.azurewebsites.net/myApp.git

使用此 Git 克隆 URL 在下一步中部署应用。

部署 Web 应用

若要将应用部署到 Azure,请在必要时创建远程分支,确保部署到正确的分支,然后将代码推送到远程分支。

创建远程分支

如果使用 Azure PowerShell New-AzWebApp 从示例代码创建应用,则 azure 已创建远程服务器。 否则,请按照以下说明创建远程:

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

  2. 使用 Git clone URL 添加名为 azure 的 Git 远程。 如果不知道 Git 克隆 URL,请使用 https://<app-name>.scm.azurewebsites.net/<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 for Node.js、MSBuild for ASP.NET 和 pip install for 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. 你部署了一个 Node.js 应用程序,其中包含一个 package.json 文件,该文件指定了需要添加的模块。 查看此错误之前出现的 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\