一、背景:研发代码为什么必须自己管
研发团队写的代码就是公司的核心资产——产品软件、内部系统,全在里面。这件事上我的原则很明确:
- 代码不出内网:源码必须放在自己的服务器上,不依赖任何外部平台的可用性;
- 账号跟着组织走:谁入职谁能用、谁离职谁立刻失效,不能靠人肉维护;
- 成本可控:免费开源优先,不为用不上的功能付费。
带着这三个原则,开始选型。
二、选型对比:SVN、Gitee、GitLab
| 维度 | SVN | Gitee 社区版 | GitLab(自建) |
|---|---|---|---|
| 技术代际 | 集中式,上一代 | 分布式 Git | 分布式 Git |
| 数据位置 | 自建,内网 ✅ | ✅ 社区版可自建 | 自建,内网 ✅ |
| 代码评审/MR | ❌ 没有 | ✅ 基础可用 | ✅ 业内标杆 |
| CI/CD | ❌ | ❌ 社区版不含 | ✅ 原生内置最强 |
| 免费档功能 | 免费但老旧 | 可自建但功能基础 | ✅ CE 全功能免费 |
| 二次开发 | 受限 | ⚠️ 开源但生态单薄 | ✅ MIT 开源随便改 |
| 生态与招聘 | 持续萎缩 | 国内较好 | ✅ 全球主流 |
结论没有太多悬念:SVN 是上一代工具,Gitee 社区版虽可私有化部署但功能单薄(无内置 CI/CD、评审与权限体系偏弱),GitLab 自建是唯一同时满足「内网 + 免费全功能 + 开源可二开」的选项。
三、GitLab 国内版 vs 国际版
定了 GitLab 之后还有第二道选择题:极狐 GitLab(JH,中国发行版)还是国际版 CE?两个版本我都实际研究了,关键事实如下:
| 维度 | 国际版 CE | 极狐 JH(基础版) |
|---|---|---|
| 性质 | ✅ MIT 真开源 | ⚠️ 免费但商业授权 |
| 内核版本 | 19.3.1 | 19.3.1(同号同步,不落后) |
| 免费档核心功能 | 代码/MR/CI-CD/Wiki 全量 | ✅ 完全一致(同一功能档位) |
| 钉钉扫码登录 | ❌ 17.0 起官方移除 | ✅ 内置,开箱即用 |
| 升级通道 | 可平滑升官方 EE(全球标准) | 只能升极狐付费版 |
| 软件源 | 国外源,需镜像加速 | 国内源,快 |
| 技术支持 | 英文社区 | 中文 400 支持 |
我的选择是国际版 CE,理由就一条:它是真开源,装完就没人管我——无激活、无协议锁、升级通道自由。至于它缺的钉钉登录,后面的故事证明:这恰恰是 AI 最能发挥的地方。
给读者的判断框架:要省事、要钉钉登录开箱即用、要中文支持 → 选极狐;要真开源、要自由度、团队有动手能力(或有 AI)→ 选国际版 CE。
四、两小时实录:AI 动手,我说人话
先交代环境:一台 VMware 虚拟机,Ubuntu 24.04 LTS,8 vCPU / 11G 内存,纯内网——没有任何特殊硬件,企业里随便一台闲置服务器或虚拟机都能复现本文全部过程。
整个落地过程我只有两类动作:用大白话提需求,以及在 AI 需要决策时拍板。剩下的——连服务器、装包、改配置、排障、写网关——全是 AI 干的。时间线如下(不含软件包下载等待):
| 阶段 | 我的输入 | AI 的输出 | 耗时 |
|---|---|---|---|
| 环境准备 | 「检查服务器状态」「关闭图形界面省资源」 | 体检报告、系统瘦身、软件包升级 | — |
| 部署 GitLab | 「部署 GitLab 19.3.1 供研发使用」 | 规划方案 → Omnibus 安装 → Runner → 每日定时备份 → 管理员凭据落盘 | ~40 分钟 |
| 钉钉集成与调试 | 「集成钉钉免登,入离职自动同步」 | 自建 OAuth2 网关 → 扫码登录 → 组织架构真名 → 入离职同步定时器,含全部调试排障 | ~80 分钟 |
这就是标题里「两小时」的构成。同样的活,没有 AI 的情况下,一个熟悉 Linux 的工程师大概需要两到三天——查文档、试配置、踩坑、回滚、再踩。
五、第一步:一句话装好 GitLab
搭建阶段的提示语简单到不好意思:
# 搭建(一步到位装 19.3.1)
"我需要在本地部署 GitLab 19.3.1 供研发同事使用,作为代码管理系统。请先规划部署方案"
"开始实施"AI 拿到第一句话后自己完成了:方案规划(内存分配、端口、备份策略)→ 换国内镜像源加速 → Omnibus 安装 → 注册 Runner → 配置每日凌晨 2 点自动备份(保留 7 天)→ 把管理员凭据落盘到 600 权限文件。我全程只看了一眼方案,说了句「开始实施」。
六、第二步:官方不支持的钉钉登录,AI 自己造了一个
这是全文最值得讲的部分。GitLab 国际版从 17.0 起移除了钉钉登录组件——但 CE 是开源的,而且内置了「通用 OAuth2」模块。AI 给出的方案是:不改 GitLab 一行代码,在旁边搭一个 50 行核心逻辑的「翻译官」网关:
研发浏览器 ──点击「钉钉登录」──▶ GitLab (oauth2_generic 通用模块)
│ 标准 OAuth2
▼
自建网关 (Flask, 内网 5201 端口)
# 职责: 协议翻译 + 账号映射 + 真名补全
│
▼
钉钉开放平台 (扫码授权 / 通讯录)最终实现的效果,全部自动化:
- 扫码免登:GitLab 登录页多一个「钉钉登录」按钮,扫码确认即进系统,首次登录自动建号;
- 组织架构真名:显示名自动取钉钉通讯录里的员工姓名(而不是个人昵称),每次登录自动同步;
- 入离职同步:每 15 分钟核查一次在职状态——离职自动禁用账号(会话立即失效)、复职自动恢复,管理员账号受保护、接口异常时宁漏勿错;
- 权限管控:建号默认普通权限,项目和群组权限在 GitLab 内按需分配,凭据全部
600权限落盘、不进任何代码仓库。

