# 前言
在学习 github actions 的时候,想到自己的博客是否能在每次 push 时自动部署。在参考了几篇文章之后,实现了此功能。
# 准备
准备两个 git 仓库
- blogFile :用来存放博客的源文件
- xxx.github.io :用来存放博客编译后的文件,也是使用 github pages 的仓库,xxx 是你的 github 用户名
# 开始
# 生成 SSH 密钥
为了在 github actions 中 执行 hexo deloy
,需要使用 SSH 密钥认证。
- 打开终端
- 执行下面的命令,将示例中使用的电子邮件替换为 GitHub 电子邮件地址。
ssh-keygen -t ed25519 -C "your_email@example.com" |
- 一路回车,之后会生成 id_ed25519 私钥和 id_ed25519.pub 公钥文件。
# 添加密钥
在 blogFile 仓库中 选中 Settings
,选择左侧栏 Secrets and variables
中的 Actions
,然后点击 New repository secret
创建 secrets 变量,把 id_ed25519(私钥) 中的内容添加进去。
在 xxx.github.io 仓库中 选中 Settings
,选择左侧栏的 Deploy keys
,然后点击 Add deploy key
,勾选 Allow wirte access
,把 id_ed25519.pub(公钥)中内容添加进去。
# 一键部署
要在 actions 中使用 hexo deploy
,先需要实现 hexo 中的 一键部署。
- 安装 hexo-deployer-git。
npm install hexo-deployer-git --save |
- 在博客根目录中的
_config.yml
中修改配置。
deploy: | |
type: git | |
repo: git@github.com:xxx/xxx.github.io.git | |
branch: master |
repo 为 xxx.github.io (存放编译后文件的那个仓库)的 SSH 地址。
branch 为部署的分支。自己的是 master
还是 main
不要搞错了。
# Actions
- 在博客根目录中新建
.github
文件夹。 - 在
.github
中新建workflows
文件夹。 - 在
workflows
中新建deploy.yml
文件。
# deploy.yml | |
name: Deploy Actions | |
on: | |
push: | |
branches: main # main 分支发生 push 时运行 | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: NPM INSTALL | |
run: | | |
npm install hexo-cli -g | |
npm install | |
- name: Add KEY | |
env: | |
#
SSH_PRIVATE: ${{ secrets.SSH_DEPLOY_KEY }} # 替换为在 blogFile 中添加的私钥变量
# | |
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 "xxxx@xx.com" | |
git config --global user.name "xxxx" | |
- name: Hexo Deploy | |
run: | | |
hexo clean | |
hexo generate | |
hexo deploy |
- 替换上面的
SSH_DEPLOY_KEY
为你在blogFile
中添加的私钥变量。 - 替换
user.email
和user.name
为你 github 邮箱和用户名。