使用GitHub Action自动同步代码到Gitee


本blog的出现是为了能够分享个人所学的相关知识,检验自身学习成果。内容会和其他技术存在部分关联,如有任何描述错误或者说明有误的地方,还望指出。

1. 背景

在代码托管的过程中,我们有时候需要将GitHub的代码同步到其他托管平台(Gitee、GitLab等)的需求。主要关系是:以GiHub为主仓,并且定期自动同步到Gitee作为镜像仓库。GitHub Pages及Gitee Pages自动更新部署。

2. 方案

2.1 Gitee手动同步

Gitee本身是提供了其他平台仓库绑定及绑定仓库同步的功能。这个功能是可以满足需求的。但是,作为一个程序员,能自动完成的事情坚决不靠人力去完成。而且如果一个组织下发展到了几百上千个仓库后,手动同步的缺陷就十分明显了。这个时候就需要某种计算机资源自动的完成同步操作。所以这个方案排除。

2.2 GitHub Action

其实GitHub Action是GitHub的持续集成服务。它能够在指定操作时触发脚本功能。就选这个方案了。GitHub Action的功能是很强大的。关于GiHub Action的详细内容可以看GitHub Action官网

持续集成在项目中有着很重要的地位,推荐大家去了解了解。

3. 具体操作

3.1 准备工作

3.1.1 Github和Gitee的邮箱绑定

代码托管平台的邮箱在这里其实很重要,我在这里踩过一个坑。邮箱关系到ssh公钥私钥。推荐所有托管平台的邮箱统一。

3.1.2 根据托管平台的邮箱生成ssh的公钥私钥

git bash 中敲入命令 会在 ~/.ssh 文件夹下生成 id_rsa.pub 文件和 id_rsa 文件,分别存放公钥和私钥

ssh-keygen -t rsa -C "user@email.com"

3.2 将公钥添加到Gitee

Gitee:[设置] -> [安全设置] -> [SSH公钥]

3.3 将私钥添加到GitHub中需要备份的仓库的Secrets中

GitHub Repository -> [Settings] -> [Secrets]

GitHubAction-1.png GitHubAction-2.png

记住Name的值,将私钥填入Value中。

3.4 配置GitHub Action文件

3.4.1 在需要备份的仓库的根目录下新建文件配置文件

路径为: .github/workflows/gitee_mirror.yml ,并在gitee_mirror.yml中添加以下内容。

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:xxxxxx/xxxxxx.git
          ssh_private_key:
            ${{ secrets.GITEE_PRIVATE_KEY }}

以上action中存在 repository-mirroring-action,这个有兴趣的可以了解。

3.4.2 其中需要注意的有这几个配置

on : 该配置项表示在指定操作事进行同步

target_repo_url : 该配置项填代码备份目的平台仓库的ssh 地址

ssh_private_key: 该配置填写在GitHub中配置的Secrets。在本文3.3步骤中提到记住的Name,我配置的Name是GITEE_PRIVATE_KEY。

附上我配置的workFlow文件

3.5 提交配置文件

在GitHub的Actions中可以看到生效的workflow

GitHubAction-3.png

  目录