使用 Github Actions 将一个特定文件夹从 GitHub 存储库部署到 Azure Web App

问题描述 投票:0回答:1

我有一个 GitHub 存储库,其中在存储库的根目录下包含一个用于前端的

client
文件夹和一个用于后端的
server
文件夹。我们正在同一应用程序服务计划中将这两个文件夹分别部署到它们自己的 azure Web 应用程序中。我有一个 github action yaml 文件,它将
server
文件夹的内容部署到 Web 应用程序,但我们想在 python 后端使用绝对导入(pylint 和其他一些东西似乎喜欢这样),所以我们所有的导入看起来像
from server.module import something
,它在 azure 上失败,因为没有
server
文件夹,并且
module
文件夹放置在 Web 应用服务器上的默认根文件夹中。如果我们将导入更改为
from module import something
一切正常。

将此 python 应用程序部署到 Web 应用程序同时仍然能够使用绝对导入的最佳方法是什么?我假设如果我们可以将所有内容放入

server
文件夹中并更改启动命令以反映
app.py
的新路径,一切都会起作用,但事实证明,执行此操作很困难一直是一个问题。这就是我的 github 操作 yaml 当前的样子:


on:
  push:
    branches:
      - beta
    paths:
      - 'server/**'
  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.11'

      - name: Create and start virtual environment
        run: |
          python -m venv venv
          source venv/bin/activate
        working-directory: ./server
      
      - name: Install dependencies
        run: pip install -r requirements.txt
        working-directory: ./server
        
      # Optional: Add step to run tests here (PyTest, Django test suites, etc.)

      - name: Upload artifact for deployment jobs
        uses: actions/upload-artifact@v4
        with:
          name: python-app
          path: |
            ./server
            !venv/

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    
    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v4
        with:
          name: python-app
          path: ./server
      - name: Deploy web App using GH Action azure/webapps-deploy
        uses: azure/webapps-deploy@v3
        with:
          app-name: <our_app_name>
          slot-name: 'production'
          publish-profile: ${{ secrets.BACKEND_PUBLISH_PROFILE }}
          package: ./server```
azure-web-app-service github-actions azure-webapps
1个回答
0
投票

我使用 python 和客户端应用程序创建了简单的服务器应用程序,并通过 GitHub 存储库部署到 Azure Web 应用程序。

下面是完整的项目结构和服务器文件夹,其中包含所有必需的文件,如下所示。

enter image description here

下面是部署特定文件夹的完整 yml。

GitHub/工作流程文件

name: Build and deploy Python app to Azure Web App - kapythonapp
on:
 push:
   branches:
     - main
 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 venv
         source venv/bin/activate
       working-directory: ./server
     - name: Install dependencies
       run: pip install -r requirements.txt
       working-directory: ./server
     - name: Upload artifact for deployment jobs
       uses: actions/upload-artifact@v4
       with:
         name: python-app
         path: |
           ./server
           !venv/
 deploy:
   runs-on: ubuntu-latest
   needs: build
   environment:
     name: 'Production'
     url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
   steps:
     - name: Download artifact from build job
       uses: actions/download-artifact@v4
       with:
         name: python-app
         path: ./server
     - name: 'Deploy to Azure Web App'
       uses: azure/webapps-deploy@v3
       id: deploy-to-webapp
       with:
         app-name: 'kapythonapp'
         slot-name: 'Production'
         publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_B14CED35610D45228B59B7BBAD16C953 }}
         package: ./server

我在应用程序中使用了

from server.module import something
。 py 文件,部署后出现以下错误。

ModuleNotFoundError: No module named 'server'

部署到 Azure Web Apps 时,

server
文件夹的内容直接部署到
site/wwwroot
文件夹,而不是位于
site/wwwroot/server
下。

默认情况下,Azure Web Apps 将应用程序的内容部署到

wwwroot

 目录,该目录充当应用程序的根文件夹。
结果,路径
server.module
不再存在。

如果您的

module

 文件夹位于 
server
 文件夹中并且服务器文件夹是根目录。你不需要定义 
server.module
 .

所以

from module import something

 可以工作,因为 
module folder
 位于已部署应用程序的根目录中。

您可以使用以下 URL 在 kudu 控制台中检查已部署的文件。

https://<AzureWebAppName>.scm.canadacentral-01.azurewebsites.net/newui
我下载了

output.tar.gz

文件夹。

enter image description here

它仅包含服务器文件的内容。

enter image description here

输出

enter image description here

请参阅此

Msdoc 了解绝对导入。

© www.soinside.com 2019 - 2024. All rights reserved.