从私有代码库自动部署Hexo站到GitHub Pages
本文主要参考了 从私有代码库自动部署Hexo站到GitHub Pages, 且本站的自动部署也参考了该文章。
期间作者踩了些雷, 故写了此文章希望能给大家提高帮助。
为什么要自动部署?
-
当你的电脑出现神秘的故障导致不能使用时, 或是当你决定换一台新电脑时, 你本地的博客源码该如何保存呢?
- 答: 可以存到github上!
-
当你每次写完文章, 不仅要部署到网站, 又要提交到仓库保存, 并对此感到很麻烦时该怎么办呢?
- 答: 可以自动部署!
如何自动部署?
准备工作
需要有三个仓库, 下面记作:
-
私有库(private) : 存放网站的源码
-
主题库(private) : 存放被修改过的主题的源码(如果你在博客根目录下有
_config.butterfly.yml
文件并在里面配置博客时, 原始的主题源码也行) -
目标库(public) : GitHub Pages
需要在目标库创建一个Personal Access Token(PAT), 并将其配置在私有库的secret中, 再创建一个工作流的yaml即可。
在私有库中创建Action Workflow Yaml
先来看最终的yaml:
1 | name: Hexo Build & Deploy - Private to Public |
上面的流水线具体做了哪些工作可以去自行查资料。
在私有库创建.github/workflows/main.yaml
并把上面的代码copy进去。
接下来要做的事:
-
配置主题submodule
-
创建Personal Access Token
-
给上面的yaml填空
token: ${{ secrets.MYPAT }}
: 创建PAT MYPATssh-key: ${{ secrets.HEXO_DEPLOY_KEY }}
: 创建 DEPLOY_KEY 从私有库发布到目标库repository-name: xxx/xxx.github.io
: 目标库的地址,即GitHub Page库的地址
配置主题submodule
将你本地博客文件夹下的主题theme/butterfly
fork到自己的github中, 创建另一个私有主题库 myBlogTheme
。同时用两个分支来解决主题的升级问题:master
分支与官方库保持一致,可以fast-forward, v8.5
分支存放修改之后的主题文件与配置。如需更新,则在 v8.5
分支 merge
或 rebase master
。(这里依然同前面, 如果你在博客根目录下有_config.butterfly.yml
文件并在里面配置博客时, 原始的主题源码也行)。
增加submodule的命令如下,它的意思是创建一个submodule并且track它的master
分支。这个被track的分支可以按需修改。
1 | git submodule add -b master <git@github.com:MYSUBMODULE.git> <path/to/MYSUBMODULE> |
我们可以在私有库创建主题库了:
1 | git remote add myBlogTheme git@github.com:xxx/myBlogTheme |
如果遇到这个错误:
1 | 'themes/butterfly' already exists in the index |
在 git submodule add
命令中加入 --force
选项即可。
创建Personal Access Token
创建PAT的主要目的是给私有库访问目标库的权限,可以让私有库的actions推送构建好的代码到目标库中去。
参照 这里 来生成PAT。
记得要勾选下面两个scope: workflow
和 write:packages
。
PAT生成好之后,复制下来,妥善保管留待后用。
在私有库中设置Secret
在私有库中:
Settings -> Secrets -> Actions -> New repository secret
粘贴刚才生成的PAT到value框中,并命名这个secret为 MYPAT
。
创建Deploy Key
这里的Deploy Key用来将生成好的HTML文件从私有库上传到目标库中。而之前的PAT是用于拉取私有库和submodule的代码。
参考 这篇 将生成的deploy key添加到私有库。
最后
记得回到yaml文件中填上原来的空。
总结
完成上述步骤后即可实现从私有代码库自动部署Hexo站到GitHub Pages。
以后写完博客后不需要在hexo三部曲部署后再提交到仓库了,而是直接提交到仓库便可自动部署。