你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
部署代码的最简单方法之一是从本地计算机。 本文介绍如何从本地计算机上的 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 , *.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 。 |
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
已创建远程服务器。 否则,请按照以下说明创建远程:
在本地终端中,将目录更改为克隆的 Git 存储库的根目录。
使用 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 门户:
- 在应用的门户页上,在左侧导航菜单中的“设置”下选择“环境变量”。
- 选择 “添加”,添加名称 DEPLOYMENT_BRANCH 和值 main 的应用程序设置,然后选择“ 应用”。
- 在终端窗口中,运行
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\ |