使用两个仓库,一个为公开,另一个为私有
私有的仓库存放 Hexo 博客项目,方便对笔记进行版本控制,另一方面,之后如果换电脑也方便迁移撰写环境。而公开的仓库专门存放生成的静态文件
本地推送代码到私有仓库,之后触发 Github Actions,自动部署到公开仓库
1 准备仓库
准备两个仓库,一个用来存 Hexo 博客项目,另一个用来存输出的静态文件
my-blog
<your-name>.github.io
2 生成密钥对
ssh-keygen 是一个认证密钥的生成、管理和转换工具,生成的密钥对可用于远程服务器的连接
在本地执行以下命令:
1
| ssh-keygen -f github-deploy-key
|
执行后,本地会生成两个文件:
- github-deploy-key
- github-deploy-key.pub
3 配置密钥
3.1 配置私钥
私钥配置在 my-blog 仓库中
首先,进入 New repository secret 添加页面:Settings => Secrets and variables => Actions,点击 New repository secret 添加私钥
3.2 配置公钥
公钥配置在 <your-name>.github.io
仓库中
进入 Deploy keys 的添加页面:Settings => Deploy keys,点击 Add deploy key 添加公钥
PS. 添加时需要勾选 Allow write access 选框
4 编写 Github Actions
Github Actions 的配置文件是一个 yaml 文件,放置在 .github 下的 workflows 目录下
首先,创建一个 yaml 文件,取名为 deploy.yml,在 deploy.yml 中添加以下内容:
env 中替换成自己的,然后需要注意的是分支名,根据自己情况填写
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| name: CI
on: push: branches: - main
env: GIT_USER: your-name GIT_EMAIL: your-email THEME_REPO: theme-next/hexo-theme-next THEME_BRANCH: master DEPLOY_REPO: your-name/your-name.github.io DEPLOY_BRANCH: main
jobs: build: name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }} runs-on: ubuntu-latest strategy: matrix: os: [ubuntu-latest] node_version: [18.18.0]
steps: - name: Checkout uses: actions/checkout@v4
- name: Checkout theme repo uses: actions/checkout@v4 with: repository: ${{ env.THEME_REPO }} ref: ${{ env.THEME_BRANCH }} path: themes/next
- name: Use Node.js ${{ matrix.node_version }} uses: actions/setup-node@v4 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 github.com >> ~/.ssh/known_hosts git config --global user.name $GIT_USER git config --global user.email $GIT_EMAIL cp _config.next.yml themes/next/_config.yml
- name: Install dependencies run: | yarn install
- name: Deploy hexo run: | npm run deploy
|
上述的 yaml.yml 文件需要根据自己的实际情况编写,上面大体上做了以下几件事:
- 创建 ubuntu + node 环境
- 从 my-blog 拉取代码
- 拉取子模块主题项目的代码
- 执行脚本。包括 git 的初始设置、私钥的设置以及主题配置文件的替换等
- 安装依赖
- 部署项目。这个是已经在 Hexo 配置文件中配置了 your-name.github.io 的 SSH 链接的,实际部署和本地的执行效果一样
从本地到 your-name.github.io 仓库部署完成实际上有两个代码推送的过程,第一个是本地到 my-blog 仓库,另一个是从 Github Actions 临时构建的环境到 your-name.github.io 仓库
至于为什么需要密钥对,其实就是为了能够通过 SSH 的方式去推送代码,好像还有一个 token 也可以实现类似的效果,不过我没试过,以后试试
5 参考