axios 同步_githubactions进行github仓库和gitee仓库同步

为何要做同步

github是国际通用的代码托管平台,奈何身处国内,往往受限于网速,如果个人博客项目主页托管在github上的话,访问速度也是十分堪忧

bba3657fc7b3576deead97a456f0ff97.png

让我们把目光瞄准国内,国内的知名替代品主要是giteecoding, 因为在国内,同时有pages的这两家成了我们的首选,这里以gitee为例子,让两个 githubgitee的仓库和pages自动进行同步

为何可以同步

git设计之初其实就是分布式管理的,同步很正常

同步方案

同步方案主要三种

同步上传

通过remote 设定不同的别名,上传两遍

gitee =》 github

这应该是最常用的一种,git远程仓库选用国内的gitee,然后通过gitee的 webhook 触发devops进行同步,缺点是要自己准备devops,出一份钱

github =》 gitee

借助万能的github actions在代码提交,合并之后自动调用写好的action进行同步

当然,人工点也可以,gitee提供了对应服务

github => gitee 同步方案

代码库同步

借助wearerequired/git-mirror-action@master这个git自动同步的actions, 我们可以实现任意仓库自动同步
闲着没事上去点一下也没问题

actions

以下是我使用的.github/workflows/sync.yml 记得修改 source-repodestination-repo为对应的两个仓库

name: Sync To Gitee
on: page_build
jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: wearerequired/git-mirror-action@master
        env:
          SSH_PRIVATE_KEY: ${{ secrets.GITEE_PRIVATE_KEY }}
        with:
          source-repo: "git@gitee.com:mizuka/Mizuka.gitee.io.git"
          destination-repo: "git@gitee.com:mizuka/Mizuka.gitee.io.git"

因为有page的关系,所以触发条件改为了page_build,如果只是普通的同步的话,可以把on换成对应的触发条件

添加钥匙

接下来是增加私钥, 因为同步过程通过ssh触发,我们需要使用 ssh-keygen 命令生成一对公钥私钥,注意命名,然后将公钥(***.pub)的内容添加到githubgitee的可信名单里

接下来,在对应的仓库settingsecrets中添加GITEE_PRIVATE_KEY,内容为之前的私匙

这样子,每次部署之后,github 会自动推送到 gitee

pages 同步

如何开启 pages

  • github 普通项目gh-pages分支和 用户名.github.iomaster分支会自动开启github pages
  • gitee 服务里有gtiee pages服务,点击打开

gitee 的问题

giteepages服务如果没有花费99/年开启gitee pages pro服务的话,每次仓库有更新的话,是不会自动更新重新部署的,也就是说你还得进去更新部署一次

gitee 自动部署方案

花钱

99/年,有钱可以为所欲为

人工

上去自己点一下重新部署就行啦

模拟登录调用

其实抓取以下接口就能发现 直接通过POST: https://gitee.com/${repository}/pages/rebuild 这个接口进行的,那么我们只要模拟登录就可以了

以下是爬取的接口,用axios调用的例子

axios.post(
  url + "/rebuild",
  qs.stringify({
    branch: core.getInput("branch"),
    build_directory: core.getInput("directory"),
    force_https: core.getInput("https")
  }),
  {
    headers: {
      "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
      Cookie: cookie,
      Referer: url,
      "X-Requested-With": "XMLHttpRequest",
      "X-CSRF-Token": csrfToken
    }
  }
);

主要是headers里的 Content-Type, X-CSRF-Token, Cookie特别重要,页面的参数对应这页面的几个按钮,应该很好理解

其中,Cookie 可以devtools中直接拿到,X-CSRF-TOKEN经过调查,被写在了<meta content="" name="csrf-token"></meta>上,通过获取任意一个页面然后拿到即可,否则会403

具体参考我封装的插件

github actions

我个人封装了一个 actions 只要在steps上追加一个step即可

- name: reload
  uses: mizuka-wu/gitee-pages-action@v1.0.0
  with:
    repository: mizuka/Mizuka
    cookie: ${{ secrets.GITEE_COOKIE }}

当然,需要增加一个GITEE_COOKIE和设定repository

查看文档

总结

见山开山,遇水架桥github actions的推出真的是提供了很多新的玩法

欢迎来看我的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值