通过GitHub Actions将Hexo博客自动部署到GitHub Pages

这篇博客是从我的个人博客网站 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上确认到更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值