У меня есть служба приложений, работающая в Azure в среде Linux.
Я пытаюсь связать его с Azure Devops Pipeline, чтобы иметь CI/CD для репозиториев и ветвей на Github.
Я хочу, чтобы сборки выполнялись в Azure Pipeline и инфраструктуре Azure, а не в Github Actions.
Я попробовал все остальные предложения, включая следующие переменные среды в Службе приложений:
SCM_DO_BUILD_DURING_DEPLOYMENT=true
WEBSITE_NODE_DEFAULT_VERSION=~18
WEBSITE_RUN_FROM_PACKAGE=true
Вот журналы, которые я получаю из журналов Kudu/Azure Devops Pipeline/AppService:
/home/LogFiles/2024_08_14_ln1xsdlwk0000K3_docker.log (https://project-app-development.scm.azurewebsites.net/api/vfs/LogFiles/2024_08_14_ln1xsdlwk0000K3_docker.log)
2024-08-14T23:51:45.168Z INFO - Status: Image is up to date for 10.1.0.6:13209/appsvc/python:3.10_20240619.2.tuxprod
2024-08-14T23:51:45.179Z INFO - Pull Image successful, Time taken: 0 Seconds
2024-08-14T23:51:45.223Z INFO - Starting container for site
2024-08-14T23:51:45.223Z INFO - docker run -d --expose=8000 --name project-app-development_0_f2e0544d -e WEBSITE_USE_DIAGNOSTIC_SERVER=false -e WEBSITE_SITE_NAME=project-app-development -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=project-app-development.azurewebsites.net -e WEBSITE_INSTANCE_ID=3f627dbbecdaed255d87aa9c3e8f1448758df1cdff41f5e14b114384ea9b244a appsvc/python:3.10_20240619.2.tuxprod gunicorn -b :$PORT project.wsgi
2024-08-14T23:51:45.223Z INFO - Logging is not enabled for this container.
Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2024-08-14T23:51:45.893Z INFO - Initiating warmup request to container project-app-development_0_f2e0544d for site project-app-development
2024-08-14T23:51:49.043Z ERROR - Container project-app-development_0_f2e0544d for site project-app-development has exited, failing site start
2024-08-14T23:51:49.057Z ERROR - Container project-app-development_0_f2e0544d didn't respond to HTTP pings on port: 8000, failing site start. See container logs for debugging.
2024-08-14T23:51:49.063Z INFO - Stopping site project-app-development because it failed during startup.
/home/LogFiles/2024_08_14_ln1xsdlwk0000WT_default_docker.log (https://project-app-development.scm.azurewebsites.net/api/vfs/LogFiles/2024_08_14_ln1xsdlwk0000WT_default_docker.log)
2024-08-14T00:05:39.611783454Z File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
2024-08-14T00:05:39.611788754Z File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
2024-08-14T00:05:39.611793955Z File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
2024-08-14T00:05:39.611799355Z File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
2024-08-14T00:05:39.611804655Z ModuleNotFoundError: No module named 'project'
2024-08-14T00:05:39.611810055Z [2024-08-14 00:05:39 +0000] [83] [INFO] Worker exiting (pid: 83)
2024-08-14T00:05:39.756375163Z [2024-08-14 00:05:39 +0000] [49] [ERROR] Worker (pid:83) exited with code 3
2024-08-14T00:05:39.758705055Z [2024-08-14 00:05:39 +0000] [49] [ERROR] Shutting down: Master
2024-08-14T00:05:39.758726256Z [2024-08-14 00:05:39 +0000] [49] [ERROR] Reason: Worker failed to boot.
Вот моя команда запуска в конфигурации Azure AppService:
gunicorn -b :8000 project.wsgi
% cat app.yaml
runtime: python37
entrypoint: gunicorn -b :$PORT project.wsgi
# service: "project-ai-266410"
service: "default"
handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
static_dir: static
secure: always
# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
script: auto
secure: always%
% cat ./project/wsgi.py
"""
WSGI config for project project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
application = get_wsgi_application()
Вот мой файл рабочего процесса на GitHub:
# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
# More GitHub Actions for Azure: https://github.com/Azure/actions
# More info on Python, GitHub Actions, and Azure App Service: https://aka.ms/python-webapps-actions
name: Build and deploy Python app to Azure Web App - project-app-development
on:
push:
branches:
- 543-azure-based-secrets
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python version
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Create and start virtual environment
run: |
python -m venv antenv
source antenv/bin/activate
- name: Install dependencies
run: pip install -r requirements.txt
# Optional: Add step to run tests here (PyTest, Django test suites, etc.)
- name: Zip artifact for deployment
run: zip release.zip ./* -r
- name: Upload artifact for deployment jobs
uses: actions/upload-artifact@v4
with:
name: python-app
path: |
release.zip
!venv/
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
permissions:
id-token: write #This is required for requesting the JWT
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: python-app
- name: Unzip artifact for deployment
run: unzip release.zip
- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_5DF5B8B04E0349C7828DF5D5B258B9CD }}
tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_741E597FD19043F4B2CBF83B89C75D92 }}
subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_ED0C3DE592084669926EEBA461FB5E98 }}
- name: 'Deploy to Azure Web App'
uses: azure/webapps-deploy@v3
id: deploy-to-webapp
with:
app-name: 'project-app-development'
slot-name: 'Production'
Azure создает файл Yaml:
trigger:
- $(feature-branch)
variables:
azureServiceConnectionId: '-db5f-4993-91f8-85f3a75cb357'
webAppName: 'project-app-development'
vmImageName: 'ubuntu-latest'
environmentName: 'project-app-development'
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.8'
system.debug: true
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m virtualenv env
source env/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: true
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : project-app-development'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Сообщение об ошибке последних действий github:
##[debug]logs from kudu deploy: https://project-app-development.scm.azurewebsites.net/api/deployments/temp-69fc3536/log
##[debug]setting affinity cookie ["ARRAffinity=f1c95587fdc6f942a20e5a5078e78322a753dff56e2f30cc9c09a2b930fa89ac;Path=/;HttpOnly;Secure;Domain=project-app-development.scm.azurewebsites.net","ARRAffinitySameSite=f1c95587fdc6f942a20e5a5078e78322a753dff56e2f30cc9c09a2b930fa89ac;Path=/;HttpOnly;SameSite=None;Secure;Domain=project-app-development.scm.azurewebsites.net"]
##[debug][GET] https://project-app-development.scm.azurewebsites.net/api/deployments/temp-69fc3536/log
##[debug]getDeploymentLogs. Data: {"statusCode":200,"statusMessage":"OK","headers":{"content-length":"268","content-type":"application/json; charset=utf-8","date":"Mon, 19 Aug 2024 15:57:25 GMT","server":"Kestrel"},"body":[{"log_time":"2024-08-19T15:57:13.2195847Z","id":"afc2dd47-e1ad-4b07-b6aa-fb59b6531aad","message":"Fetching changes.","type":0,"details_url":"https://project-app-development.scm.azurewebsites.net/api/deployments/temp-69fc3536/log/afc2dd47-e1ad-4b07-b6aa-fb59b6531aad"}]}
Fetching changes.
##[debug]setting affinity cookie ["ARRAffinity=f1c95587fdc6f942a20e5a5078e78322a753dff56e2f30cc9c09a2b930fa89ac;Path=/;HttpOnly;Secure;Domain=project-app-development.scm.azurewebsites.net","ARRAffinitySameSite=f1c95587fdc6f942a20e5a5078e78322a753dff56e2f30cc9c09a2b930fa89ac;Path=/;HttpOnly;SameSite=None;Secure;Domain=project-app-development.scm.azurewebsites.net"]
##[debug][GET] https://project-app-development.scm.azurewebsites.net/api/deployments/temp-69fc3536/log/afc2dd47-e1ad-4b07-b6aa-fb59b6531aad
##[debug]getDeploymentLogs. Data: {"statusCode":200,"statusMessage":"OK","headers":{"content-length":"274","content-type":"application/json; charset=utf-8","date":"Mon, 19 Aug 2024 15:57:26 GMT","server":"Kestrel"},"body":[{"log_time":"2024-08-19T15:57:14.2281682Z","id":"","message":"Cleaning up temp folders from previous zip deployments and extracting pushed zip file /tmp/zipdeploy/c28a10f3-d998-437f-94af-eed376d90b90.zip (24.85 MB) to /tmp/zipdeploy/extracted","type":0,"details_url":null}]}
Cleaning up temp folders from previous zip deployments and extracting pushed zip file /tmp/zipdeploy/c28a10f3-d998-437f-94af-eed376d90b90.zip (24.85 MB) to /tmp/zipdeploy/extracted
Error: Failed to deploy web package to App Service.
Error: Deployment Failed, Package deployment using ZIP Deploy failed. Refer logs for more details.
##[debug][POST] https://management.azure.com/subscriptions/***/resourceGroups/project-app-development_group/providers/Microsoft.Web/sites/project-app-development/config/appsettings/list?api-version=2016-08-01
##[debug][GET] https://management.azure.com/subscriptions/***/providers/microsoft.insights/components?$filter=InstrumentationKey eq '4f576d13-00e5-4831-a1d5-7e5ea3cab3c5'&api-version=2015-05-01
##[debug]Unable to find Application Insights resource with Instrumentation key 4f576d13-00e5-4831-a1d5-7e5ea3cab3c5. Skipping adding release annotation.
App Service Application URL: https://project-app-development.azurewebsites.net
##[debug]Deployment failed
##[debug]Node Action run completed with exit code 1
##[debug]AZURE_HTTP_USER_AGENT='GITHUBACTIONS_DeployWebAppToAzure_0a886200850ef7f915637c263559bb1d8963ef779ce24674d123a365c5ec1237'
##[debug]AZURE_HTTP_USER_AGENT=''
##[debug]Set output webapp-url = https://project-app-development.azurewebsites.net
##[debug]Finishing: Deploy to Azure Web App
Упрощенные журналы ошибок (расширенные журналы отключены)
Run azure/webapps-deploy@v3
Package deployment using OneDeploy initiated.
{
id: 'temp-fb83a24b',
status: 3,
status_text: '',
author_email: 'N/A',
author: 'N/A',
deployer: 'OneDeploy',
message: 'OneDeploy',
progress: '',
received_time: '2024-08-19T16:47:42.3127586Z',
start_time: '2024-08-19T16:47:42.3127586Z',
end_time: '2024-08-19T16:47:51.8169497Z',
last_success_end_time: null,
complete: true,
active: false,
is_temp: true,
is_readonly: false,
url: 'https://project-app-development.scm.azurewebsites.net/api/deployments/temp-fb83a24b',
log_url: 'https://project-app-development.scm.azurewebsites.net/api/deployments/temp-fb83a24b/log',
site_name: 'project-app-development',
build_summary: { errors: [], warnings: [] }
}
Fetching changes.
Cleaning up temp folders from previous zip deployments and extracting pushed zip file /tmp/zipdeploy/31a79a90-85fe-4021-92a0-24cd5f24118d.zip (24.85 MB) to /tmp/zipdeploy/extracted
Error: Failed to deploy web package to App Service.
Error: Deployment Failed, Package deployment using ZIP Deploy failed. Refer logs for more details.
App Service Application URL: https://project-app-development.azurewebsites.net
Когда я устанавливаю includeRootFolder: true, сборка не завершается сбоем, журналы: успешные, но не рабочие подробные логи 488
Когда я устанавливаю includeRootFolder : false, сборка завершается сбоем со следующим сообщением, подробные журналы можно найти здесь: подробные журналы ошибок 489
Обновление: я также пытаюсь использовать действия Github, основная проблема: zip-файл никогда не поступает в Appservice из DevOps; либо конвейеры Azure, либо действия github.
Измените разницу для «includeRootFolder: false»:
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: true
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
Журналы после установки «includeRootFolder: false»:
##[error]Failed to deploy web package to App Service.
##[error]KuduStackTraceURL https://$project-app-development:***@videoo-app-development.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace
##[error]Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
Latest logs after setting
-includeRootFolder : false
-ENABLE_ORYX_BUILD : false
-SCM_DO_BUILD_DURING_DEPLOYMENT : true
-WEBSITE_RUN_FROM_PACKAGE : 1
2024-08-20T05:57:34.254Z INFO - Starting container for site
2024-08-20T05:57:34.256Z INFO - docker run -d --expose=8000 --name project-app-development_0_c5c7b0dd -e WEBSITE_USE_DIAGNOSTIC_SERVER=false -e PORT=8000 -e WEBSITES_PORT=8000 -e WEBSITE_SITE_NAME=project-app-development -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=project-app-development.azurewebsites.net -e WEBSITE_INSTANCE_ID=3f627dbbecdaed255d87aa9c3e8f1448758df1cdff41f5e14b114384ea9b244a -e HTTP_LOGGING_ENABLED=1 appsvc/python:3.8-bullseye_20240619.2.tuxprod
2024-08-20T05:57:35.308Z INFO - Initiating warmup request to container project-app-development_0_c5c7b0dd for site project-app-development
2024-08-20T05:57:36.327Z ERROR - Container project-app-development_0_c5c7b0dd for site project-app-development has exited, failing site start
2024-08-20T05:57:36.334Z ERROR - Container project-app-development_0_c5c7b0dd didn't respond to HTTP pings on port: 8000, failing site start. See container logs for debugging.
2024-08-20T05:57:36.337Z INFO - Stopping site project-app-development because it failed during startup.
2024-08-20T05:57:53.915425573Z _____
2024-08-20T05:57:53.915485375Z / _ \ __________ _________ ____
2024-08-20T05:57:53.915492475Z / /_\ \\___ / | \_ __ \_/ __ \
2024-08-20T05:57:53.915497675Z / | / /| | /| | /\ ___/
2024-08-20T05:57:53.915502375Z \____|__ /_____ \____/ |__| \___ >
2024-08-20T05:57:53.915507176Z / / /
2024-08-20T05:57:53.915511976Z A P P S E R V I C E O N L I N U X
2024-08-20T05:57:53.915516676Z
2024-08-20T05:57:53.915521376Z Documentation: http://aka.ms/webapp-linux
2024-08-20T05:57:53.915529576Z Python 3.8.19
2024-08-20T05:57:53.915536477Z Note: Any data outside '/home' is not persisted
2024-08-20T05:57:54.221285535Z Starting OpenBSD Secure Shell server: sshd.
2024-08-20T05:57:54.235160933Z WEBSITES_INCLUDE_CLOUD_CERTS is not set to true.
2024-08-20T05:57:54.265297413Z App Command Line not configured, will attempt auto-detect
2024-08-20T05:57:54.265793631Z Launching oryx with: create-script -appPath /home/site/wwwroot -output /opt/startup/startup.sh -virtualEnvName antenv -defaultApp /opt/defaultsite
2024-08-20T05:57:54.292483387Z Could not find build manifest file at '/home/site/wwwroot/oryx-manifest.toml'
2024-08-20T05:57:54.292508088Z Could not find operation ID in manifest. Generating an operation id...
2024-08-20T05:57:54.292513388Z Build Operation ID: b6e4f53f-a160-4836-81df-40a78959b714
2024-08-20T05:57:54.395411376Z Oryx Version: 0.2.20240619.2, Commit: cf006407a02b225f59dccd677986973c7889aa50, ReleaseTagName: 20240619.2
2024-08-20T05:57:54.398960704Z Detected an app based on Django
2024-08-20T05:57:54.399159411Z Generating `gunicorn` command for 'project.wsgi'
2024-08-20T05:57:54.410518018Z Writing output script to '/opt/startup/startup.sh'
2024-08-20T05:57:54.427810538Z WARNING: Could not find virtual environment directory /home/site/wwwroot/antenv.
2024-08-20T05:57:54.427831338Z WARNING: Could not find package directory /home/site/wwwroot/__oryx_packages__.
2024-08-20T05:57:54.970237380Z [2024-08-20 05:57:54 +0000] [48] [INFO] Starting gunicorn 22.0.0
2024-08-20T05:57:54.987807809Z [2024-08-20 05:57:54 +0000] [48] [INFO] Listening at: http://0.0.0.0:8000 (48)
2024-08-20T05:57:54.987844111Z [2024-08-20 05:57:54 +0000] [48] [INFO] Using worker: sync
2024-08-20T05:57:54.997822968Z [2024-08-20 05:57:54 +0000] [57] [INFO] Booting worker with pid: 57
2024-08-20T05:57:55.045597781Z [2024-08-20 05:57:55 +0000] [57] [ERROR] Exception in worker process
2024-08-20T05:57:55.045636382Z Traceback (most recent call last):
2024-08-20T05:57:55.045643782Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/arbiter.py", line 609, in spawn_worker
2024-08-20T05:57:55.045658983Z worker.init_process()
2024-08-20T05:57:55.045664583Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
2024-08-20T05:57:55.045683084Z self.load_wsgi()
2024-08-20T05:57:55.045688584Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
2024-08-20T05:57:55.045694184Z self.wsgi = self.app.wsgi()
2024-08-20T05:57:55.045699484Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
2024-08-20T05:57:55.045704784Z self.callable = self.load()
2024-08-20T05:57:55.045710085Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
2024-08-20T05:57:55.045715485Z return self.load_wsgiapp()
2024-08-20T05:57:55.045720885Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
2024-08-20T05:57:55.045726285Z return util.import_app(self.app_uri)
2024-08-20T05:57:55.045731885Z File "/opt/python/3.8.19/lib/python3.8/site-packages/gunicorn/util.py", line 371, in import_app
2024-08-20T05:57:55.045737786Z mod = importlib.import_module(module)
2024-08-20T05:57:55.045743086Z File "/opt/python/3.8.19/lib/python3.8/importlib/__init__.py", line 127, in import_module
2024-08-20T05:57:55.045748486Z return _bootstrap._gcd_import(name[level:], package, level)
2024-08-20T05:57:55.045753786Z File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
2024-08-20T05:57:55.045759786Z File "<frozen importlib._bootstrap>", line 991, in _find_and_load
2024-08-20T05:57:55.045765487Z File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
2024-08-20T05:57:55.045771387Z File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
2024-08-20T05:57:55.045776787Z File "<frozen importlib._bootstrap_external>", line 843, in exec_module
2024-08-20T05:57:55.045782087Z File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2024-08-20T05:57:55.045787187Z File "/home/site/wwwroot/project/wsgi.py", line 12, in <module>
2024-08-20T05:57:55.045792588Z from django.core.wsgi import get_wsgi_application
2024-08-20T05:57:55.045797988Z ModuleNotFoundError: No module named 'django'
2024-08-20T05:57:55.046148100Z [2024-08-20 05:57:55 +0000] [57] [INFO] Worker exiting (pid: 57)
2024-08-20T05:57:55.107735008Z [2024-08-20 05:57:55 +0000] [48] [ERROR] Worker (pid:57) exited with code 3
2024-08-20T05:57:55.107770709Z [2024-08-20 05:57:55 +0000] [48] [ERROR] Shutting down: Master
2024-08-20T05:57:55.107777009Z [2024-08-20 05:57:55 +0000] [48] [ERROR] Reason: Worker failed to boot.
2024-08-20 05:57:54,978 [MainThread] [DEBUG] : Initializating AppServiceAppLogging
2024-08-20 05:57:54,982 [Thread-1 ] [DEBUG] : Did not find any previously bound socket
2024-08-20 05:57:54,983 [MainThread] [DEBUG] : Initialized AppServiceAppLogging
2024-08-20T05:57:53.623Z INFO - Starting container for site
2024-08-20T05:57:53.641Z INFO - docker run -d --expose=8000 --name project-app-development_0_4c6a7e4b -e WEBSITE_USE_DIAGNOSTIC_SERVER=false -e PORT=8000 -e WEBSITES_PORT=8000 -e WEBSITE_SITE_NAME=project-app-development -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=project-app-development.azurewebsites.net -e WEBSITE_INSTANCE_ID=8a9506920697ea08e988fb00cb7a286fb2bda894a9cbfd61c5690d00f38d01a6 -e HTTP_LOGGING_ENABLED=1 appsvc/python:3.8-bullseye_20240619.2.tuxprod
2024-08-20T05:57:55.010Z INFO - Initiating warmup request to container project-app-development_0_4c6a7e4b for site project-app-development
2024-08-20T05:57:56.129Z ERROR - Container project-app-development_0_4c6a7e4b for site project-app-development has exited, failing site start
2024-08-20T05:57:56.140Z ERROR - Container project-app-development_0_4c6a7e4b didn't respond to HTTP pings on port: 8000, failing site start. See container logs for debugging.
2024-08-20T05:57:56.145Z INFO - Stopping site project-app-development because it failed during startup.
Нет файла dockerfile, добавление project.wsgi сюда, в заявку.
the zip file never arrives to Appservice from devops; either azure pipelines or github actions.
можете ли вы рассказать подробнее об этой проблеме? Вы имеете в виду, что файлы в службе приложений Azure не изменяются после запуска конвейера? С другой стороны, судя по исходному описанию, вы получаете сообщение об ошибке в Azure Pipelines. Можете ли вы поделиться своим определением конвейера вместо действия github?
Судя по сообщению об ошибке в исходном сообщении, похоже, что порт 8000 не может подключиться. Вы можете попробовать установить параметры приложения: PORT
и WEBSITES_PORT
на 8000
в Службе приложений Azure, чтобы открыть порт 8000. Затем вы можете перезапустить службу приложений и проверить, может ли она внести какие-либо изменения.
Я установил и PORT, и WEBSITES_PORT, ничего не изменилось. Я думаю, что в моем случае развертывание неправильно использует развертывание zip и извлечение из AppService.
@london_utku, можете ли вы поделиться определением лазурных конвейеров? Поскольку исходное описание относится к конвейеру Azure DevOps.
Я попробовал все: Azure Pipelines, Github Actions, App Service Deployment. Ничего не работает. Я обновил билет со всеми связанными файлами yaml.
@london_utku Спасибо за ваши новости. Я больше знаком с Azure Pipelines. Итак, я проверил конвейеры YAML и обнаружил некоторые проблемы. вы можете обратиться к моему ответу, чтобы внести изменения в конвейер YAML Azure DevOps и снова развернуть веб-приложение.
Я проверил ваш образец конвейера YAML Azure DevOps. У него есть некоторые проблемы, из-за которых служба приложений не сможет работать.
В исходном журнале отображается ошибка: ModuleNotFoundError: No module named 'project'
. Причина проблемы в том, что zip-пакет не содержит необходимых пакетов Python.
Вы можете внести следующие изменения в образец YAML конвейера Azure:
1. Вам необходимо изменить команду для установки пакетов Python:
От
pip install -r requirements.txt
К
pip install --target = "./.python_packages/lib/site-packages" -r ./requirements.txt
В этом случае необходимые пакеты будут установлены в правильную папку и добавлены в zip-архив.
2. Вам необходимо установить для поля includeRootFolder значение false в задаче ArchiveFiles@2.
Если для значения установлено значение true, в zip-пакет будет включена родительская папка: s
. Это приведет к проблеме с путем в веб-приложении. Поэтому нам нужно установить значение false.
Вот пример:
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
Полный пример YAML конвейера:
trigger:
- $(feature-branch)
variables:
azureServiceConnectionId: '-db5f-4993-91f8-85f3a75cb357'
webAppName: 'project-app-development'
vmImageName: 'ubuntu-latest'
environmentName: 'project-app-development'
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.8'
system.debug: true
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m virtualenv env
source env/bin/activate
python -m pip install --upgrade pip
pip install --target = "./.python_packages/lib/site-packages" -r ./requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : project-app-development'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Для получения более подробной информации вы можете обратиться к этому документу: Используйте Azure Pipelines для создания и развертывания веб-приложения Python в Службе приложений Azure
Обновлять:
Ошибка: не удалось развернуть пакет с помощью ZIP Deploy. Обратитесь к журналам для получения более подробной информации.
На основании сообщения об ошибке вы можете попробовать следующие методы:
1. Перейдите к настройкам приложения в веб-приложении Azure и установите переменную: от WEBSITE_RUN_FROM_PACKAGE
до 1
.
2. Перейдите в Службу приложений -> Центр развертывания и нажмите кнопку «Отключить», чтобы отключить существующие подключения.
Например:
Затем вы можете снова развернуть веб-приложение Azure и проверить результат.
Обновление1:
ModuleNotFoundError: нет модуля с именем «django».
Я могу воспроизвести ту же проблему в своем веб-приложении для Linux.
Чтобы решить эту проблему, вы можете выполнить следующие шаги:
Шаг 1. Удалите переменную: SCM_DO_BUILD_DURING_DEPLOYMENT
в AppSettings веб-приложения Azure. В этом случае будут напрямую использованы существующие пакеты в zip-архиве.
Шаг 2. Измените команду установки pip:
От:
pip install --target = "./.python_packages/lib/site-packages" -r ./requirements.txt
К:
pip install --target = "./antenv/lib/python3.8/site-packages" -r ./requirements.txt
Образец YAML:
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install --target = "./antenv/lib/python3.9/site-packages" -r ./requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
В журнале службы приложений Azure путь к Python по умолчанию: /home/site/wwwroot/antenv/lib/python3.8.9/site-packages
. Нам нужно настроить путь в пакете, чтобы он соответствовал пути Python по умолчанию.
Затем вы можете запустить конвейер для повторного развертывания веб-приложения.
Если я установлю «includeRootFolder: false», сборка завершится неудачно, как показано ниже: «Ошибка: не удалось развернуть пакет с помощью ZIP Deploy. Для получения более подробной информации обратитесь к журналам». Вы можете найти целые журналы здесь, в обновленной части.
@london_utku У меня нет доступа к ссылке в обновленной части. Можете ли вы поделиться с нами журналом ошибок в вопросе? Для includeRootFolde
должно быть установлено значение false. Затем вы сможете получить правильный путь к папке в веб-приложении. Вы можете обратиться к обновлению в моем ответе, попытаться внести изменения и проверить результат.
Я еще раз обновил ссылки, теперь вы их видите?
Я установил includeRootFolder: false, и всякий раз, когда я это делаю, сборка завершается с ошибкой.
@london_utku Да. Я вижу это сейчас. Можете ли вы попытаться выполнить действия, описанные в обновленном содержании ответа, чтобы внести изменения в службу вашего веб-приложения? Затем вы можете снова развернуть веб-приложение и проверить результат.
Я уже внес эти изменения, включая настройку includeRootFolder : true — для этого вы можете проверить журналы 488 и includeRootFolder : false с журналами 489.
Я установил WEBSITE_RUN_FROM_PACKAGE : 1 в настройках среды службы приложений (раньше это было WEBSITE_RUN_FROM_PACKAGE : true), затем отключил соединение в Центре развертывания. Сейчас он строится, но у меня мало надежд.
@london_utku Из журнала я вижу, что для переменной: WEBSITE_RUN_FROM_PACKAGE
установлено значение true. Вы можете изменить его, установив значение 1
. И я не могу увидеть в журнале, отключили ли вы соединение в центре развертывания веб-приложения Azure. Это необходимо сделать на странице пользовательского интерфейса веб-приложения Azure. Но я могу подтвердить, что код YAML в журнале 489 должен быть правильным. Я вижу изменения кода YAML.
Поскольку вы внесли изменения, вы можете дождаться завершения сборки и проверить результат.
Я изменил это: WEBSITE_RUN_FROM_PACKAGE: 1 + "pip install --target = "./.python_packages/lib/site-packages" -r ./requirements.txt" и снова отключить + развернуть. И теперь сборка прошла успешно, однако в журналах службы приложений я вижу следующее: ModuleNotFoundError: нет модуля с именем «django».
@london_utku Дай я проверю. Я знаю эту проблему.
Хотя сборка выглядит нормально, я вижу такие журналы: ##[debug]ZIP DEPLOY - Выполнение операции после zip-развертывания: -54cd- => 49117 ##[debug]CLIENT_RESETSTREAMONRETRY=undefined ##[debug][ GET]https://$project-app-development:***@project-app-development.scm.azurewebsites.net/api/vfs/site/deployments/-54cd21b-/manifest # #[debug]Не удалось проанализировать ответ: {} ##[debug]Ответ: не определено ##[debug]getFileContent. Код состояния: 404 — не найден ##[debug]ZIP DEPLOY — выполнена операция после развертывания zip. ##[debug]Развертывание успешно завершено: развертывание веб-приложения Azure : project-app-development
Я обновил последние журналы Appservice.
@london_utku Кажется, что приведенный выше журнал взят из журнала отладки Azure Pipelines, верно? Если да, вы можете проверить файлы в веб-приложении Linux через kudo и подтвердить, ожидаются ли эти файлы. Если файлы верны, процесс развертывания должен пройти успешно.
По поводу ошибки: ModuleNotFoundError: No module named 'django'
, позвольте мне провести тест. Я получал эту ошибку раньше во время моего теста. Я проверю это дальше.
Файлы не обновляются с учетом моих последних изменений, эти файлы остаются там, поскольку у меня было несколько успешных попыток с действиями Github.
Я проверил через newUI в Kudo Access через webUI, у меня есть SSH-подключение к экземпляру, но файлы не новые.
На что мне установить PYTHONPATH?
Я отключил эти SCM_DO_BUILD_DURING_DEPLOYMENT, WEBSITE_RUN_FROM_PACKAGE. Сборка теперь занимает около 12 минут (раньше это было около 2 минут). Журналы изменились, однако файловая система службы приложений осталась прежней. Вы можете проверить логи 496 здесь filetransfer.io/data-package/FFthMYut#link
@london_utku Обратитесь к обновлению 1 в моем ответе. Я могу воспроизвести ту же проблему и найти решение проблемы, связанной с тем, что модуль не найден. Нам нужно удалить SCM_DO_BUILD_DURING_DEPLOYMENT
и изменить путь к пакету в zip-архиве. Затем веб-приложение найдет пакет django.
Причина увеличения времени развертывания заключается в том, что zip-пакет содержит все необходимые пакеты Python. Размер молнии увеличится. Предыдущее развертывание не содержит пакета Python, поэтому для его развертывания требуется меньше времени.
Вам это кажется правильным? - сценарий: | python -m virtualenv env source env/bin/activate python -m pip install --upgrade pip pip install --target = "./antenv/lib/python3.9/site-packages" -r ./requirements.txtworkDirectory: $(projectRoot) displayName: «Требования для установки»
Я уже удалил SCM_DO_BUILD_DURING_DEPLOYMENT
@london_utku Ой, извини. опечатка в моем ответе. Вам необходимо установить python3.8, поскольку ваше веб-приложение использует Python 3.8.9. - сценарий: | python -m virtualenv env source env/bin/activate python -m pip install --upgrade pip pip install --target = "./antenv/lib/python3.8/site-packages" -r ./requirements.txtworkDirectory: $(projectRoot) displayName: «Требования для установки. Это должно быть правильное значение.
Но первая команда — python -m virtualenv env, затем мы упоминаем antenv, вам это кажется правильным?
Я также проверил журнал, которым вы поделились. Я заметил, что он показывает журналы: Копирование файла: '.python_packages/lib/site-packages/Django-3.1.dist-info/REQUESTED' Это означает, что файлы были загружены в ваше веб-приложение Azure. Файлы вашего веб-приложения должны были быть обновлены, а не сохранять старые. И еще одна вещь, которую вам нужно проверить, это то, используете ли вы слот развертывания. Если да, вам необходимо указать значение слота в задаче веб-приложения Azure, чтобы разрешить развертывание задачи в правильном слоте.
@london_utku Пожалуйста, используйте код yaml в моем обновленном ответе. Вам нужно использовать антенну. Судя по журналу службы приложений, это значение по умолчанию.
Я воспользуюсь вашей командой, а как насчет workDirectory: $(projectRoot)?
@london_utku Можно добавить. Поскольку я использую свой собственный проект, путь отличается от вашего, поэтому я НЕ добавляю это поле задачи. Чтобы избежать недоразумений, я добавил его на основе вашего YAML. Пожалуйста, попробуйте :)
Я не против отсутствия «workingDirectory: $(projectRoot)», эта сборка никогда раньше у меня не работала.
@london_utku Нет проблем. Я думаю, что с этим полем в вашем оригинале проблем нет. Вам просто нужно убедиться, что файл require.txt существует в рабочем каталоге.
Все необходимые файлы уже существуют в файловой системе.
Я удалил поле «workDirectory: $(projectRoot)», поскольку его не было в вашем примере.
@london_utku Хорошо. Пожалуйста, сделайте это и проверьте результат.
Я удалил этот «workingDirectory: $(projectRoot)» и начал сборку, она продолжается уже более 16 минут. Это не кажется правильным. Я вижу, что «workingDirectory: $(projectRoot)» включен в ваш пример, я добавлю его и попробую еще раз.
@london_utku Это может быть нормально для первого развертывания после обновления. Первое развертывание удалит старые файлы и загрузит новые файлы. Время сократится при следующих запусках конвейера. В следующих запусках это будет постепенное развертывание.
Я все еще вижу эту ошибку «ModuleNotFoundError: нет модуля с именем «django»», вы можете проверить журнал: filetransfer.io/manage-package/FFthMYut 500. Вы также можете проверить журналы службы приложений обновления 2.
@london_utku Можете ли вы проверить, существует ли пакет django в веб-приложении? перейдите по адресу home/site/wwwroot/antenv/lib/python3.8/site-packages. И я не могу увидеть последний журнал.
kudu_ssh_user@1ff3f91eb6f0:/$ ls -la /home/site/wwwroot/antenv/lib всего 0 drwxrwxrwx 2 никто nogroup 0 20 августа 08:39 . drwxrwxrwx 2 никто не nogroup 0 августа 18 17:35 .. drwxrwxrwx 2 никто не nogroup 0 августа 18 17:34 Python3.12 drwxrwxrwx 2 никто не nogroup 0 августа 20 08:39 python3.8 drwxrwxrwx 2 никто не nogroup 0 августа 18 21:26 python3. 9
$ ls -la /home/site/wwwroot/antenv/lib/python3.8/site-packages/ всего 5 drwxrwxrwx 2 никто nogroup 0 20 августа 08:39 _distutils_hack -rwxrwxrwx 1 никто nogroup 152 20 августа 08:36 distutils-precedence .pth drwxrwxrwx 2 никто nogroup 0 20 августа 08:39 pip drwxrwxrwx 2 никто nogroup 0 20 августа 08:40 pip-24.2.dist-info drwxrwxrwx 2 никто nogroup 0 20 августа 08:40 pkg_resources drwxrwxrwx 2 никто nogroup 0 20 08: 40 setuptools drwxrwxrwx 2 никто nogroup 0 20 августа 08:40 setuptools-56.0.0.dist-info
В python3.8 нет, но в python3.9 есть все каталоги.
Я изменил конфигурацию службы приложений, yaml Azure Devops на 3.9 и начал новую сборку.
Из последнего журнала службы приложений: Updated PYTHONPATH to '/opt/startup/app_logs:/home/site/wwwroot/antenv/lib/python3.8/site-packages'
Я вижу, что для пути Python указан правильный путь. Вы можете проверить, существуют ли пакеты по соответствующему пути.
Это местоположение не существует: /home/site/wwwroot/antenv/lib/python3.8/site-packages Но оно существует: /home/site/wwwroot/antenv/lib/python3.9/site-packages
Я пытаюсь использовать каталог python3.9.
@london_utku Продолжайте делать это и проверьте, будет ли это иметь какое-то значение.
Вопрос: Почему каталоги python3.8, python3.9 и python3.12 существуют одновременно. Почему он отслеживает все старые сборки? Можем ли мы это сбросить?
@london_utku Одной из возможных причин проблемы может быть то, что виртуальный каталог в веб-приложении не удаляет старые файлы. Он всегда поддерживает постепенное развертывание. Вы можете попытаться очистить все файлы и снова выполнить развертывание, чтобы удалить старые файлы.
Как мне очистить все файлы и снова выполнить развертывание?
Вы можете удалить все элементы веб-приложения в kudo и снова выполнить развертывание. Или вы можете создать новое веб-приложение для тестирования. Но сейчас делать это не рекомендуется. Мы можем позволить текущему конвейеру работать, а затем полностью переразвернуть его.
Когда вы говорите: «Вы можете удалить все элементы веб-приложения в kudo и снова выполнить развертывание», вы имеете в виду, что мне нужно вручную удалить все эти каталоги? А что насчет будущего, когда я делаю новую сборку, я хочу, чтобы эта сборка была абсолютно чистой, независимой от предыдущей. Почему копируется поверх предыдущей сборки? Это переопределяет старые файлы? Это не кажется правильной стратегией, должен быть способ каждый раз создавать чистую сборку. Вот почему мы хотим использовать CI/CD.
@london_utku мы можем добавить задачи для выполнения этого действия в ci/cd. Я помогу тебе сделать это завтра. А как насчет текущего вопроса?
После непрерывной работы в течение 10 дней да, страница администратора Django видна без CSS.
Каким-то образом python3.8 исчез сам по себе: udu_ssh_user@71a50eb85da1:~/site/wwwroot/antenv$ cd lib kudu_ssh_user@71a50eb85da1:~/site/wwwroot/antenv/lib$ ls -la total 0 drwxrwxrwx 2 никто nogroup 0 20 августа 09: 18 . drwxrwxrwx 2 никто nogroup 0 18 августа 17:35 .. drwxrwxrwx 2 никто nogroup 0 18 августа 17:34 python3.12 drwxrwxrwx 2 никто nogroup 0 18 августа 21:26 python3.9 kudu_ssh_user@71a50eb85da1:~/site/www root/antenv / lib$
@london_utku, ты имеешь в виду, что веб-приложение теперь может работать? Или все еще есть какие-то проблемы?
Да, после исправления проблем с секретным хранилищем мои изменения теперь доступны. Спасибо. Однако как только я настроил все на работу, месячные 1800 минут Azure Devops закончились, и теперь я не могу продолжить развертывание.
Остается только статический контент из приложения Django.
Тем не менее, все отдельные сборки занимают около 15+ минут. Интересно, есть ли способ снизить эту сумму? А также способ каждый раз сбрасывать содержимое сборки.
@london_utku Завтра я помогу вам разобраться в дальнейших вопросах и сообщу вам обновленную информацию.
Привет, можете ли вы проверить путь
project.wsgi
, соответствует ли он тому месту, куда его поместил докер. Я предполагаю, что у вас естьDockerFile
.