文章转载

作者:SSgeek

链接:https://mp.weixin.qq.com/s/9IvYUurEqw9JU1UR714Yow

来源:仙人技术

1、什么是Github Action

github actiongithub推出的自动化CI/CD的功能,随着201911月后github对该功能的全面开放,现在所有的github用户可以直接使用该功能

github action的语法类似于gitlab ci,与之相比,还有更多优势,例如:

  • actiongithub各个事件的支持更为全面,如releasepull-requestissue事件等等
  • action支持直接使用别人编写好的action
  • action的执行器类似于gitlab runner,可以使用github托管的执行器,也可以托管自己的执行器。甚至在action运行的时候,还可以通过某些特殊技巧进入到执行器里面,相当于一台临时的服务器供我们使用

更多这里不再介绍,感兴趣的小伙伴可以自行搜索

2、github 和 gitee 同步

github的服务器在国外,因为某些原因,在大多数的网络环境下都是无法顺畅访问的

gitee的服务器在国内,由国内公司运营

纵使如此,大多数开发者还是习惯使用github(远在海外,也要想尽各种办法)

那么为什么需要把githubgitee的仓库进行同步呢?原因不言而喻

目前可用的进行同步的方法可能有:

  • 利用gitee官方的同步(导入github项目),这种方法只能一次性导入

  • 本地同时关联giteegithub,提交时都push一份,这种方法纯属手动

  • 利用github action

下面介绍利用github action如何实现githubgitee的持续同步

3、选用或编写 action

实现githubgitee同步的思路主要是基于我们的账户调用githubgitee各自的api接口和密钥通信,在执行器内拉取并推送代码库到gitee

action的编写语法和gitlab ci很相似,同时github还推出了官方的action市场,地址为 https://github.com/marketplace

这里我们使用的actionYikun/hub-mirror-action

4、准备5.1 设置 dst_key

github上打开一个自己的仓库,这里以我的个人公开仓库为例

首先在本地生成一个ssh密钥对工作

# ssh-keygen -t rsa -f ~/Documents/ssh-key/id_rsa

github打开settings—>secrets,新建一个secret,名为GITEE_PRIVATE_KEY,值为上面生成的密钥对的私钥

然后登录到gitee,在个人设置—>安全设置—>SSH公钥中添加上面生成的密钥对的公钥,命名随意

5.2 设置 dst_token

gitee打开个人设置—>安全设置—>私人令牌,新建一个私人令牌,命名随意,复制生成的令牌值

github打开settings—>secrets,新建一个secret,名为GITEE_TOKEN,值为上面复制的令牌值

6、github 同步到 gitee

在刚才的GitHub仓库中,新建 .github/workflows/SyncToGitee.yml 文件,其中.github/workflows/是固定的目录名

内容如下

name: Sync Github Repos To Gitee

on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-20.04
steps:

- name: Sync Github Repos To Gitee # 名字随便起
uses: Yikun/hub-mirror-action@v1.1 # 使用Yikun/hub-mirror-action
with:
src: github/like-ycy # 源端账户名(github)
dst: gitee/like-ycy # 目的端账户名(gitee)
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }} # SSH密钥对中的私钥
dst_token: ${{ secrets.GITEE_TOKEN }} # Gitee账户的私人令牌
account_type: user # 账户类型
clone_style: "https" # 使用https方式进行clone,也可以使用ssh
debug: true # 启用后会显示所有执行命令
force_update: true # 启用后,强制同步,即强制覆盖目的端仓库
static_list: "Linux-Commands" # 静态同步列表,在此填写需要同步的仓库名称,可填写多个
timeout: '600s' # git超时设置,超时后会自动重试git操作

提交该action,观察github上的执行视图

执行完毕后

此时打开gitee,就会发现自动创建了同名称的仓库且自动提交了同样的代码