转载自:用GitHub Actions 自动化发布Hexo网站到GitHub Pages - 掘金 (opens new window)
之前我已经习惯了自己在本地部署 Hexo 并 push,也写过一个一键 push 到博客部署仓库和博客仓库的 shell 脚本,如下:
#!/bin/bash
echo
echo pushing to lyh543/lyh543.github.io.backup
echo
git add --all
git commit -m "update on $(date +%c)"
git push origin
# 当存在任意参数,如调用时使用 `./hexop 1` 时,则不会 push 到博客部署仓库
if [ -z $1 ]; then
echo
echo pushing to lyh543/lyh543.github.io
echo
hexo d -g
fi
一直这么用着,也没有觉得比 GitHub Actions 麻烦很多,直到当我有同时在笔记本和台式上写博客的需求。deploy 到 GitHub 过程中,如果此次部署的电脑和上次不同,会导致博客部署仓库的 Git 提交记录冲突,必须使用 forced update
,导致每次都需要把所有文件重新传一份。
于是开始学习了 GitHub Actions。发现还不错。而且网上也有现有的部署 Hexo 的中文教程可用。下面转载这篇文章,并加入自己的理解。
# 准备 Hexo 网站
在本地建立一个 Hexo 站点,可以参考官方快速开始文档。
建立两个 GitHub 仓库,分别叫 blog
(私有的,名字可自取)和 your_github_username.github.io
(公有的)。前者用来存储博客源文件,后者用于存储博客部署文件。这里我选择 lyh543.github.io.backup
存储博客源文件,lyh543.github.io
存放博客部署文件。
然后将本地的博客源文件推送到 lyh543.github.io.backup
仓库。
# 准备 SSH 秘钥
为了方便运行 GitHub Actions 时登录 GitHub 账号,我们使用 SSH 方式登录。
在本地使用 ssh-keygen
生成一组公私秘钥对:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-actions-deploy
生成了公钥 ~/.ssh/github-actions-deploy.pub
和私钥 ~/.ssh/github-actions-deploy
。
在 GitHub 的 Settings->SSH and GPG keys
添加刚刚生成的公钥,名称随意。
在 lyh543.github.io
仓库的 Settings->Secrets
里添加刚刚生成的私钥,名称为 ACTION_DEPLOY_KEY
。
如果在 Hexo deploy 过程中还需要 sftp
部署到服务器,则还需要在服务器添加私钥:在本地执行 ssh-copy-id -i ~/.ssh/github-actions-deploy.pub root@you-server-ip.com
。
# 设置 Hexo 的部署配置
在 _config.yml
添加部署配置:
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
- type: git
repo:
github: git@github.com:lyh543/lyh543.github.io.git
branch: master
# 如果有 sftp 部署到服务器的需求,则可将下面的部分取消注释
# - type: sftp
# host: your-server-ip.com
# user: root
# # pass: <password>
# remotePath: /var/www/html/blog
# port: 22
# privateKey: /home/runner/.ssh/id_rsa # runner 是 GitHub Actions 的 username(这里不能使用 ~ 代替 /home/runner)
# # passphrase: [passphrase]
# # agent: [path/to/agent/socket]
# 配置 GitHub Actions
在 lyh543.github.io.backup
仓库的 Actions 选项卡下点击新建 workflow,编写如下配置。
name: Deploy Blog
on: [push] # 当有新push时运行
jobs:
build: # 一项叫做build的任务
runs-on: ubuntu-latest # 在最新版的Ubuntu系统下运行
steps:
- name: Checkout # 将仓库内master分支的内容下载到工作目录
uses: actions/checkout@v1 # 脚本来自 https://github.com/actions/checkout
- 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
# ssh-keyscan your-server-ip.com >> ~/.ssh/known_hosts # 如果需要 sftp,则还需要注释掉一行
# set git infomation
git config --global user.name 'lyh543' # 换成你自己的邮箱和名字
git config --global user.email 'lxl361429916@live.com'
# install dependencies
npm i -g hexo-cli # 安装hexo
npm i
- name: Deploy
run: |
# publish
hexo generate && hexo deploy # 执行部署程序
直接将配置复制覆盖左边的编辑框的内容即可。名称可自取。然后在本地 git pull
。
之后就可以在 GitHub Actions 看到这次部署了。