前言
写这篇文章的初衷是昨天晚上记录一下我从gitee迁移到codeup的一系列过程,其中最后一步涉及到了github与codeup代码的双向同步,所以记录趁热记录一下我的github action如何使用。
More Hub Mirror Action
我给这个github action起名叫做More Hub Mirror Action,代表它能在多个hub托管平台之上相互同步代码,主要用来做代码备份以及开源镜像同步。
我的介绍大概是这样写的:
一个用于在hub间(例如Github,Gitee、Coding,不局限,可以是所有)账户代码仓库同步的action,这个项目脱胎于Yikun/hub-mirror-action@master。
由于我是想要一个纯粹的不同的hub之间 同步的脚本,所以将该脚本进行了删减,不是作者做的不好,只是我仅仅需要简单的功能罢了
目前只支持,也只会支持两个仓库必须在两个hub之间存在的情况,不再创建新的仓库(由于创建仓库需要api支持,但是为了更通用,所以决定不支持对应的功能)
根据能量守恒定律,失去些什么,必然能得到些什么,这样就可以在不同的hub之间同步数据,不管是 从 github->gitee 还是 gitee-github 都可以支持到
src、dst 都需要写全路径了,例如:github.com/kunpengcompute
static_list 是必传参数,因为不会再动态获取对应的repos了
dst_key 也是必传参数,因为为了安全考虑,我决定全部使用ssh的方式进行同步,如果后期有需要,可以兼容https
怎么用
同步过程主要分为两步:
- 使用定时任务同步或者使用github的webhook触发同步
- 配置好对应的项目,然后让github action跑起来即可。
创建一个单独仓库,专门用来跑github action
创建好对应的github action,有两个,可以使用同一个action进行操作,我创建的仓库名是:github-sync
,下面我都以该仓库名作为github action的webhook进行请求。
先要做几个准备:
该仓库下的github action配置如下:
1 | # This is a basic workflow to help you get started with Actions |
简单说明:
codeup_push,这个是webhook和github约定好的event,填已有的即可
secrets.GIT_PRIVATE_KEY 这个是上面提到的ssh密钥,及时放在github的secrets中
src、dst使用除了https之外的个人路径全路径,src和dst可以随便填你想要同步的两个hub,甚至可以不是github(身在曹营心在汉的即视感)
github.event.client_payload.repo 这个是你在webhook中提到的你要同步的仓库
在任意处创建对应的webhook请求github api同步仓库
1 | curl -X POST -H 'Accept: application/vnd.github.v3+json' -H 'Authorization: token ${github-token}' https://api.github.com/repos/dislazy/github-sync/dispatches -d '{"event_type":"codeup_push","client_payload":{"repo":"${repos_name}","message":"github action sync"}}' |
简单说明:
- github-token 替换为你准备工作中创建的github token
- repos_name 你需要同步的仓库列表,多个用
,
分隔开即可 - event_type 就是上面约定的event密钥,保持一致即可
总结
我目前使用以上的脚本基本上分为两个大块:
- 使用定时任务执行github api,用来同步一些固定需要同步的仓库,如果仓库新增了直接改webhook的请求参数即可
- 当codeup提交代码的时候使用对应的flow工作流触发github api请求,异步完成github 同步请求
开源的工具有很多,大多数都是为不同的需求不同的人群定制的,如果找不到合适的,如果有能力改一改也是极好的。