发布于 
pv: - | uv: -

利用 GitHub Action 实现镜像存储库

Github Action

Github Action 是 Github 推出的一项持续集成服务, 我们可以利用 Github Action 来实现多平台测试代码, 多平台打包, 访问远程服务等等.

如 github.com/soxft/serverStatus 我就利用 Github Action 实现了代码Push到仓库main分支时, 自动多平台编译并发布 Release.

当然, 这篇文章最主要的还是实现, 当我们push到Github时, 自动将更改同时推送至其他平台.

需求

首先了解一下, 为什么我们需要实现 镜像自己的存储库.

其实很简单, 我们无法确保自己的Github或其他平台账户会不会突然有一天莫名其妙的消失, 或者 有些人会更喜欢去私有化自己的存储库, 想要同时备份到自己的私有服务器上. 但不希望手动push多次.

这个时候我们可以利用Github Action, 在push到Github的同时, 同步一份到Gitee, Gitlab, Gitea…

如何实现

  1. 通过ssh-keygen或其他方式, 创建一个ssh密钥及公钥文件, 将公钥上传至需要同步到的Git托管平台.

  2. 在需要被同步的仓库中, 在settings > secrets > actions处 新建一个secret, Name为 KEY, Value为刚刚创建的私钥.

  3. 在自己的仓库根目录新建一个.github/workflows/mirror.yml 文件编辑其内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
name: 'GitHub Actions Mirror'

on: [push, delete]

jobs:
mirror_to_gitee:
runs-on: ubuntu-latest
steps:
- name: 'Checkout'
uses: actions/checkout@v1
- name: 'Mirror to gitee'
uses: pixta-dev/repository-mirroring-action@v1
with:
target_repo_url:
git@gitee.com:user/repo.git # 远程仓库
ssh_private_key:
${{ secrets.KEY }} # 密钥 (secret)
  1. push代码到仓库, 验证是否有效.

Tips

Gitlab 可能需要在被同步仓库处取消对主分支对protect, 否则可能会失败