Hexo-GitHub Actions 自动部署
2021年8月30日 · 1353 字
突然想捡起来,把Hexo的东西整整,CI的自动部署关掉了,重新用GitHub的action来进行自动部署;
首先
你需要知道Hexo部署的正常逻辑;
graph LR;
a(本地源码更新)-->b(HexoGenerate);
b-->c(生成静态文件);
c-->d(HexoDeploy);
d-->e(push到Github仓库)
大致逻辑上如上图所示,在Github仓库展示的(一般仓库名都是xxxx.orangeshinee.github.io
)只是静态文件
,不包含本地的源码,类似Themes
主题文件等配置;
而我们需要做的,就是把本地源码
和最后要生成展示的静态文件
分开保存,同时备份,这样在你更换电脑或者换了生产环境的时候,可以随时把源码pull下来继续更改,不用担心丢失问题;
那么
Github Action是如何工作的?能解决什么问题?
简单来说,就是能够监控你源码的更改状态,如果你的源码有更改,那么GA就会在线上帮你进行Hexo Generate
和Hexo Deploy
工作,不需要自己再手动部署;
同时,也分离了源码及静态文件,方便我们随时随地写文档;
graph LR;
a(本地源码更新);
z-->a;
a-->z(源码仓库);
b(HexoGenerate);
a-->f(GitAction监控);
f-->b;
b-->c(生成静态文件);
c-->d(HexoDeploy);
d-->e(push到Github仓库)
然后
1.新建仓库
假设你已经在本地部署过了,那么你的网站仓库已经有了; 接下来,我们新建一个仓库,把本地的源码上传上去,同时将这个仓库的属性改为个人可见(这步可选);
2.SSH配置
在本地打开git bash,然后运行
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/hexo_key
会在本地生成一对公钥&密钥,公钥就是后缀为.pub
的文件;
如果你是windows电脑,那么配置文件会在c://users/YourName/.ssh/
文件夹中;
公钥部署
右键用记事本先打开公钥,即后缀.pub
的文件,复制;
打开静态文件仓库(xxxxx.github.io),点击设置,将公钥粘贴进去;
私钥部署
同上,我们将私钥的文本内容复制,部署到源码仓库;
这里的位置与公钥不一样,私钥部署是在Secrets
的Actions
中,点击右上角添加私钥;
需要注意名称,我们将私钥名称设置为DEPLOY_KEY
(也可以是其他名字),在后续步骤会用到;
3.新建Action
然后转到Actions
设置,点击New workflow
新建一个工作流,会生成一个xxx.yml的文件,名字可随意;
4.编辑配置文件
# name为名称,可随意
name: HexoDeploy
# 触发条件,这里只要你对仓库进行push,就会运行
on: [push]
jobs:
pages:
# 运行环境,即Action的运行环境,我们默认选ubuntu,详情见(https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners)
runs-on: ubuntu-latest
# steps是步骤,我们总共进行了6步,需要更改的只有ssh配置那一步
steps:
# 第一步,拉取你的源码,注意ref那里是不是你的仓库分支
- name: Checkout
uses: actions/checkout@v2
with:
ref: main
# 更新node环境,这里要注意,node版本要和你的hexo适配,过高可能会有问题;
# 可以在本地运行hexo -v,就能看到node版本
- name: Use Node.js 12.14.0
uses: actions/setup-node@v2
with:
node-version: "12"
# 更新包及缓存
- name: Cache NPM Dependencies
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
# 增加SSH KEY的配置
- name: Add SSH Private Key
env:
# 这里的DEPLOY_KEY就是上文进行添加的
SSH_PRIVATE: ${{ secrets.DEPLOY_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$SSH_PRIVATE" > ~/.ssh/id_rsa
chmod 700 -R ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "你的邮箱"
git config --global user.name "你的名称"
# 安装包
- name: Install Dependencies
run: |
npm install hexo-cli -g
npm install
# 部署
- name: Hexo Deploy
run: |
hexo clean
hexo deploy
编辑完成后保存;
5.没病走两步
上述增加Actions的步骤是在Github网站进行的,你也可以在本地进行,就是在仓库根目录新建一个.github
文件夹,然后在里面新建一个workflows
文件夹,然后将xxx.yml文件放入;
在本地更新一个文档,然后进行push;
此时Actions页面会自动运行一个任务,点进去可以看到详情; 黄色代表运行中,绿色代表部署成功,红色表示部署失败;
一些坑
- Node.js的版本问题,这个前面说过了,建议与本地的版本一致;
- Hexo的版本问题,如果你的版本过低,有些配置会进行更改导致不再生效,需要用新的配置;
例如我这里的
Deprecated config detected: "external_link" with a Boolean value is deprecated. See https://hexo.io/docs/configuration for more details.
,就是指external_link
的配置已经不再使用了,转为用external_link.enable: true
这种配置; - SSH的部署问题,如果发现部署失败,里面提到
git@github.com: Permission denied (publickey).
类似的,多半是因为私钥或者公钥没有部署好导致的,可以仔细看看上面的步骤;
AND
以上,完成了自动部署的整体工作,自己也大概了解了action的逻辑,后面就可以少折腾了;