【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
问题描述
Python Flash应用上云,本地Git部署(https://docs.azure.cn/zh-cn/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Clocal-git-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli),遇见两类问题。
1: src refspec master does not match any
> git push azure master
error: src refspec master does not match any
error: failed to push some refs to 'https://xxxxxxxxx.scm.chinacloudsites.cn:443/xxxxxxxxx.git'
2:remote: Error - Changes committed to remote repository but deployment to website failed.
> git push azure main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 295 bytes | 295.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Deploy Async
remote: The current deployment branch is 'master', but nothing has been pushed to it
remote: Error - Changes committed to remote repository but deployment to website failed.
remote: Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
remote: at Kudu.Console.Program.PerformDeploy(String appRoot, String wapTargets, String deployer, String lockPath, IEnvironment env, IDeploymentSettingsManager settingsManager, TraceLevel level, ITracer tracer, ITraceFactory traceFactory, IOperationLock deploymentLock, IBuildService buildService) in /tmp/KuduLite/Kudu.Console/Program.cs:line 220
remote: at Kudu.Console.Program.Main(String[] args) in /tmp/KuduLite/Kudu.Console/Program.cs:line 95
remote: Aborted (core dumped)
To https://xxxxxxxxx.scm.chinacloudsites.cn:443/xxxxxxxxx.git
223b3cf..6250814 main -> main
问题解答
面对问题,反复尝试。
继续使用 " git push azure master " " git push azure main " 指令push本地文件到App Service, 但总是显示 error : xxxx 或 Everything up-to-date 。 根本无法完成App Service的部署操作。
对比文档,对有默认的 master branch变换为main,检查官方文档中,需要设置DEPLOYMENT_BRANCH参数,并设置为 main。
应用服务的默认部署分支是
master
,但许多 Git 存储库将从master
移至main
。 可以在推送中指定本地分支名称和远程分支名称之间的对应关系(如下所示),也可以配置DEPLOYMENT_BRANCH
应用设置。
配置完成后,通过对本地文件修改,使得 push 时不再是 everything up-to-date。
# 添加修改的内容
git add .
# 提交修改到本地 Ropes
git commit -m "update"
# Push到App Service Repostory
git push azure main
此次,输出内容完成,并明确提示Deployment successful。
PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git push azure main Everything up-to-date PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git add . PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git commit -m "update" [main a7afc79] update 1 file changed, 1 insertion(+), 1 deletion(-) PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git push azure main Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: Deploy Async remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'a7afc79780'. remote: PreDeployment: context.CleanOutputPath False remote: PreDeployment: context.OutputPath /home/site/wwwroot remote: Repository path is /home/site/repository remote: Running oryx build... remote: Operation performed by Microsoft Oryx, https://github.com/Microsoft/Oryx remote: You can report issues at https://github.com/Microsoft/Oryx/issues remote: remote: Oryx Version: 0.2.20230508.1, Commit: 7fe2bf39b357dd68572b438a85ca50b5ecfb4592, ReleaseTagName: 20230508.1 remote: remote: Build Operation ID: 749d23a7e7e13313 remote: Repository Commit : a7afc79780d8f7246cb32368c547078f5ffb36b7 remote: OS Type : buster remote: Image Type : githubactions remote: remote: Detecting platforms... remote: . remote: Detected following platforms: remote: python: 3.9.18 remote: Version '3.9.18' of platform 'python' is not installed. Generating script to install it... remote: remote: Using intermediate directory '/tmp/8dc73196223c40d'. remote: remote: Copying files to the intermediate directory... remote: Done in 1 sec(s). remote: remote: Source directory : /tmp/8dc73196223c40d remote: Destination directory: /home/site/wwwroot remote: remote: remote: Downloading and extracting 'python' version '3.9.18' to '/tmp/oryx/platforms/python/3.9.18'... remote: Detected image debian flavor: buster. remote: Downloaded in 3 sec(s). remote: Verifying checksum... remote: Extracting contents... remote: ....... remote: performing sha512 checksum for: python... remote: Done in 16 sec(s). remote: remote: Python Version: /tmp/oryx/platforms/python/3.9.18/bin/python3.9 remote: Creating directory for command manifest file if it does not exist remote: Removing existing manifest file remote: Python Virtual Environment: antenv remote: Creating virtual environment... remote: ............... remote: Activating virtual environment... remote: Running pip install... remote: ........ remote: [06:54:16+0000] Collecting Flask==2.2.2 remote: [06:54:17+0000] Downloading Flask-2.2.2-py3-none-any.whl (101 kB) remote: [06:54:17+0000] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.5/101.5 kB 626.3 kB/s eta 0:00:00 remote: [06:54:17+0000] Collecting gunicorn remote: [06:54:17+0000] Downloading gunicorn-22.0.0-py3-none-any.whl (84 kB) remote: [06:54:17+0000] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.4/84.4 kB 2.6 MB/s eta 0:00:00 remote: [06:54:18+0000] Collecting Werkzeug==2.2.2 remote: [06:54:18+0000] Downloading Werkzeug-2.2.2-py3-none-any.whl (232 kB) remote: [06:54:18+0000] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 232.7/232.7 kB 2.0 MB/s eta 0:00:00 remote: [06:54:18+0000] Collecting Jinja2>=3.0 remote: [06:54:18+0000] Downloading jinja2-3.1.4-py3-none-any.whl (133 kB) remote: [06:54:18+0000] ━━━━━━━━━━━━━━��━━━━━━━━━━━━━━━━━━━━━━━━ 133.3/133.3 kB 9.3 MB/s eta 0:00:00 remote: [06:54:18+0000] Collecting click>=8.0 remote: [06:54:19+0000] Downloading click-8.1.7-py3-none-any.whl (97 kB) remote: [06:54:19+0000] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 8.9 MB/s eta 0:00:00 remote: [06:54:19+0000] Collecting importlib-metadata>=3.6.0 remote: [06:54:19+0000] Downloading importlib_metadata-7.1.0-py3-none-any.whl (24 kB) remote: [06:54:19+0000] Collecting itsdangerous>=2.0 remote: [06:54:20+0000] Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB) remote: [06:54:20+0000] Collecting MarkupSafe>=2.1.1 remote: [06:54:20+0000] Downloading MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB) remote: [06:54:21+0000] Collecting packaging remote: [06:54:21+0000] Downloading packaging-24.0-py3-none-any.whl (53 kB) remote: [06:54:21+0000] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.5/53.5 kB 4.0 MB/s eta 0:00:00 remote: [06:54:21+0000] Collecting zipp>=0.5 remote: [06:54:21+0000] Downloading zipp-3.18.1-py3-none-any.whl (8.2 kB) remote: [06:54:22+0000] Installing collected packages: zipp, packaging, MarkupSafe, itsdangerous, click, Werkzeug, Jinja2, importlib-metadata, gunicorn, Flask remote: [06:54:24+0000] Successfully installed Flask-2.2.2 Jinja2-3.1.4 MarkupSafe-2.1.5 Werkzeug-2.2.2 click-8.1.7 gunicorn-22.0.0 importlib-metadata-7.1.0 itsdangerous-2.2.0 packaging-24.0 zipp-3.18.1 remote: remote: [notice] A new release of pip is available: 23.0.1 -> 24.0 remote: Not a vso image, so not writing build commands remote: Not a vso image, so not writing build commands remote: Preparing output... remote: remote: Copying files to destination directory '/tmp/_preCompressedDestinationDir'... remote: Done in 4 sec(s). remote: Compressing content of directory '/tmp/_preCompressedDestinationDir'... remote: Copied the compressed output to '/home/site/wwwroot' remote: remote: Removing existing manifest file remote: Creating a manifest file... remote: Manifest file created. remote: Copying .ostype to manifest output directory. remote: remote: Done in 60 sec(s). remote: Running post deployment command(s)... remote: remote: Generating summary of Oryx build remote: Parsing the build logs remote: Found 0 issue(s) remote: remote: Build Summary : remote: =============== remote: Errors (0) remote: Warnings (0) remote: remote: Triggering recycle (preview mode disabled). remote: Deployment successful. deployer = deploymentPath = remote: Deployment Logs : 'https://********.scm.chinacloudsites.cn/newui/jsonviewer?view_url=/api/deployments/a7afc79780d8f7246cb32368c547078f5ffb36b7/log' To https://********.scm.chinacloudsites.cn:443/********.git 6250814..a7afc79 main -> main
参考资料
快速入门:将 Python(Django 或 Flask)Web 应用部署到 Azure应用服务 : https://docs.azure.cn/zh-cn/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Clocal-git-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli
更改部署分支 : https://docs.azure.cn/zh-cn/app-service/deploy-local-git?tabs=cli#change-deployment-branch
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!