【Hexo】GitHub Action自动部署Hexo


1 前言

网上虽然有很多通过 GitHub Actions 自动部署 Hexo 的教程,但都有各种各样的问题。主要问题还是 Workflow 脚本没有写正确,比如插件部分。

2 步骤

2.1 生成密钥对

ssh-keygen -t rsa -b 4096 -f ~/.ssh/GitHub-actions-deploy

然后会获得一个公钥(GitHub-actions-deploy.pub)和私钥(GitHub-actions-deploy)。

2.2 在 GitHub Pages 所在的仓库中添加公钥

注意这里是配置生成的公钥,且是配置在Hexo生成的静态页面所在的git内

找到仓库的 Settings - Deploy keys - Add deploy key

  • Title 填入:ACTION_DEPLOY_KEY
  • Key 填入:GitHub-actions-deploy.pub的内容
  • 勾上 Allow write access

2.3 在存放 Hexo 源文件的仓库中添加私钥

PS: 跟步骤 2 中的仓库可能是同一个,也可能不是同一个。根据自己的选型设置。

我自己的Hexo博客源文件是与生成的静态博客是分开的。

找到仓库的 Settings - Secrets - Add a new secret

  • Name 填入:ACTION_DEPLOY_KEY
  • Value 填入:GitHub-actions-deploy

注意:需要复制GitHub-actions-deploy文件中包括 -----BEGIN OPENSSH PRIVATE KEY----------END OPENSSH PRIVATE KEY----- 的整个内容。

2.4 修改一下 Actions 脚本

下文贴出的 Actions 的 Wordflows 脚本中,其中 3 个地方要改为自己的信息:

git config --global user.name "你的github用户名"
git config --global user.email "你的github注册的邮箱"
git clone https://github.com/[你的github用户名]/[你的github用户名].github.io .deploy_git

clone那一行最后的项目,你的名字可能与我的不同,但都指的是你的博客静态页面所在的项目名。

2.5 其他注意事项

脚本中插件部分可按自己实际用的插件删改,npm ls --depth 0 可查看自己安装了哪些插件。如果没有用到 hexo douban 插件,部署命令:

hexo g && hexo douban && hexo deploy

可改为

hexo g -d

另外一个建议是,所使用的 theme 中的 主题目录git subtree 添加为子项目去维护。这样在多环境多终端发布文章时,不会 clone 或 pull 一个空 theme。

2.6 git push

文章写好后,不需要在本地构建,只需要 git push 到 GitHub 仓库即可自动部署。其中部署方式在 Hexo 根目录的 _config.yml 中配置。

3 脚本配置

注意修改其中提到的几个地方。

name: 自动部署 Hexo

on:
  push:
    branches:
      - matery

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [15.x]

    steps:
      - name: 开始运行
        uses: actions/checkout@v1

      - name: 设置 Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}

      - name: 配置 Git 环境
        env:
          GIT_NAME: ${{ secrets.GIT_NAME }}
          GIT_EMAIL: ${{ secrets.GIT_EMAIL }}
          REPO: ${{ secrets.GH_REF }}
          GH_TOKEN: ${{ secrets.GH_TOKEN }}
          ACTION_DEPLOY_KEY: ${{ secrets.ACTION_DEPLOY_KEY }}
        run: |
          mkdir -p ~/.ssh/
          echo "$ACTION_DEPLOY_KEY" > ~/.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
          git config --global init.defaultBranch matery
          git clone https://github.com/zyxelva/zyxelva.github.io .deploy_git

      - name: 安装 Hexo CI
        run: |
          export TZ='Asia/Shanghai'
          npm i -g hexo-cli
          npm i

      - name: 安装插件
        if: steps.cache-dependencies.outputs.cache-hit != 'true'
        run: 
          npm install

      - name: 部署博客
        run: |
          rm -rf .deploy_git
          hexo clean && hexo g && hexo d
          rm ~/.ssh/id_rsa

4 参考文档


文章作者: Kezade
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kezade !
评论
  目录