Github Actions 部署 Hexo
Github Actions 部署 Hexo 从此方便多了
更新
1
19.12.26 初始
资料来源:
https://athorx.com/archives/17/
https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
导语
- Github Actions 是 Github 的持续集成服务,终于结束了内测,面向普通用户开放了.开源仓库可以永久免费使用,私有仓库每用有两千分钟的免费时间.
- 可以把 Hexo 的部署搬到 Actions 上, 配合 Github 的私有库,这样每次只管写MD,部署等一个 push 解决.
说的好像是写了多少博文似的😂 - 这里只涉及与部署 Hexo 相关部分. 相关介绍详情见 GitHub Actions 入门教程 @阮一峰
需求
- 只管写,一个 push 要能走完部署.
- MD 文件与 Hexo 的配置分开,方便管理.
方案
- 新建一个 Github 私库,这里名称是 Blog.
- master 分支存放写完发布的 MD 文件.
- dev 分支用来平时管理博客 MD 文件.写作完成合并到 master 分支.
- Hexo 分支存放 Blog 的配置等,编译时候拉取.
开始前
- 首先要确保本地的 hexo 已经可以正常编译.
- GitHub Pages 可以正常浏览等.
- 下面内容主要参考了 用GitHub Actions自动化发布Hexo网站到GitHub Pages
上传Bloig
- 把 Blog/source/_posts 下的 MD 文件上传到master分支.
- 其他的配置文件上传到 Hexo 分支. /public 和 /node_modules 不需要上传.在 .gitignore 中忽略即可.
生成部署密钥
Github Actions 其实是依照脚本运行一个容器,发布到Gihub Pages 需要一个新的密钥.
生成密钥
1
2# rsa也不推荐了,改 ed25519了. 名称就是 github-actions-deploy
ssh-keygen -b 4096 -t ed25519 -f ~/.ssh/github-actions-deploy生成的私钥上传到 Blog 库的 Settings–>Secrets–>Add a new secret . 名称随意,但要与下文引用保持一致.这里是
ACTION_DEPLOY_KEY
.生成的公钥添加到 GitHub Pages 的 Settings–>Deploy keys–>Add deploy key .
workflows
workflow (工作流程):持续集成一次运行的过程,就是一个 workflow.
job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务.
step(步骤):每个 job 由多个 step 构成,一步步完成.
action (动作):每个 step 可以依次执行一个或多个命令(action)
在 steps 中我们可以引用他人已写好的 action 非常方便.
workflow 在
.github/workflows
文件夹(没有新建) 下,格式是 .yml .文件名即 workflow 名.这里以Deploy.yml
为例.Deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50name: Deploy Blog
on: # 只在master push 时运行
push:
branches:
- master
jobs:
build: # 一项叫做build的任务
runs-on: ubuntu-latest # 在最新版的Ubuntu系统下运行
steps:
- name: Checkout Hexo # 下载Hexo配置
uses: actions/checkout@v2 #Action来自于 https://github.com/actions/checkout
with:
ref: Hexo
- name: Checkout MD # 下载 MD 文件到 source/_posts
uses: actions/checkout@v2
with:
ref: master
path: source/_posts
- name: Use Node.js 10.x # 配置Node环境
uses: actions/setup-node@v1 # 配置脚本来自 https:// github.com/actions/setup-node
with:
node-version: "10.x"
- name: Setup Hexo env
env:
ACTION_DEPLOY_KEY: ${{ secrets.ACTION_DEPLOY_KEY }}
run: |
# set up private key for deploy
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa # 配置秘钥
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'jasper'
git config --global user.email '[email protected]'
# install dependencies
npm i -g hexo-cli # 安装hexo
npm i
npm install --save github:theme-next/hexo-next-utteranc # 默认安装node模块的脚本好像没有安装 hexo-next-utteranc
- name: Deploy
run: |
# publish
hexo generate && hexo deploy # 执行部署程序有两个坑
- 下载 master 分支时,注意
source/_posts
中 是/
. 不是\
.容器运行在 linux 无法识别\
. - 默认安装 node 的脚本没有正确安装
hexo-next-utteranc
,需要在后面补上一行安装命令.
- 下载 master 分支时,注意
生成
- 把 workflows 推送到 master 分支.应该就触发了部署的动作.
- 部署编译还是很快的,我这里仅用了 55s .当出现错误时基本是根据 log 和提示排查.
结语
- 至此 Blog 的折腾要告一段落了,基本达到了自己的预期.接下来要努力把进度赶回来了.