Hexo 双仓库 GitHub Actions 自动化部署踩坑记录
文章目录
一、双仓库部署架构说明
早期采用 Hexo 博客经典双仓库 CI/CD 架构:
源码仓库:存放 Hexo 源码、配置、Markdown 文章,日常开发与提交
Pages 静态仓库:
用户名.github.io专属仓库,用于托管最终生成的静态页面、对外提供博客访问服务
期望实现:本地推送源码仓库 main 分支 → GitHub Actions 自动构建静态资源 → 跨仓库自动发布到 Pages 仓库,完成博客更新。
二、核心问题:跨仓库部署 403 权限拒绝
配置完成后,流水线持续报错:
remote: Permission to xxx.github.io.git denied to github-actions[bot].
fatal: unable to access ... The requested URL returned error: 403
问题根因:
GitHub 内置的
GITHUB_TOKEN仅对当前仓库有权限,无法跨仓库推送代码;双仓库模式下,Actions 机器人需要操作另一个独立仓库,直接触发权限拦截,返回 403;
即使两个仓库归属同一账号、存在 Fork 关联,Fork 工作流也无法解决跨仓写入权限问题,官方安全策略严格限制跨仓库资源写入。
三、双仓库模式衍生痛点
1. 权限配置繁琐、极易出错
必须手动创建永久 PAT 令牌、配置 repo 全量权限、在源码仓库配置 Secrets,步骤冗余。一旦令牌过期、权限缺失、Secret 配置错误,流水线直接挂掉,无兜底机制。
2. 分支保护冲突,部署规则受限
Pages 仓库默认 main 分支受系统保护,禁止同分支覆盖写入。必须额外修改部署分支为 gh-pages,同时同步修改 GitHub Pages 访问分支配置,增加大量适配成本。
3. 故障排查成本高
跨仓库报错模糊,常见 403 权限拒绝、git 128 异常、分支冲突、资源路径404等连锁问题,新手极难定位根因,整体稳定性极差。
四、最终解决方案:弃用双仓库,改用单仓库部署
对比踩坑成本后,放弃双仓库架构,切换为单仓库标准工作流:
唯一仓库:
用户名.github.iomain分支:存放全部 Hexo 源码、文章、配置(日常迭代提交)gh-pages分支:Actions 自动生成、自动推送静态资源
优势:
无需手动配置 PAT 令牌,内置
GITHUB_TOKEN完全够用;无跨仓库权限问题,彻底解决 403 报错;
流程极简、社区标准、稳定性极高,几乎零运维;
分支隔离规范,源码与静态资源互不干扰,无覆盖风险。
五、总结
Hexo 双仓库自动化部署方案理论可行,实际落地坑极多,核心瓶颈为 GitHub 跨仓库权限机制限制,衍生大量配置、权限、分支冲突问题。对于个人博客场景,单仓库 + main/gh-pages 双分支隔离 是最优、最稳、最省心的 CI/CD 方案。
(注:文档部分内容可能由 AI 生成)