• Post author:
  • Post category:运维
  • Post comments:0评论
  • Reading time:6 mins read

众做周知的原因,国内访问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了。

葫芦

葫芦,诞生于1992年8月11日,游戏宅,胶佬,爱好摸鱼,一个干过超市收银,工地里搬过砖,当过广告印刷狗,做过电焊铁艺的现役.Net程序员。

发表回复