通过 GitHub Actions 同步 Hexo 博客至 Gitee
上一篇我讲了通过 GitHub Actions 自动部署博客。GitHub 是国外的服务,国内对应的有 Gitee,Gitee 也提供了 Gitee Pages 服务,可以托管静态页面,不过 GItee 对内容有内容审查,没有 GitHub 那么开放。我这次折腾也顺便把博客同步到了 Gitee。
创建账号
首先创建注册 Gitee 账户就不细说了,注册好后顺便把微信公众号绑定好,不然后面部署的时候可能会导致失败。
设置 Actions secrets
在私有仓库的 Actions secrets 中再添加两个 secret,在上一篇中我已经加了一个 secret,现在再加一个 Gitee 的登录密码跟 git 的本地私钥。
Gitee 的本地密码用处是后续需要脚本模拟人工操作,部署 Gitee Pages,因为 Gitee Pages 每次更新都需要手动点击部署按钮。
本地私钥的话是为了有权限往 Gitee 仓库推送代码。因为现在是两个不同的平台之间同步代码,所以需拉取 Github 上博客的公开仓库,然后推送到 Gitee 的目标仓库。正常情况下用过 Github,本地电脑应该已经生成了 KEY。
我使用的是 Mac,KEY 生成的目录默认是~/.ssh
:
id_rsa
是私钥,id_ras.pub
是公钥。
通过 cat ~/.ssh/id_rsa
可以读取公/私钥内容。
公钥需要添加到 Gitee 中:
私钥添加到 GitHub 的博客私有仓库。
接下来在 GItee 创建一个仓库,仓库名最好与账户同名。至于原因可以看这里。
创建好后我的是这样的:
顺便把 Gitee Pages 服务开通:
第一次我们需要手动点一下更新,否则后面脚本会执行失败。
接下来写配置:
name: gitee-deploy
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@master
env:
# 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
source-repo: [email protected]:Tit1e/evolly.github.io.git
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: [email protected]:tit1e/tit1e.git
- name: Build Gitee Pages
uses: yanglbme/gitee-pages-action@main
with:
# 注意替换为你的 Gitee 用户名
gitee-username: tit1e
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 注意替换为你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
gitee-repo: tit1e/tit1e
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
branch: master
这是单独一个配置文件,我实际配置文件跟这个略有不同,因为我之前还有一个 Hexo 自动部署的脚本。
如果两个脚本分开写,那么在文章提交后,两个脚本同时执行,但博客自动部署脚本需要安装依赖,生成静态文件,这需要不少时间,而同步 Gitee 的脚本立马就可以执行,这会导致 Gitee 拉取到的代码永远是旧的,因此我把两个脚本合到一起,并规定了执行顺序,下面是我实际的使用脚本:
name: 部署 GitHub Pages 并同步至 Gitee Pages
on:
push:
branches:
- main # master 分支有 push 行为时就触发这个 action
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Build and Deploy
# 使用专门部署 Hexo 到 GitHub pages 的 action
uses: Tit1e/hexo-deploy-github-pages-action@master
env:
PERSONAL_TOKEN: ${{ secrets.HEXO_DEPLOY }} # secret 名
PUBLISH_REPOSITORY: Tit1e/evolly.github.io # 公共仓库,格式:GitHub 用户名/仓库名
BRANCH: master # 分支,填 gh-pages 就行
PUBLISH_DIR: ./public # 部署 public 目录下的文件
async-gitee:
# 需要 build-and-deploy 这个 job 执行完再执行当前脚本
needs: build-and-deploy
runs-on: ubuntu-latest
steps:
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@master
env:
# 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
source-repo: [email protected]:Tit1e/evolly.github.io.git
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: [email protected]:tit1e/tit1e.git
- name: Build Gitee Pages
uses: yanglbme/gitee-pages-action@main
with:
# 注意替换为你的 Gitee 用户名
gitee-username: tit1e
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 注意替换为你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
gitee-repo: tit1e/tit1e
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
branch: master
第二个 job 添加了needs: build-and-deploy
这个配置。有了它,第二个脚本就会在第一个脚本执行之后才开始执行,这样就能保证拉到的博客是最新的。
注意 Gitee 一定要绑定微信公众号。
然后就提交博客源码可以看下执行结果,正常的话 Gitee 会收到登陆提醒。
如果有报错,可以对照错误找解决方案。