使用 Django Collectstatic 自动部署到 GitHub Pages [GitHub Actions 初学者]

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

我有两个 GitHub Actions 工作流程。一个的任务是部署 prod 分支的静态资产,另一个的任务是运行 Django

collectstatic
命令。

我想合并两个进程以自动部署新的静态元素,因此我不必每次在推送更改之前都运行

collectstatic
。问题是我不知道如何做。

部署静态资产的工作流程

# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["prod"]

  pull_request:
    branches: ["prod"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # Single deploy job since we're just deploying
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: 'prod'
      - name: Setup Pages
        uses: actions/configure-pages@v5
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: './assets'
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

django 的工作流程

collectstatic

name: Django CI

on:
  push:
    branches: [ "prod" ]
  pull_request:
    branches: [ "prod" ]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.12]

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v3
      with:
        python-version: ${{ matrix.python-version }}
    - name: Setup Poetry
      # You may pin to the exact commit or the version.
      # uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec
      uses: Gr1N/setup-poetry@v9
      with:
        # Allow to install prerelease versions of Poetry
        poetry-preview: false # optional, default is false
        # Poetry version to use, if version is not provided then latest stable version will be used
        poetry-version: 1.8.3 # optional
    - name: Install Dependencies
      run: poetry install
    - name: Collect static
      env:
        SECRET_KEY: ${{ secrets.SECRET_KEY }}
        # All the secret variables ...
      run: poetry run python manage.py collectstatic --noinput

PS. 我在项目中使用诗歌,因此我使用 GitHub 操作 Setup Poetry 来运行 Python 命令。

django github-actions github-pages collectstatic
1个回答
0
投票

我在 ChatGPT 的帮助下解决了这个问题。看起来我可以使用 jobs 在同一个文件中定义这两个任务。第一个作业收集静态文件并将其作为工件上传,第二个作业下载它们然后部署到 GitHub Pages。

这是代码:

name: Collect static and deploy to Pages

on:
  push:
    branches: ["prod"]
  pull_request:
    branches: ["prod"]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write
  
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  collectstatic:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          ref: 'prod'

      - name: Set up Python
        uses: actions/setup-python@v3
        with:
          python-version: 3.12

      - name: Setup Poetry
        uses: Gr1N/setup-poetry@v9
        with:
          poetry-preview: false
          poetry-version: 1.8.3

      - name: Install dependencies
        run: poetry install

      - name: Collect static
        env:
          SECRET_KEY: ${{ secrets.SECRET_KEY }}
          # ...
        run: poetry run python manage.py collectstatic --noinput

      - name: Archive static files
        uses: actions/upload-artifact@v3
        with:
          name: assets
          path: assets/

  deploy:

    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: collectstatic
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: 'prod'

      - name: Download static files
        uses: actions/download-artifact@v3
        with:
          name: assets
          path: ./assets

      - name: Setup Pages
        uses: actions/configure-pages@v5

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: './assets'

      - name: Deploy to GitHub Pages
        id: production
        uses: actions/deploy-pages@v4

我不确定操作和工件应该如何工作,但也许我可以在一项工作中完成它,而不需要将文件作为工件上传。

我很乐意阅读其他答案或更正;同时,这解决了我的问题。

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