You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Publii同步覆盖GitHub后,如何实现Azure静态网站自动部署?

静态HTML仓库自动部署最优方案

针对Publii全量覆盖GitHub仓库导致部署工作流丢失的问题,以下是几个可行的解决方案,按推荐优先级排序:

方案一:双仓库分离架构(最推荐)

通过两个仓库分别存储静态内容和部署配置,彻底避免覆盖冲突:

  • 仓库A(静态文件库):仅用于接收Publii推送的静态HTML内容,无需任何配置文件。
  • 仓库B(部署配置库):专门存放Azure静态Web Apps的部署工作流文件,独立于静态内容更新。

操作步骤

  1. 创建新的GitHub仓库A,作为静态文件的专属存储库。
  2. 在Publii中配置同步目标为仓库A,确保仅推送public/rendered目录下的内容。
  3. 在仓库B中创建部署工作流文件.github/workflows/azure-deploy.yml,示例内容如下:
name: Deploy to Azure Static Web Apps
on:
  # 监听仓库A的推送事件,需通过仓库A的推送触发该工作流
  repository_dispatch:
    types: [publii-published]
  # 可选:允许手动触发部署
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取静态文件仓库内容
        uses: actions/checkout@v4
        with:
          repository: 你的用户名/仓库A名称
          path: static-files
          token: ${{ secrets.GH_PAT }} # 需提前创建拥有仓库A读取权限的GitHub PAT

      - name: 部署到Azure静态Web Apps
        uses: Azure/static-web-apps-deploy@v1
        with:
          azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          action: "upload"
          app_location: "./static-files" # 指向仓库A的静态文件目录
  1. 配置仓库A的推送触发:由于Publii会覆盖仓库A的所有文件,无法直接在仓库A中配置Actions,可通过Publii的自定义脚本功能,在推送完成后调用GitHub API向仓库B发送repository_dispatch事件,触发部署工作流。

方案二:单仓库双分支策略

在同一个仓库中用两个分支分离静态内容和部署配置:

  • content分支:仅接收Publii推送的静态内容,无任何配置文件。
  • main分支:存放Azure部署工作流及其他需要保留的配置文件,不受Publii更新影响。

操作步骤

  1. 在现有仓库中创建content分支,初始可复制当前静态文件内容。
  2. 在Publii中配置同步目标为该仓库的content分支,确保仅推送public/rendered目录内容。
  3. 切换到main分支,创建部署工作流文件.github/workflows/azure-deploy.yml,示例内容:
name: Deploy to Azure Static Web Apps
on:
  # 监听content分支的推送事件
  push:
    branches: [content]
  # 可选:允许手动触发
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取content分支的静态内容
        uses: actions/checkout@v4
        with:
          ref: content

      - name: 部署到Azure静态Web Apps
        uses: Azure/static-web-apps-deploy@v1
        with:
          azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          action: "upload"
          app_location: "." # 静态文件位于当前目录
  1. 配置Azure静态Web Apps的部署源为main分支的工作流,后续每次Publii推送到content分支时,都会自动触发部署。

方案三:本地Git钩子恢复工作流

通过本地Git的post-push钩子,在Publii推送完成后自动恢复被覆盖的工作流文件:

  1. 找到本地Publii网站项目的.git/hooks目录(需显示隐藏文件)。
  2. 创建post-push文件(无后缀),添加以下脚本:
#!/bin/bash
# 拉取最新仓库内容避免冲突
git pull origin main
# 从本地备份目录复制工作流文件到仓库
cp /本地备份路径/deploy.yml .github/workflows/deploy.yml
# 提交并推送恢复的工作流文件
git add .github/workflows/deploy.yml
git commit -m "恢复部署工作流文件"
git push origin main
  1. 给post-push文件添加可执行权限:chmod +x post-push

该方案依赖本地环境,仅适合单人开发场景,换设备需重新配置。


内容的提问来源于stack exchange,提问作者Steven Vanden Broucke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:18:23