Github Action实现自动部署hexo博客
书接上回,阅读本文的前提是你已经能够通过hexo n/g/s/d几个命令实现hexo博客的部署,并且建立了相应的github主页和仓库。
现在我们想要实现的是:
- hexo源码托管
- 不通过本地generate和deploy,而是通过提交代码到源码仓库的方式,通过源码仓库的github action来实现自动的部署。
hexo源码托管
GitHub仓库设置
创建两个仓库:
username.github.io(存放生成的静态文件,命名不能有问题,且是免费用户的话必须设置公开)blog-source(存放Hexo源码,可以随意命名,可以设置私有,毕竟有的博客可以加密,如果源码都公开了,加密又有什么意义)
本地Hexo项目配置
初始化源码Git仓库
cd my-blog
git init
git remote add origin https://github.com/username/blog-source.git
配置Hexo
修改_config.yml中的部署设置:
# Deployment
deploy:
type: git
repo: https://github.com/username/username.github.io.git
branch: master
创建.gitignore文件
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
GitHub Actions工作流配置
创建工作流文件
在Hexo源码仓库中创建:.github/workflows/deploy.yml。
比如我的如下,要修改的只有external_repository:
name: Deploy Hexo
on: [push]
jobs:
build:
runs-on: ubuntu-latest
name: Hexo Build and Deploy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Hexo
run: |
npm install hexo-cli -g
npm install
- name: Generate Static Files
run: hexo generate
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PAT_FOR_DEPLOY }}
publish_dir: ./public
publish_branch: master
external_repository: leehm00/leehm00.github.io
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
有两个需要注意的点
- 第一是
on: [push],这个配置可以改成推送到某一个分支的时候触发,如果使用了多个版本分支管理自己的hexo源码的时候可以考虑 - 第二是要使用
peaceiris/actions-gh-pages@v3的personal_token: ${{ secrets.PAT_FOR_DEPLOY }},一定不要用``GITHUB_TOKEN,有的教程会说使用这个,但是因为GITHUB_TOKEN`只能访问当前运行工作流的仓库,无法推送到外部仓库,已经不能适配我们的场景了。关于token配置见后面。如果硬是要用就需要将源码设置为username.github.io仓库的一个分支,由于穷哥们没有付费必须设置公开,源码还是直接暴露了。。。
使用 Personal Access Token (PAT)
- 生成 Personal Access Token
- 访问 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- 生成新 token,选择
repo权限 (可以考虑同时选上workflow) - 复制生成的 token(只显示一次)
- 在源码仓库添加 Secret
- 进入源码仓库的 Settings → Secrets and variables → Actions
- 添加新 secret:
PAT_FOR_DEPLOY,值为刚才复制的 token(名字要和前面文件中保持一致)
username.github.io仓库的更改
不需要更改。
有的教程会让你进入username.github.io仓库,然后Settings → Pages → Source选择”GitHub Actions”,但是我们在源码仓库的Actions (peaceiris/actions-gh-pages) 已经完成了所有工作:构建 Hexo → 将最终的静态文件推送到目标仓库的 master 分支。
- 目标仓库 (
leehm00/leehm00.github.io) 接收到的已经是现成的、可供托管的 HTML/CSS/JS 文件。
因此,只需要告诉 Pages:“请直接托管 master 分支中的内容。”
而如果Source选择”GitHub Actions”,这种方式是 GitHub Pages 的“现代”模式。它允许在目标仓库中运行另一个 Actions 工作流来执行构建和部署步骤。
- 当选择此选项时,通常需要使用一个单独的 Actions 工作流(例如
pages-build-deployment)来处理构建和部署。 - 对于静态网站生成器(如 Hexo),这意味着需要在目标仓库中再次进行
npm install、hexo generate等操作。
但是我们的 Hexo 构建和文件生成步骤已经在源码仓库中完成了。
目标仓库 (username.github.io) 的 master 分支中只有静态文件,没有 Hexo 源代码、package.json 或 _config.yml 等文件,甚至它无法运行完整的 Hexo 构建。
本地工作流程
设置好一切之后,部署工作异常简单。
创建新文章
hexo new "我的新文章"
# 编辑 source/_posts/我的新文章.md
本地测试
如果只是写一些新文章,不进行测试的话就没必要跑这一步。
# 生成静态文件
hexo generate
# 本地预览
hexo server
# 访问 http://localhost:4000
提交和推送
# 添加更改
git add .
# 提交更改
git commit -m "发布新文章:我的新文章"
# 推送到GitHub,自动部署
git push origin master
自动化部署流程
触发流程
- 推送代码到
blog-source仓库的master分支 - GitHub Actions自动触发构建流程
- 生成静态文件并部署到
username.github.io
监控部署状态
- 在GitHub源码仓库的”Actions”标签页查看部署状态,网页仓库也会因为更新进行相应的action
- 部署完成后访问:
https://username.github.io
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 homie's Home!
评论
UtterancesWaline
