这篇博客是从我的个人博客网站 Karubon.moe 中摘取的,这篇博客基于搭建这个网站时得到的经验教训编写。喜欢这篇博客的话不妨去我的网站看看呀。
我们很快注意到,一旦你离开现在使用的设备,你就无法修改网站内容。当你更换设备时,你不得不将上述步骤全部重复。一旦设备出现故障更是会损失惨重。这些矛盾呼吁我们采取方法,要求我们能自动地储存与部署博客文件,而不受手上设备的限制。
GitHub Actions为我们在需要的时候创建一个容器,我们在容器中安装软件并处理我们的博客文件,最后部署到Pages仓库中。现在我们来实现它。
前提
首先在Github上新建一个仓库用来储存我们的博客文件,通常我们将其设为私有的。
如果你安装了VS Code,这时候你可以在博客根目录右键菜单中选择“在终端中打开”来启动Windows Powershell,然后输入并执行:
code .
此命令将会启动VS Code并在其中打开这个文件夹。然后你可以在侧边栏中打开源代码管理页面,从GitHub添加远程库。只需要按照提示操作,你最终能将整个目录下的文件上传到仓库中(被.gitignore指定的文件/文件夹不会上传)。
我们将上面内容视为准备操作,如果你不知道如何操作,可以寻求搜索引擎的帮助。
部署密钥
现在在“git bash here”中执行下面命令:
$ ssh-keygen -f github-deploy-key
这个命令将生成部署密钥,你只需要一直按空格,根目录下就会出现两个文件:github-deploy-key和github-deploy-key.pub。
注意
正如其名字,除非你确定自己在做什么,否则你不应该将密钥直接上传到仓库(尤其是公共仓库)。
在博客源文件仓库中依序打开Settings->Secrets and variables->Actions->New repository secret。
在Name中填写“HEXO_DEPLOY_PRI”,在Value中填写github-deploy-key文件中的全部内容(包括头尾的文字)。然后Add secret。
在Pages仓库中依序打开Settings->Deploy keys->Add deploy key。
在Title中填写“HEXO_DEPLOY_PUB”,在Key中填写github-deploy-key.pub文件中的全部内容,勾选Allow write access,然后Add key。
配置GitHub Actions
在博客根目录下创建.github/workflows/deploy.yml文件,目录结构如下。
.
└── .github
└── workflows
└── deploy.yml
在deploy.yml文件中粘贴下面内容并在对应地方作改动。
# Action's Name
name: AutoDeploy
on:
# Triggering Condition 1 Main Branch Performs The Task After Receiving Push
push:
branches:
- main
# Triggering Condition 2 Manual Button
workflow_dispatch:
# Putting Environment Variables Here You Need To Replace It With Your Own
env:
# After Hexo Compiles Use This Git User To Deploy To The Github Warehouse
GIT_USER: <你的GitHub用户名>
# After Hexo Compiles Use This Git Mailbox To Deploy To The Github Warehouse
GIT_EMAIL: <你的GitHub用户邮箱>
# The Git Hub Warehouse To Be Deployed After Hexo Compiles
GIT_DEPLOY_REPO: <你的GitHub用户名>/<你的GitHub用户名>.github.io
# Hexo Compiles The Branch To Deploy After Compilation
GIT_DEPLOY_BRANCH: main
jobs:
build:
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id
strategy:
matrix:
os: [ubuntu-latest]
node_version: [16.x]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout deploy repo
uses: actions/checkout@v4
with:
repository: ${{ env.GIT_DEPLOY_REPO }}
ref: ${{ env.GIT_DEPLOY_BRANCH }}
path: .deploy_git
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}
- name: Configuration environment
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL
- name: Install dependencies
run: |
npm install hexo-cli -g
# Install According To The Components You Installed
npm install - gulp gulp-uglify hexo hexo-deployer-git hexo-generator-archive hexo-generator-category hexo-generator-feed hexo-generator-index hexo-generator-search hexo-generator-searchdb hexo-generator-sitemap hexo-generator-tag hexo-renderer-ejs hexo-renderer-marked hexo-renderer-pug hexo-renderer-stylus hexo-server hexo-tag-cloud hexo-word-counter readable-stream uglify-es --save
- name: Deploy hexo
run: |
npm run deploy
现在你可以尝试在博客源文件仓库中作一点改动并推送到远程库,接着在仓库的Actions页面中观察工作是否正常(不被打红叉)。如果正常,大约在1-2分钟内会完成自动部署任务,你能在Pages上确认到更改。