利用 GitHub Actions 自动部署 Hexo 博客
简介 GitHub Actions
GitHub Actions 是 GitHub 官方推出的持续集成/部署模块服务(CI / CD),只需一个配置文件即可自动开启服务,而且自带云环境运行。
概念 | 解释 |
---|---|
workflow | 持续集成一次运行的过程 |
job | 一个 workflow 由一个或多个 job 构成 |
step | 每个 job 由多个 step 构成,一步步完成 |
action | 每个 step 可以依次执行一个或多个 action |
配置 hexo deploy
安装 hexo-deployer-git 。
$ npm install hexo-deployer-git --save
在 Hexo 的 _config.yml
中加入下方的内容,并做好配置。
deploy:
type: git
repository: https://<user-name>:<token>@github.com/<user-name>/<repository>
branch: [branch]
创建仓库
在 GitHub 中创建一个代码仓库,随后将网站的源文件提交至该仓库中。
配置 SSH Key
打开 Git Bash 命令行窗口,检查是否已有 SSH Key。
$ cd ~/.ssh
如果提示没有的话,输入下方代码生成。
$ ssh-keygen -t rsa -C "example@email.com"
SSH Key 准备完毕后,首先复制秘钥。
$ clip < ~/.ssh/id_rsa
然后在之前创建的源文件仓库 Settings>Secrets
中创建一个名为 SSH_PRIVATE
的 Secrets,并将 Value 设置为秘钥的值。
接着复制公钥。
$ clip < ~/.ssh/id_rsa.pub
在网站仓库 Settings>Deploy Keys
中添加一个 Deploy Key,名称任意,并将 Key 设置为公钥的值。
创建 workflow
在博客目录下创建 .github/workflows/xxx.yml
文件,文件名任意。
文件内容如下[1],可以根据自己的需要增减步骤。
name: Deploy # Actions 显示的名字,随意设置
on: [push] # 监听到 push 事件后触发
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout # 拉取当前执行 Actions 仓库的指定分支
uses: actions/checkout@v2
with:
ref: master
- name: Update Submodule # 如果仓库有 submodule,在这里更新,没有则删掉此步骤
run: |
git submodule init
git submodule update --remote
- name: Setup Node # 安装 Node 环境
uses: actions/setup-node@v1
with:
node-version: "10.x" # Node 版本
- name: Hexo Generate # 安装 Hexo 依赖并且生成静态文件
run: |
rm -f .yarnclean
yarn --frozen-lockfile --ignore-engines --ignore-optional --non-interactive --silent --ignore-scripts --production=false
rm -rf ./public
yarn run hexo clean
yarn run hexo generate
- name: Hexo Deploy # 部署步骤,这里以 hexo deploy 为例
env:
SSH_PRIVATE: ${{ secrets.SSH_PRIVATE }}
GIT_NAME: yourname # 在此处填写 GitHub 的用户名
GIT_EMAIL: your@email.com # 在此处填写邮箱
run: |
mkdir -p ~/.ssh/
echo "$SSH_PRIVATE" | tr -d '\r' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "$GIT_NAME"
git config --global user.email "$GIT_EMAIL"
yarn run hexo deploy
文件中的 GIT_NAME
和 GIT_EMAIL
需要自行修改。Node 版本可以根据需要更改。
至此就已经配置好了。
使用
当我们提交修改后,GitHub 就会自动执行配置好的步骤,完成博客的部署。