再记Hexo博客部署
我们都知道,Hexo提供了hexo d
这样一键部署的命令,这对于把博客放在本地的用户来说确实非常方便。但是由于一些原因我想要把Hexo的原始文件托管到GitHub上,这就需要想一个部署方案,既能本地推送部署,也能直接网页在线修改后部署。所以这肯定要用到CI来实现push之后自动发布网页。这里记录一下两个方案。
方案一:Vercel
Vercel 真的是一个非常好的平台,给开发者提供了免费的网页托管和 Serverless Functions 等一些非常有用的东西。如果你要通过 Vercel 实现上述的操作,可以看 vercel的文档, 这里我就不赘述了。由于我 Vercel 的用量有点大了,所以我就使用了下面的这种办法
方案二:GitHub Actions
众所周知,GitHub为公共仓库提供了无限的CI时间,所以怎么能不白嫖呢/doge
下面分成两个部分来介绍如何使用GitHub的CI来部署GitHub Page
hexo g -d
的时候发生了什么
在开始写GitHub的CI之前,我们先要知道hexo原本的部署流程是怎么样的,比较典型的用法是hexo g -d
,也就是生成并部署,期间发生了如下的事情:
hexo g
生成博客的静态文件到public
目录- 将
public
目录的内容同步到.deploy_git
内的git仓库 - 强制推送到远程仓库
- GitHub Pages部署的CI自动运行,完成网页的部署
我们如何实现
如上文分析,我们需要的博客的静态文件实际上在public
文件夹里,所以我们只需要在Action里执行hexo g
然后把publish
文件夹的内容跑GitHub Pages的workflow(这可以看GitHub的文档)就可以了。
然后我们注意到hexo博客目录下有一个node_modules
目录比较大,它是博客所需的依赖,但实际上依赖信息都已经被记录到了博客目录下的yarn.lock
或package.json
这样的文件中了,我已我们应该把这个文件夹添加到.gitignore
里,我们只要在Action中执行npm install
(npm)或yarn install
(yarn)即可。
下面是最终的workflow配置文件 (它应该是仓库的.github/workflows/
目录里的某一个yaml
文件,比如我的是.github/workflows/deploy.yaml
),我用的是yarn,如果你使用npm可以把第44和49行的yarn
换成npm
最终结果是每次push之后,都会自动运行这个workflow,并把网页部署到这个仓库的GitHub Pages(不会同时生成一个新的分支)
1 |
|