通过Github Action跨仓库部署Hexo

前言

一直想给Hexo博客找个在线管理面板,能够满足在线修改和发布文章的功能,这样就可以在多台不同电脑上进行写作。 刚好在B站上看到有人用Qexo对Hexo博客进行管理,想试试好不好用。

前置条件

  1. 完成Qexo的相关安装和部署,具体安装和部署可以看部署程序
  2. 一个已经通过Github Pages部署好的个人博客仓库(仓库名称是:username/username.github.io的形式)
  3. 将Hexo博客源码整体作为一个git仓库上传到Github,例如叫做hexo-shoka
流程图

Qexo发布博客整个流程

使用Github Action

  1. 创建Github Token 在Github的用户页面左侧边栏找到Developer settings,点击后找到Personal access tokens,选择两种Token类型的其中一种进行创建,要求创建的Token至少对相关仓库具有读写权限。(之后的工作流中要用到,请确保权限足够)

    创建示例

    例如:我选择创建Personal access tokens (classic)类型的Token,点击Gernerate new token按钮,选择Generate new token (classic)选项。进入页面后,Note选项框中填入待创建Token的名称,比如HEXO_AUTO_REDEPLOY。Expiration用于设定待创建Token的过期时间,比如选择No Expiration(一般不推荐这样)。Scope用于设置Token的相关权限,比如勾选repo和workflow。最后在底部点击Gernerate token按钮完成当前Token的创建。

    创建好的HEXO_AUTO_REDEPLOY

  2. 创建Repository secret 在Hexo博客源码仓库点击Settings,在左侧栏找到Secrets and variables,选择Actions,进入Actions secrets and variables页面,点击New repository secret创建一个仓库secret,名称随意,例如TARGET_REPO_TOKEN,值为刚才生成的Token。同样的方式再创建一个仓库secret,名称随意,例如TARGET_REPO_NAME, 值以username/username.github.io形式填入自己的Hexo博客部署仓库的名称

  3. 创建工作流文件 在存储Hexo博客源码的仓库(hexo-shoka)中创建.github/workflows/文件夹路径,并在其下面创建一个yaml格式的文件,名称随意,例如叫pages.yml

  4. 编写工作流步骤 在pages.yml文件中写入如下内容:

name: Deploy Hexo Blog

# Github Action触发条件
on: 
  push: 
    branches:
      - main # 这里设置的是当前仓库的main分支发生push时触发

# 作业设置
jobs:
  deploy:
    runs-on: ubuntu-latest # 设置运行的宿主机系统
    steps:
        # 检出当前仓库(存放Hexo博客源码的仓库)
      - name: Checkout source code
        uses: actions/checkout@v2
        with:
          # 如果你的主题文件夹使用的是git submodule进行管理的话这个操作是必须的
          # 不然检出当前仓库后,themes/your_theme/文件下内容是空的
          submodules: 'recursive'

        # git config设置
      - name: Configure Git
        env:  # 如果不想通过环境变量来设置,也可以抽取成Repository secret
            USERNAME: unistart # 改成自己的
            USER_EMAIL: 2604249649@qq.com # 改成自己的
        run: |
          git config --global user.email $USER_EMAIL
          git config --global user.name $USERNAME

        # 配置Node.js环境
      - name: Setup Node.js environment
        uses: actions/setup-node@v2
        with:
          node-version: '18.x' # 可以根据自己的需要修改Node.js版本

        # 安装npm依赖
      - name: Install dependencies
        run: |
          npm install hexo-cli -g
          npm install

        # 执行hexo命令并推送新生成的内容到指定的目标仓库(存放Hexo博客静态页面的仓库)
        # 下面使用git进行远程推送时,可以根据自己的需要修改推送分支的名称
        # 下面的操作是进行 CURRENT_REPO_NAME:main -> TARGET_REPO_NAME:main
      - name: Build and deploy
        env: # 注意去掉插值表达式中多余的'\'符号,因为markdown渲染的关系目前只能这样写了
          TARGET_REPO_TOKEN: $\{\{ secrets.TARGET_REPO_TOKEN \}\}
          TARGET_REPO_NAME: $\{\{ secrets.TARGET_REPO_NAME \}\}
        run: |
          hexo clean
          hexo generate
          cd public
          git init
          git remote add origin "https://$TARGET_REPO_TOKEN@github.com/$TARGET_REPO_NAME"
          git checkout -b main
          git add .
          git commit -m "Redeploy Hexo Blog"
          git push origin main --force 
  1. 在当前仓库(hexo-shoka)提交编写好的工作流,等待Github Action完成