Служба приложений Azure для Django не работает с Azure Devops Pipeline

У меня есть служба приложений, работающая в 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.

🤔 А знаете ли вы, что...
Python позволяет создавать сценарии для автоматизации задач и обработки данных.


1
111
1

Ответ:

Решено

Я проверил ваш образец конвейера 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 по умолчанию.

Затем вы можете запустить конвейер для повторного развертывания веб-приложения.