使用 GitHub Actions 部署 Hexo 博客

本文介绍如何使用 GitHub Actions 实现自动部署 Hexo 博客,具体方案为:使用两个仓库,一个私有仓库存放 Hexo 博客的源程序,一个公开仓库存放生成的静态网站。当我们向私有仓库 push 时,GitHub Actions 自动生成静态页面并推送到公开仓库,实现博客的自动化部署。

下文中都假设你已下载安装了 Hexo 所必需的组件并且已经在本地初始化了 Hexo 博客。

首先,你需要有一个私有仓库 hexo-src (名称随意)和一个公开仓库 <username>.github.io

检查 Hexo 博客根目录下的 package.json 文件,确保其中有以下内容,如没有则自行添加,新安装的应该默认是有的。

{
...
“scripts”: {
"build": "hexo generate",
...
},
...
}

在私有仓库中添加 .github/workflow/pages.yml 文件,内容如下:

name: Github Page # 名字随意 

on:
push:
branches:
- main # 私有仓库的默认分支名字

jobs:
pages:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
# 下面内容按需修改
external_repository: ChinaNuke/ChinaNuke.github.io # 目标仓库 (存放静态页面)
publish_branch: main # 目标仓库的默认分支名字
publish_dir: ./public
cname: nuke666.cn # 如果设置了自定义域名则需要设置此项

由于是部署目标是另一个仓库,因此需要设置 ${{ secrets.PERSONAL_TOKEN }} 并指定所要推送到的仓库 external_repository 以及其默认分支。 生成一个 personal token(scopes 选择 repo 即可),然后将其添加到私有仓库的 Secrets 里面(点击上方 Settings,然后点击 Secrets),名字为 PERSONAL_TOKEN,这样执行 Action 时就会自动去读取这个 token。

然后就完成了,直接把私有仓库 push 一下,Actions 会自动添加并执行,最多一分钟左右静态页面就会生成在公开仓库里。

当然也可以部署到同一个仓库里,只是缺点是你的仓库源文件也需要公开,万一不注意在配置文件里写了什么密码密钥的就不太好,部署到同一个仓库的方法见下方参考链接中的官方文档,大致步骤相似。

参考

https://hexo.io/docs/github-pages

https://github.com/marketplace/actions/github-pages-action

作者

ChinaNuke

发布于

2021-03-17

许可协议

评论