Skip to main content

Command Palette

Search for a command to run...

一个gitlab的镜像草案

Updated
1 min read

背景

笔者所在的团队(目前已离职)是服务于移动客户端团队的一个CI/CD平台,内部叫做mPaaS,负责移动客户端从源码到App上架到应用市场的整个生命周期。mPaaS团队用的CI平台是Jenkins,Jenkins master部署在腾讯云上,Jenkins agent部署在笔者所在公司;源码使用公司自托管的gitlab,部署在腾讯云上,公司办公网与腾讯云使用专线打通。

问题

因为一些历史原因,有一些项目的repo达到GB级别,虽然挺无语但确是真实存在的,而且这还不是个案,百MB级别也有不少,虽然公司办公网有专线加持,但是gitlab是公司自己维护的,会有一些不稳定的情况发生,加之公司的出口带宽是有限的、gitlab是全公司共用的,这就导致有时候pull源码会非常慢,进而影响到构建效率。这个问题笔者也琢磨挺久的了,如果没有离职,下一Q应该会解决

草案

其实还挺容易想到的:用空间换时间,做一个gitlab的镜像。因为gitlab是共用的,而移动端的源码仓库是有限的,所以用gitlab这种重量级的方案做镜像并不划算,于是轻量级的git自托管平台gogs就进入了我的视野,当然,gogs需要部署在公司,因为构建节点也是在公司。思路明确,实现方案也就清晰了

image.png

  1. checkout

    由于源码的checkout使用的是团队自己编写的shell脚本,自然可以在checkout时判断repo是否有在gogs中存在对应的镜像副本,如果是,转到步骤2;如果不是则转到步骤3

  2. gogs

    虽然没有实际测过,但同在办公网中,git clone from gogs 自然是飞快,考虑到镜像存在同步不及时的问题,需要增加 git remote set-url origin gitlab这一步,因为git是增量下载,所以同步不及时的情况下,理论上下载也会比直接从gitlab上更快

  3. sync

    既然镜像仓库不存在,触发一次同步就好了,这次用不上,下次也用的着。

  4. 定时

    作为补充,gogs可以每隔一小时自动触发一次同步,这么做是为了最小化影响业务方,最大化借力gogs的镜像功能。

总结

其实还想过其它方案,比如架设一个p2p式的git文件系统,调研过d7y,总觉得过于复杂了,这个主要是给容器镜像用的,虽然文档上支持文件系统,但没有找到相关的最佳实践,而且终究还是跳不开镜像这一步,所以就放弃了。也考虑过给gitlab的目标repo增加webhook,用于触发gogs的同步,但始终需要业务方去支持,还存在不可控的风险。综合来看,从checkout脚本入手,再加上gogs加持,理论上源码pull这一步在时效上肯定会有所提高的,投入也不算大,不侵入业务,而且可以灰度进行,进一步降低了业务上的风险。可惜的是该草案还没来得及评审落地……不过到目前为止,笔者依然相信该草案是可行的。

More from this blog

2025: 祛魅 灰度 念头通达

今天是2025年的最后一天,当大家都在准备下班的时候,好巧不巧的,我刚好发现了一个不大不小的问题,大胆猜想,小心求证,向上反馈,暴露风险,作为2025年工作注解,实在是再有趣不过了。 今年的工作,从结果上看,还算平稳,至于过程,有太多不可言说的部分。厂里打镙丝的牛马,有工资可拿,理应知足了,至于其它的,与己无关,也没那么重要了。 祛魅 近距离观察大厂,才发现一些违背常识/直觉的事实:路人以为的高大

Feb 28, 20261 min read21

大厂祛魅:破碎的专注力

毁掉一个人最直接的方法,就是毁掉ta的专注力。 这句话的出处已然模糊,但放在大厂环境中,却显得格外深刻。 围城 大厂宛如一座围城。城外的人满怀憧憬,目之所及皆是光鲜;城内的人却如困笼之鸟,翅膀日渐退化,每日挣扎求生。 高大上 不可否认,大厂的硬件设施确实令人艳羡:宽敞的独立园区内,来往穿梭的人群中,几乎人人手握智能设备。这看似现代化的景象背后,却藏着一个无奈的事实:在工作时段,每台电脑都被严密监控,连听音乐都成奢望。于是,工作之余玩手机,成了许多人难得的解压方式。 大厂的品牌效应确实强大。外界对...

Jul 29, 20251 min read138

Black Swan

黑天鹅理论 是指极不可能发生,实际上却又发生的事件 来到大厂打工已经满一个月了,从一开始的手足无措,到逐渐度过不适期,也算是适应了吧。 不适应 刚入职时,不适应的地方还是挺多的。 第一次只使用台式机工作,这就限制了我一天中的绝大部分时间,都必须呆在自己的工位上,好在工位足够大。只是人与人的沟通少了很多,有问题只能在工位上通过 IM 呼对方,有种魔幻又现实的感觉 第一次只能用 Windows,也不能 WSL,这给我的工作效率带来了很大影响,不能用熟悉的软件,就连写代码用的 VSCode 的...

Jan 24, 20251 min read74

2024年: 逐渐平静

这个世界是一面镜子,会把你的感受反射给你 2024 开端: 相由心生 那时,还带着一着愤懑,因为拿到了低绩效,虽然内心知道这是公司经营困难,想让我离开的一种策略,但仍然感受到自己那可笑的自尊受到了践踏。自那之后,非必要不加班,只做份内事,尽可能地不去涉及份外之事。 2024 年中: 与人为善 组里的项目眼见不行了,我被迫去支援 AI 项目,久违地写起了 python,项目接近完成时,意外收到通知:我拿到大礼包了。在这之前,架构师因故裸辞。在我离开之后不到两周,我的 TL 也裸辞了,直到同事告诉...

Jan 9, 20251 min read92

企业软件之殇

殇 动词 未成年而死。 名词 战死者。 笔者经历了两家打着云原生旗号的企业软件/解决方案公司,都是中途加入,项目都以解(失)散(败)告终。 云原生解决方案 NB 公司:一个传统的 IDC 小厂,想着借云原生的热度,进军企业软件市场。 在加入这个项目之前,笔者考取了 CKAD 认证,彼时对 K8s 相当着迷。先简要介绍一下这个项目背景: 基于 Rancher (换皮肤)的二次开发项目,名字叫:HCaaS ,在笔者加入这个团队之前,项目已经开发近两年了,除了 TL 之外,其它人之前都...

Jul 1, 20241 min read103

just for fun

57 posts

I'm a Software Engineer