Hexo + GitHub Action,零成本自动化部署个人博客

使用Hexo建站,每次在本地修改或新增博客后,都要先构建生成静态页面,再将页面部署到服务器中。使用GitHub Action可以将Hexo的构建生成部署流程在GitHub服务器自动化运行,写好的博文通过git提交到代码仓后会自动更新到网站上,不用频繁操作命令行。

前置条件

已安装配置好VScode。
已安装配置好Node.js、Git、Hexo。

初始化Hexo

创建一个blog文件夹,这是生成静态页面的基础。

hexo init blog
cd blog
npm install

在GitHub上新建两个仓库

其中一个私有仓存blog网站生成代码,另一个公有仓准备存生成的部署网站页面。

明确一下目标:修改网站样式、博客markdown文件等操作后,提交变更到私有仓,然后触发GitHub Action在服务器上进行Hexo构建生成静态网页文件,最后将静态网页文件提交到公有仓,使用GitHub Page呈现网站。有点前后端分离的思想。

创建的公有仓为:

https://github.com/{user}/{repo}.git

其中{user}指用户名,{repo}指仓库名({repo}最好为xxx.github.io形式的)。

创建Token

Token至少带repo, workflow权限。

创建完毕后记下Token的值(后续使用{Token}指代Token的值),并将其添加到公有仓。

修改_config.yml

此项repo的值为使用Token访问公有仓,,

deploy:
  type: git
  repo: https://{Token}@github.com/{user}/{repo}.git    # 保存静态网页文件的公开仓
  branch: main

配置Github Action工作流

在.github文件夹下新增workflows文件夹,然后新增deploy.yml文件,内容如下。

里面有个node-version要和你本地的node一致。

步骤大致意思就是使用ubuntu-latest作为基础环境,然后安装各种依赖,随后hexo generate生成博客网站静态文件夹,最后把这个文件夹推送到公开仓库的main分支。

name: Deploy Hexo to GitHub Pages

on:
  push:
    branches:
      - main  # 当推送到 main 分支时触发

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          submodules: false  # 禁用子模块检查

      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 'v20.17.0'

      - name: Install Dependencies
        run: npm install

      - name: Install Hexo Git Deployer
        run: |
          npm install hexo-deployer-git --save
          npm install hexo-cli -g

      - name: Clean and Generate Static Files
        run: |
          hexo clean
          hexo generate

      - name: Configure Git
        run: |
          git config --global user.name 'github-actions[bot]'
          git config --global user.email 'github-actions[bot]@users.noreply.github.com'

      - name: Deploy to GitHub Pages
        run: |
          cd public/
          git init
          git add -A
          git commit -m "Create by workflows"
          git branch -M main
          git remote add origin https://{Token}@github.com/{user}/{repo}.git    # 保存静态网页文件的公开仓
          git push origin HEAD:main -f

推送验证

把刚才更新的所有文件都推送一遍,github就会触发工作流,然后去网站看工作流运转的如何。

若一切无误,应当在公开仓出现更新后的静态网页文件。

配置Github Pages

存有静态网页文件的代码仓设置中的Github Pages选项开启。

若{repo}为xxx.github.io形式,博客网站的域名就是{repo}的值。

参考

Bilibili视频教程-9分钟零成本搭建自动化部署个人博客(Hexo + Github Action + Page)
如何优雅的使用Github Action服务来将Hexo部署到Github Pages


Hexo + GitHub Action,零成本自动化部署个人博客
https://xulianjun.github.io/2024/09/08/Hexo + GitHub Action,零成本自动化部署个人博客/
作者
xulianjun
发布于
2024年9月8日
许可协议