使用 GitHub Acitons 实现 push 自动同步到 Gitee 仓库

废话前言

无用的废话
  • 我的个人博客是通过 Github 的 Pages 技术搭建的静态博客,使用 Hexo 驱动。
  • 由于 Github 在国内环境访问速度慢,并且不够稳定,所以通常对外介绍使用 Gitee 的镜像博客仓库,但是每次都需要在推送 Github 之后去 Gitee 上对应的仓库进行 手动同步,就无端增加了很多重复的工作量.
  • 经过多方搜索和实践,最终选定了 Github Actions 实现代码自动Build,同步到Gitee.

关联教程

一、本地公钥和私钥

1. 生成

本地终端 输入以下代码 (邮箱换为自己的),不要犹豫,一路 Enter 即可, 出现下图即表示成功

1
ssh-keygen -t rsa -C "pupper.cheng@gmail.com"

如果已经有了 私钥 公钥,可能不会有上图的效果.

2. 验证

在终端输入以下代码, 出现 id_rsaid_rsa.pub 两个文件即表示生成成功.

  • id_rsa: 私钥
  • id_rsa.pub: 公钥
1
cd ~/.ssh && ls

二、给 Gitee 和 GitHub 添加公钥

1. 查看公钥

在终端输入以下代码查看公钥

1
cat ~/.ssh/id_rsa.pub

公钥大概长这样 :angry:

2. 给 Gitee 添加公钥

点击个人头像 设置 —> SSH公钥 —> 标题(随便填) —> 公钥(上一步获取的公钥)

3. 给 GitHub 添加公钥

  • 点击个人头像 设置 —> SSH与GPG公钥 —> 新建SSH秘钥 —> 标题(随便填) —> 公钥(上一步获取的公钥)
  • 点击个人头像 Settings —> SSH and GPG keys —> New SSH key —> 标题(随便填) —> 公钥(上一步获取的公钥)

什么,想知道我的 GitHub 为什么是中文🥺, 油猴:monkey_face: 了解以下🤪

4. 验证公钥是否添加成功

在终端输入以下代码, 返回下图内容即表示添加成功

1
2
ssh -T git@github.com
ssh -T git@gitee.com

三、给 GitHub 源码仓库添加私钥

1. 获取私钥

在终端输入以下代码,可获取私钥, 大概长下图这样

1
cat ~/.ssh/id_rsa

2. 给源码仓库设置私钥

  • 源码仓库 设置 —> 机密和变量 —> 操作 —> 标题(需要记住) —> 私钥(上一步获取的私钥)
  • 源码仓库 Settings —> Secrets and variables —> Actions —> Name(需要记住) —> Secret(上一步获取的私钥)

四、Gitee 创建镜像库

在 Gitee 创建一个镜像库, 当我们 在源码库 提交代码时, 先构建好 github.io 再同步到 gitee

五、修改 workflows

.github/workflows/autodeploy.yml 添加以下代码, 按注释修改即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
async-gitee:
# 需要 deploy 这个 job 执行完再执行当前脚本
needs: deploy
runs-on: ubuntu-latest
steps:
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@master
env:
# 替换为 源码仓库中设置的私钥名称, 即上面步骤中 让记住的名称
SSH_PRIVATE_KEY: ${{ secrets.HEXO_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
source-repo: git@github.com:Pupper0601/Pupper0601.github.io.git
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: git@gitee.com:pupper/Pupper0601.github.io.git

以下是我的配置文件, 仅供参考你

.github/workflows/autodeploy.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
name: 自动部署
# 当有改动推送到master分支时,启动Action
# 教程文档 https://zhsher.cn/posts/8779/#4-3-%E6%96%B9%E6%A1%88%E4%B8%89
on:
push:
branches:
- main
# 2020年10月后github新建仓库默认分支改为main,注意更改

jobs: # 工作流
deploy: # 自定义名称
runs-on: ubuntu-latest # 运行在虚拟机环境
name: 编译 hexo 博客

steps:
- name: 1. 拉取主库代码
uses: actions/checkout@v4

- name: 2. 拉取主题代码
uses: actions/checkout@v4
with:
repository: Pupper0601/hexo-theme-anzhiyu
ref: my-theme
path: themes/anzhiyu

- name: 3. 安装 Node
uses: actions/setup-node@v3
with:
node-version: "16.x"

- name: 4. 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

- name: 5. 缓存 Hexo
uses: actions/cache@v3
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('package-lock.json')}}

- name: 6. 安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install gulp-cli -g #全局安装gulp
npm install --save

- name: 7. 生成静态文件
run: |
hexo clean
hexo bangumi -u #bilibili番剧更新
hexo generate
hexo algolia
gulp
- name: 8. 部署到Github
uses: JamesIves/github-pages-deploy-action@v4
with:
token: {{secrets.HEXO_TOKEN}}
repository-name: Pupper0601/Pupper0601.github.io
branch: main
folder: public
clean-exclude: |
public/.github
commit-message: "${{ github.event.head_commit.message }} 由Github Actions更新"

async-gitee:
# 需要 deploy 这个 job 执行完再执行当前脚本
needs: 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.HEXO_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
source-repo: git@github.com:Pupper0601/Pupper0601.github.io.git
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: git@gitee.com:pupper/Pupper0601.github.io.git

六、现在可以提交代码试试了(^▽^)