博客除草计划(二):GitHub Pages Deploy Action 部署 hexo 博客

Github Actions 是 Github 推出的自动化构建工具,一般来说,CI / CD (持续集成 / 持续部署)都需要自己的计算资源,但 Github Actions 提供免费的计算资源,这是它的优势之一,用户只用操心 workflow 文件,不用关心环境相关的琐碎,便可部署 CI / CD,加速了流程。

博客除草计划正在进行中,最近在准备新主题 Candelas, 为了方便预览,打算使用 Github Actions 自动部署新主题的 demo 到 Github Pages。

Github Actions

在 GitHub Actions 中,一次执行过程被称为一个 workflow,一个 workflow 中可以有一个或者多个 job,job 又由 step 组成,step 中可以执行 action,就是一条条命令,更多入门的东西可参考阮老师的这篇文章

GitHub Pages Deploy Action

Github Actions 提供一个 Actions 市场,这是它另一个优势,可以复用别人提供的 action,减少编写 workflow 文件工作量。我在 Candelas 项目的 Actions 中使用市场中的 GitHub Pages Deploy Action 来部署 hexo 博客资源到 Github Pages。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- name: Init Github pages
run: |
mv ./candelas/.git $GITHUB_WORKSPACE
mv ./candelas ./hexo-theme-unit-test/themes
cd ./hexo-theme-unit-test
npx hexo clean
npx hexo config theme candelas
npx hexo new page categories
cp ./themes/candelas/.github/resources/categories.md ./source/categories/index.md
npx hexo generate
mv ./public $GITHUB_WORKSPACE
- name: Deploy
uses: JamesIves/github-pages-deploy-action@3.1.5
with:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BRANCH: gh-pages
FOLDER: public

上面是与 GitHub Pages Deploy Action 相关的 steps,前一步是准备 Github Pages 相关的静态资源,后一步是借助 GitHub Pages Deploy Action 一步部署静态资源至 gh-pages 分支,简单快捷。

在使用 GitHub Pages Deploy Action 之前,也是需要一些准备工作的,过程中,我遇到了两个问题。第一个报错\##[error]There was an error initializing the repository: Error: The process 'git' failed with exit code 128,因为当前仓库是 Candelas 主题,我便将其移动至 Hexo 博客的 themes 文件夹下,以便 Hexo 生成静态资源,这也就把当前仓库的 .git 文件夹也给移动走了,GitHub Pages Deploy Action 误以为这是一个空的仓库,尝试对其初始化,结果出现了问题,抛出这个错误。我的解决方法是 mv ./candelas/.git $GITHUB_WORKSPACE,在移动当前仓库之前,先把 .git 文件夹移动至工作区。

当我尝试 FOLDER: ./hexo-theme-unit-test/public 来指定 GitHub Pages Deploy Action 部署的静态资源文件目标路径时,发现 GitHub Pages Deploy Action 并不支持以 /./ 开头的路径。这时就需要 mv ./public $GITHUB_WORKSPACE,在前一个 step 中将目标文件夹移动至工作区路径下。默认的环境变量 $GITHUB_WORKSPACE 变量指向工作区,在每个 step 开始,当前路径都会回到此路径,也就是说在 Deploy step 中当前路径不会受到前一个 step 中路径跳转的影响,可以直接访问到 public 文件夹。

一番体验下来,Github Actions 还是蛮好上手的,有很多可复用的 action,降低了门槛,要说缺点的话,就是调试的时候,很费精力,考验耐心。

参考资料