众做周知的原因,国内访问Github越来越不稳定,虽然平时自己提交代码什么的还能将就,但是做cicd你肯定不想push完代码,结果cicd克隆代码失败导致流水线中断,这肯定是令人非常烦躁的,所以最简单的办法实际上是你干脆不用Github,用gitee之类的国内代码仓库,但我们这种已经在Github安了家的老程序员了,并不想轻易搬家,所以研究一个个比较简单且可行的方案,就是在自己的服务器建立一个镜像代码仓库,然后通过Github的git action自动推送到代码仓库。
本文使用gitea是因为gitea更轻量,更适合个人使用,且功能也非常强大,如果您已经自建了gitlab之类的代码仓库,那么完全可以使用您自己的代码仓库。
安装Helm3或使用LensApp
本系列cicd使用的应用均使用helm进行部署,helm类似k8s的包管理工具。
如果您不想使用Lens进行k8s操作的话,您可以参照此文章的安装Helm部分。
添加gitea和drone的charts仓库
helm repo add gitea https://dl.gitea.io/charts/
helm repo add drone https://charts.drone.io/
helm repo update
或者在Lens的设置中添加repo:

安装charts的位置:

之后安装的过程中我们需要对Gitea进行自定义配置,也就是指定values.yaml,在使用helm install时,通过-f指定一个values文件,我们接下来就来编写这个文件。
编写Values安装Gitea
Lens点击gitea后选择install会弹出一个模板文件,而命令行的话,自己新建一个yaml就可以了,然后内容参照此文件。
关于values的配置可以参考官方仓库的文档,而gitea本身的配置可以参考配置说明。
编写value后就可以进行安装了,
安装后检查pods启动是否正常,如果有问题就查看一下pod logs,注意你需要自行创建配置文件中的gitea数据库。
都没有问题后,访问你配置的ingress host打开gitea进行登录就OK了。

配置镜像流程
接下来就是重头戏了,我们镜像仓库的流程是这样的:
用户push代码 -> github触发git action -> git action 推送代码 -> gitea代码仓库更新
创建镜像仓库
首先我们需要先在gitea创建一个仓库,该仓库名称随意,但建议和你Github要镜像的仓库名保持一致,登陆你的gitea管理员账户,点击右上角创建一个仓库,除了名称外其他都不用动,点击确定创建仓库:

然后复制这个http的clone链接以备用。
获取gitea的个人AccessToken
要让Github推送代码到你的私人仓库,用脚想都知道肯定需要什么凭证之类的,这里我们需要在右上角设置里,找到应用一栏,生成一个AccessToken,持有此token就视为拥有此仓库账号的所有权限:

注意这个AccessToken生成后只会出现1次,所以要保存好备用,如果丢失只能重新再生成一个。
到随便一个什么地方比如百度搜一个站长工具,把这个AccessToken给base64一下,因为稍后用到的gitaction需要此格式。
创建仓库机密
拿到Base64后的AccessToken后,打开Github,选择你要镜像的仓库,点击Settings-Secrets,创建一个Secret,Key名称叫做PAT,Value则是你的AccessToken:

创建Gitaction的yml文件
该文件应该在以下目录创建:

我们直接简单点,点开仓库的Actions,点击左上角的new workflow,再点击set up a workflow yourself 自动创建一个空白的工作流文件,之后删除里面的内容,复制为以下内容:
on:
push:
workflow_dispatch:
jobs:
mirror:
runs-on: ubuntu-latest
steps:
- name: mirror
uses: mathisve/git-mirror-action@latest
with:
originalURL: https://github.com/StoneShiLei/HuLuProjectApi.git
originalBranch: master
mirrorURL: https://gitea.hafuhafu.cn/StoneShiLei/HuLuProjectApi.git
mirrorBranch: master
verbose: true
force: true
tags: true
pat: ${{ secrets.PAT }}
具体的不详细说,有兴趣自己去研究下gitaction,这里只浅述这个action怎么使用,首先两个original开头的,是你要镜像的仓库和分支,而mirror开头则是要镜像入的仓库url和分支,前者填写你Github的url,后者填写你gitea的url,注意必须是.git结尾的url,然后pat处不要坐更改,这里是引用了你的仓库机密,也就是你gitea的AccessToken,之后点击保存。
验证
此时尝试提交一下代码到Github,如果一切正常,就可以看到你的gitea已经被同步push了代码:

结语
那么Github镜像仓库到Gitea就已经完成了,接下来就是Gitea触发drone来自动CI了。