0%

Github Action 部署 Hexo

更新

2022-09-13
TypeError: Object.fromEntries is not a function
更新了新版的 hexo to 6.3.0,Github 上的 Action 脚本也要更新下更新到 node 10.x to node 14.x

2020-12-13 update。Error: Process completed with exit code 1

也是听说 github action 想试试,发现竟然可以直接部署 hexo,这样的话就解决了 hexo 版本控制的问题。下面来尝试一下吧,基本上参考这一篇文章来操作的使用 github action 发布 hexo

准备工作

准备两个仓库,如下:

仓库 说明
blog hexo 项目,存放博客源码的地方
xxxx.gitub.io hexo 编译后的静态文件,即博客

原理基本上是这样的。blog 仓库 推送之后激活 github action,然后在 action 里执行 hexo d 命令就可以了,当然事先要在 blog 仓库 设置好相应的静态仓库地址 xxxx.github.io

配置密钥

ssh-keygen -f github-hexo-deploy-key
此命令会生成 github-hexo-deploy-key 私钥 和 github-hexo-deploy-key.pub 公钥。

配置 blog 项目

github 打开 blog 仓库 => settings => secrets => add new secrets

  • Name 名字随便起,但是要记住,后面有用,例如:HEXO_DEPLOY_SECRETS
  • Value 输入 github-hexo-deploy-key 私钥的内容

配置 xxxx.gitub.io 项目

github 打开 xxxx.gitub.io 仓库 => settings => keys => add deploy key

  • Title 名字随便起,但是要记住,例如: HEXO_DEPLOY_PUB
  • Key 输入 github-hexo-deploy-key.pub 公钥的内容

github action

打开 blog 仓库=> Actions => Set up this workflow,内容如下,可做参考:

name: HEXO CI

on: [push]

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x]

steps:
- uses: actions/checkout@v1 # 检出代码

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}

- name: Configuration environment
env:
HEXO_DEPLOY_SECRETS: ${{secrets.HEXO_DEPLOY_SECRETS}} # blog 项目内新增的 secrets key
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_SECRETS" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "xxxx" #git name
git config --global user.email "xxxx@mail.com" #git account
git clone https://github.com/xxxx/hexo-theme-icarus.git themes/icarus --depth 1 # 主题仓库
- name: Install dependencies
run: |
npm i -g hexo-cli
npm i
- name: Deploy hexo
run: |
hexo g -d

完成

虽然看原文也不是很懂最重要的 action 代码部分,但是还是摸索出来了,用起来还真是方便。唯一的缺点就是 xxxx.gitub.io 仓库 永远只有两个commit,也就是每次都是覆盖更新,不保留任何修改记录,不过还好,blog 仓库已经记录了所有的改动。

问题

2020-12-13 update。运行了几个月竟然这两天突然出现action执行错误直接返回 getaddrinfo https://github.com: Name or service not known 15 Error: Process completed with exit code 1.
还是自己一顿乱试,竟然解决了。
删掉work flow file代码中的这个地方

# 改
ssh-keyscan https://github.com >> ~/.ssh/known_hosts
# 变成
ssh-keyscan github.com >> ~/.ssh/known_hosts