一、背景:研发代码为什么必须自己管

研发团队写的代码就是公司的核心资产——产品软件、内部系统,全在里面。这件事上我的原则很明确:

  • 代码不出内网:源码必须放在自己的服务器上,不依赖任何外部平台的可用性;
  • 账号跟着组织走:谁入职谁能用、谁离职谁立刻失效,不能靠人肉维护;
  • 成本可控:免费开源优先,不为用不上的功能付费。

带着这三个原则,开始选型。

二、选型对比:SVN、Gitee、GitLab

维度SVNGitee 社区版GitLab(自建)
技术代际集中式,上一代分布式 Git分布式 Git
数据位置自建,内网 ✅✅ 社区版可自建自建,内网 ✅
代码评审/MR❌ 没有✅ 基础可用✅ 业内标杆
CI/CD❌ 社区版不含✅ 原生内置最强
免费档功能免费但老旧可自建但功能基础✅ CE 全功能免费
二次开发受限⚠️ 开源但生态单薄✅ MIT 开源随便改
生态与招聘持续萎缩国内较好✅ 全球主流

结论没有太多悬念:SVN 是上一代工具,Gitee 社区版虽可私有化部署但功能单薄(无内置 CI/CD、评审与权限体系偏弱),GitLab 自建是唯一同时满足「内网 + 免费全功能 + 开源可二开」的选项。

三、GitLab 国内版 vs 国际版

定了 GitLab 之后还有第二道选择题:极狐 GitLab(JH,中国发行版)还是国际版 CE?两个版本我都实际研究了,关键事实如下:

维度国际版 CE极狐 JH(基础版)
性质✅ MIT 真开源⚠️ 免费但商业授权
内核版本19.3.119.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 权限落盘、不进任何代码仓库。
GitLab 登录页已集成钉钉登录按钮(实测截图)
▲ 实测效果:GitLab 登录页底部新增「钉钉登录」,扫码即进

七、调试实录:三个教科书上没有的坑

这部分最能体现 AI 的价值——不是「不犯错」,而是报错之后能读懂源码级线索并自愈

  1. 钉钉接口已下线:文档里写的 oauth2/userinfo 端点实际返回「api is not found」。AI 用真实凭据对候选端点逐一探测,确认现役端点是 contact/users/me
  2. 认证头不是标准写法:钉钉不用 OAuth 惯例的 Authorization: Bearer,而是自家的 x-acs-dingtalk-access-token,按惯例写直接被网关拒绝;
  3. 官方文档与源码不符:GitLab 文档示例用 options 键配置,但 19.3.1 源码实际只认 args,配置被静默丢弃、跳转到了 gitlab.com 默认地址。AI 直接读 initializer 源码定位,一键修复。
这三个坑的共同点:搜索引擎都搜不到答案——要么是接口刚下线,要么是文档错了。解法是同一个:读源码、做实验、用证据说话。这恰好是 AI 最擅长、人类最耗时的部分。

八、稳定运行:重启自愈,无人值守

落地不是装完就完,还得稳。收尾时 AI 做了一整套生产化加固:

  • 网关从开发服务器换成 waitress 生产级 WSGIsystemd 守护,kill -9 实测 5 秒内自动复活;
  • 登录网关、同步定时器、GitLab 本体全部开机自启,服务器重启零人工干预;
  • 钉钉 API 全部带超时与降级(组织架构查不到就回退昵称,不阻断登录);
  • GitLab 每日自动备份,保留 7 天。

九、抄作业:提示语清单

整个项目用到的提示语全部在这里,按阶段分组、附 AI 行为说明,没有任何「魔法咒语」,就是说人话:

prompts.txt
# 第一阶段: 环境检查与准备
"连接服务器 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,而是一个被反复验证的工作模式:

  1. 人负责决策:选型、原则、验收标准;
  2. AI 负责执行:查文档、写代码、读源码、排障、加固;
  3. 遇到「官方不支持」先别放弃:开源 + AI 的组合,意味着绝大多数「不支持」都可以被「自己造一个」解决,而且成本比你想象的低得多。

两小时,一套带钉钉免登和入离职自动同步的企业级代码平台。这在两年前是无法想象的。

我会持续更新企业 AI 落地的真实实践,欢迎关注「小易AI实践」公众号,一起把 AI 用起来。

本文涉及的服务器凭据、密钥等敏感信息均未在文中出现;文中方案已在生产内网环境实测通过。

WECHAT OFFICIAL ACCOUNT

小易AI实践
持续更新企业 AI 落地经验

小易AI实践公众号二维码