























一篇讲清 GitHub Pages 为什么能部署, 为什么会失败, 以及最新的可用边界和操作方式.
阅读本文前, 你只需要知道这几件事.
如果我们更习惯传统 LNMP, 可以把 GitHub Pages 理解成一套 GitHub 托管的静态网站发布系统. 它省掉了自己维护 Nginx, PHP-FPM, SSL 证书和服务器磁盘的那部分工作.
GitHub Pages 本质上是把仓库里的静态文件发布成一个公开网站.
它有两种常见模式.
对常见的文档站工具, 博客生成器, 静态网站生成器来说, 新模式更常见, 因为我们需要先生成站点文件, 再发布.
实践里碰到这类报错时, 问题往往不在文档内容本身, 而是在 Pages 的发布链路上.
configure-pages 会报 Get Pages site failed.github-pages artifact, deploy-pages 会拒绝部署.GitHub Pages 的发布流程可以理解成 4 步.
graph TD
A[Push to repo] --> B[GitHub Actions trigger]
B --> C[Install dependencies]
C --> D[Build static site]
D --> E[Upload Pages artifact]
E --> F[Deploy artifact]
F --> G[Public GitHub Pages URL]
如果把整个流程拆开看, 真正决定是否发布成功的通常不只是 build 本身, 还包括下面两层状态.
再往下拆, 还有一个很重要的概念, 就是 environment.
GitHub Pages 的 deploy job 通常会使用 github-pages environment, 这样 GitHub 才能记录这次部署.
下面这份配置可以看作一套适合大多数 Node.js 静态站点项目的最小工作流思路.
name: Deploy to GitHub Pages
on:
push:
branches: [master]
workflow_dispatch:
env:
PAGES_ARTIFACT_NAME: github-pages-${{ github.run_id }}-${{ github.run_attempt }}
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
cache-dependency-path: site/package-lock.json
- name: Install dependencies
working-directory: site
run: npm ci
- name: Build
working-directory: site
run: npm run build
- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@v5
with:
name: ${{ env.PAGES_ARTIFACT_NAME }}
path: site/build
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- id: deployment
uses: actions/deploy-pages@v5
with:
artifact_name: ${{ env.PAGES_ARTIFACT_NAME }}
这里有几个地方比较值得留意.
permissions 里必须有 pages: write 和 id-token: write.build 和 deploy 要用 needs 串起来.path 必须指向 build 后的目录, 比如项目生成出来的 dist/, build/, public/ 等目录.run_id 和 run_attempt, 这样可以避免同名 artifact 冲突.如果仓库还是 private, 且账号是 Free, 那么即使 workflow 写对了, 也还是没法真正启用 Pages.
这两件事其实不能直接画等号. build 通过, 只说明站点构建成功, 不代表 Pages 已经部署成功.
这点比较容易误判. 根据 GitHub 官方规则, public repo 的 Free 计划可以用 Pages, private repo 需要 Pro, Team, Enterprise Cloud, 或 Enterprise Server.
很多时候未必如此. 有时只是旧的部署失败, 最新绿色 run 才更能代表当前站点状态.
很多情况下也不见得. 像 Multiple artifacts named "github-pages" 这类问题, 往往就是同一个 run 里重复产物导致的. 遇到这种情况时, 直接跑一个全新的 workflow run 通常更省事.
下面这个案例就很有代表性.
GitHub Actions.configure-pages 相关报错, 说明 Pages 站点还没准备好.对传统 LNMP 用户来说, 这个流程可以类比成.
npm run build 就像本地生成 public/ 或 dist/.upload-pages-artifact 就像把静态文件打包上传.deploy-pages 就像把打包结果切到线上发布目录.如果后面还要给别的文档站部署 Pages, 这套思路基本都可以直接复用.
结合 GitHub 官方文档, 下面这些规则值得特别留意.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。