七、调试实录:三个教科书上没有的坑
这部分最能体现 AI 的价值——不是「不犯错」,而是报错之后能读懂源码级线索并自愈:
- 钉钉接口已下线:文档里写的
oauth2/userinfo端点实际返回「api is not found」。AI 用真实凭据对候选端点逐一探测,确认现役端点是contact/users/me; - 认证头不是标准写法:钉钉不用 OAuth 惯例的
Authorization: Bearer,而是自家的x-acs-dingtalk-access-token,按惯例写直接被网关拒绝; - 官方文档与源码不符:GitLab 文档示例用
options键配置,但 19.3.1 源码实际只认args,配置被静默丢弃、跳转到了 gitlab.com 默认地址。AI 直接读 initializer 源码定位,一键修复。
这三个坑的共同点:搜索引擎都搜不到答案——要么是接口刚下线,要么是文档错了。解法是同一个:读源码、做实验、用证据说话。这恰好是 AI 最擅长、人类最耗时的部分。
八、稳定运行:重启自愈,无人值守
落地不是装完就完,还得稳。收尾时 AI 做了一整套生产化加固:
- 网关从开发服务器换成
waitress生产级 WSGI,systemd守护,kill -9实测 5 秒内自动复活; - 登录网关、同步定时器、GitLab 本体全部开机自启,服务器重启零人工干预;
- 钉钉 API 全部带超时与降级(组织架构查不到就回退昵称,不阻断登录);
- GitLab 每日自动备份,保留 7 天。
九、抄作业:提示语清单
整个项目用到的提示语全部在这里,按阶段分组、附 AI 行为说明,没有任何「魔法咒语」,就是说人话:
# 第一阶段: 环境检查与准备
"连接服务器 ssh: <IP>, 账号 <用户名>, 检查 CPU/内存/磁盘/网络状态"
# → AI 输出体检报告, 并给出优化建议
"关闭 GNOME 图形界面, 改命令行启动, 节省内存给 GitLab 用"
"执行软件包全量升级, 完成后清理废弃包并重启"
# 第二阶段: 部署 GitLab(一次说清需求)
"我需要在内网服务器部署 GitLab 供研发同事使用, 作为代码管理系统。
要求: 最新稳定版 19.3.1, 每日凌晨自动备份并保留 7 天,
注册一个 shell Runner 备用。请先规划部署方案。"
# → AI 输出完整方案(资源/端口/备份/安全), 你确认后:
"开始实施"
# → 安装、初始化、Runner、备份、凭据落盘, 全自动完成
# 第三阶段: 钉钉集成(先分析、再实施, 两步走)
"GitLab 是否能跟钉钉集成? 需要扫码免登和账户管理, 请先分析可行性"
# → AI 给出结论: 国际版已移除钉钉组件, 但内置通用 OAuth2 模块,
# 可自建网关零改动实现; 同时告诉你需要准备钉钉企业内部应用凭据
"我已创建好钉钉企业内部应用(CorpId/AppKey/AppSecret 附后), 请开始实施。
要求: 扫码免登并自动建号, 显示名取钉钉组织架构姓名, 无邮箱的员工自动兜底"
# → AI 部署网关、配置 GitLab、联调到扫码成功
# 第四阶段: 验收与生产化(最容易被忽略、也最关键的一句)
"检查现在代码是否健壮: 入离职人员是否会自动同步?
服务器重启能否自动起来? 我需要它能稳定运行。"
# → AI 自查并补齐: 生产级 WSGI、故障自愈(kill -9 实测)、
# 每 15 分钟在职核查(离职自动禁用/复职自动恢复)、全部组件开机自启注意最后一句的价值:让 AI 自查健壮性,它会把「能跑」和「能稳定跑」之间的差距(生产级 WSGI、故障自愈、定时同步、开机自启)一次补齐。
写在最后
这个项目的真正收获不是一套 GitLab,而是一个被反复验证的工作模式:
- 人负责决策:选型、原则、验收标准;
- AI 负责执行:查文档、写代码、读源码、排障、加固;
- 遇到「官方不支持」先别放弃:开源 + AI 的组合,意味着绝大多数「不支持」都可以被「自己造一个」解决,而且成本比你想象的低得多。
两小时,一套带钉钉免登和入离职自动同步的企业级代码平台。这在两年前是无法想象的。
我会持续更新企业 AI 落地的真实实践,欢迎关注「小易AI实践」公众号,一起把 AI 用起来。
本文涉及的服务器凭据、密钥等敏感信息均未在文中出现;文中方案已在生产内网环境实测通过。
WECHAT OFFICIAL ACCOUNT
小易AI实践
持续更新企业 AI 落地经验