上一篇我讲了通过 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 会收到登陆提醒。

如果有报错,可以对照错误找解决方案