Hexo配置私有仓库

由于需要在多个设备上更新Hexo博客,所以我在仓库中建立了两个分支,一个用来存放hexo generate生成的静态文件,一个用来存放博客源码。这样就可以在不同设备中通过git来管理博客。

这样就会导致一个问题,博客源码中一些没办法公开的东西也在仓库中被展示了出来。所以想着能不能将整个仓库变为private,从而隐藏信息。
然后就出现了一个新的问题,将仓库设置为private之后用github pages展示网页需要付费。

上面的路行不通之后就只能将静态文件和博客源码存在两个不同的仓库里了,存放静态文件(使用github pages)的仓库保持public,而存放博客源码的仓库设置为private。

但是这样一来更新博客源码和更新静态文件这两个部分就是割裂开来的,操作起来比较麻烦,那么如何更方便的更新和维护博客呢,以下就是探索出来的一条路。

GitHub Actions 是 GitHub 推出的持续集成服务,入门教程可参考:GitHub Actions 入门教程

通过GitHub Actions可以对github源码进行操作,在这里的例子里,我们用GitHub Actions对private仓库的博客源码进行操作,生成hexo静态文件,然后将静态文件发布到public仓库上。

  1. 获取 GH_TOKEN 首先到个人中心设置 Personal access tokens,token 能让 GitHub Actions 构建所在的虚拟系统对发布仓库拥有权限可以进行推送操作。
  2. 设置 Actions Secrets 在private仓库中的设置-secrets and variables-Actions-secrets里新建一个名为ACCESS_TOKEN的键值项,内容填上一步获取到的 token 值。
  3. Actions 设置 在博客源码根目录下新建目录 .github/workflows ,然后在其下新建任务文件 deployment.yml,deployment.yml文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# This is a basic workflow to help you get started with Actions

name: Publish Hexo to gitpage

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
with:
ref: main

- name: Install dependencies
run: |
npm install -g hexo-cli # 给虚拟机装上hexo运行环境
npm install # 安装 package.json 中记录的所有插件
sudo apt install pandoc # 配置其他环境

- name: Generate Hexo site
run: |
hexo clean # 生成静态文件
hexo generate # 生成静态文件

- name: Deploy to public repo
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.ACCESS_TOKEN }} # Personal access token
external_repository: xxx/xxx.github.io # 发布的仓库地址
PUBLISH_BRANCH: main
PUBLISH_DIR: ./public

完成了上面的步骤之后,只需要更新private仓库的代码,GitHub Actions就会自动生成静态文件并发布到public仓库上,博客网页就会自动更新了。