ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

一个 PAT 跑通自建 GitLab:TeamAI CLI 团队 AI 资产同步完整实录

一个 PAT 跑通自建 GitLab:TeamAI CLI 团队 AI 资产同步完整实录

一个 PAT 跑通自建 GitLab:TeamAI CLI 团队 AI 资产同步完整实录

【免费下载链接】teamai-cliMake Every Team AI Native项目地址: https://gitcode.com/GitHub_Trending/te/teamai-cli

TeamAI CLI 是把 skills、rules、agents 等资源放进一个 Git 仓库自动分发的团队 AI 资产同步工具。如果你维护自建 GitLab 实例,希望团队的 AI 知识库完整留在内网,这篇实录演示完整链路:从安装 CLI 到自动建仓、创建 MR 与拉取,只需 2 个配置项,后续 push / pull 全部由一个 Personal Access Token 驱动。

先看效果:跑通后三条命令长什么样

配置完成后的日常形态,就是两条命令来回:

$ teamai push ✔ Pushed 3 resources ✔ Pull Request created: https://git.example.com/yourgroup/your-teamai/-/merge_requests/7 $ teamai pull ✔ Synced: 12 skills, 4 rules, 2 agents

背后由 PAT 驱动的操作面如下,全部走 GitLab REST API v4,不需要安装任何平台 CLI:

操作实现方式
克隆仓库git clone,token 经http.extraHeader注入,不落盘到.git/config
自动建仓POST /api/v4/projects,按路径解析 Group,解析不到直接报错
创建 MRPOST /merge_requests,reviewer 用户名自动解析为 ID
导入 MR 数据标题 + 提交 + diff(截断 50KB),用于知识沉淀
列出 Group 仓库include_subgroups=true,覆盖子组,供批量导入

动手前检查:依赖、权限和唯一手动环节

项目要求确认方式
Node.js≥ 20node -v
Git任意可用版本git --version
GitLab 账号目标 Group 成员,可推分支、可建仓浏览器打开 Group 确认
PATapiscope见下一节

全程唯一需要登录 Web 界面的环节,就是去 GitLab 后台签发那个 token,其余步骤全部在终端完成。如果要看实现细节,源码在 src/providers/gitlab/,也可以git clone https://gitcode.com/GitHub_Trending/te/teamai-cli本地阅读。

如何拿到带 api 权限的 token

为什么是它:GitLab provider 的所有写操作(建仓、MR)都靠PRIVATE-TOKEN请求头里的这一个凭据,它是 API 的唯一入口。不配会怎样:init阶段就会提示GitLab authentication unavailable。

  1. 打开实例 → 头像 →User Settings → Access Tokens
  2. 勾选api,设好有效期,创建后立即复制(形如glpat-xxxx)
export GITLAB_TOKEN=glpat-xxxxxxxx

验证 token 与实例可达性:

curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" "$GITLAB_URL/api/v4/user" | head -c 120

返回你的账号 JSON 即通过。token 有三个名字按优先级生效:GITLAB_TOKEN>GITLAB_PRIVATE_TOKEN>GITLAB_PAT,空串和纯空白视为未设置,自动顺延下一个,兼容已有 CI 的命名习惯。

⚠️scope 只勾read_api不行:克隆能过,但自动建仓和建 MR 会在第一次 push 时直接失败。

实例地址怎么配才不会指错地方

为什么需要它:GITLAB_URL决定 API 调用与克隆 URL 的落点;不配时默认回落到gitlab.com,自建实例的 token 会被发往公网,所以 CLI 对自建场景要求显式配置。

export GITLAB_URL=https://git.example.com

配置时记住这四条规则:

规则说明
必须带 scheme只写gitlab.example.com会报错退出,而不是静默指向公网实例
内网 http、非标端口原样保留http://10.0.0.5:8929会原样进入克隆 URL
支持子路径部署挂在https://example.com/gitlab下的实例写完整 base URL
网关改写了 API 路径加export GITLAB_API_PREFIX=api/gitlab,否则请求默认打到/api/v4

验证配置落点正确:

curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" "$GITLAB_URL/api/v4/version"

返回 JSON 版本信息即正确。多实例场景可用TEAMAI_GITLAB_HOST直接指定 host 覆盖,解析顺序是TEAMAI_GITLAB_HOST>GITLAB_URL推导 > 默认gitlab.com,逻辑见 src/providers/gitlab/repo-url.ts。

⚠️TEAMAI_GITLAB_HOST与GITLAB_URL指向不同 host 时:CLI 会直接报错,拒绝猜测 token 属于哪个实例——这是防凭据外发的设计,不是 bug。

如何跑通第一条 teamai init

背景:init从仓库 URL 的 host 判断 provider,host 命中GITLAB_URL就进 gitlab provider。如果 host 完全未知,它会匿名请求该站登录页做一次探测(3 秒超时,不发送 token、不跟随重定向),确认是 GitLab 就停下来提示你补配置,绝不带着凭据盲试。这个设计很贴心:探测只是配置提示,不构成把 PAT 发往该地址的许可。

teamai init https://git.example.com/yourgroup/your-teamai

成功后 provider 被写入团队仓库的teamai.yaml,此后所有人的push/pull都跟随这个值。验证初始化结果:

teamai doctor # 每一行都应通过 teamai status

⚠️早期初始化为provider: git的仓库有小坑:光补环境变量不生效,必须手动把teamai.yaml里的provider改成gitlab。push失败后的诊断会打印这条修复提示,但不会替你自动切换。

一个 PAT 解锁的其余能力

能力说明
🔒 凭据不落盘克隆时 token 用oauth2:基本认证经-c http.extraHeader临时注入,远程 URL 保持干净
建仓不跑偏创建 project 时按 URL 编码的完整路径查 Group ID,查不到就报错,不会悄悄建到你的个人空间
MR 导入防伪造MR 链接的 host 必须与已配置实例严格匹配(含端口、去www.),否则拒绝请求
子组全覆盖列 Group 仓库默认带include_subgroups=true,子组下的项目不会漏

日常循环就剩:

teamai push # 资源推送并自动开 MR teamai pull # 拉取团队最新共享资源

自检清单:交付团队前逐条过一遍

  • ☐GITLAB_URL以http(s)://开头,host 与浏览器地址栏完全一致(含端口与子路径)
  • ☐ PAT 勾选的是api而不是read_api
  • ☐ token 值首尾无多余空白或换行,CI 里$(cat token)记得 trim
  • ☐ 你的账号在目标 Group 有建仓权限,否则init的自动建仓一步必挂
  • ☐ 团队仓库teamai.yaml的provider字段是gitlab而非git
  • ☐ 网关改写过 API 路径时已设置GITLAB_API_PREFIX
  • ☐ 多实例场景下TEAMAI_GITLAB_HOST与GITLAB_URL指向同一台实例

收尾

从签发 PAT 到第一条push/pull跑通,通常只需 10~15 分钟。更完整的 Provider 检测与命令细节见 docs/usage-guide.zh-CN.md 和 docs/guide/zh-CN/getting-started.md,GitLab provider 全部实现在 src/providers/gitlab/。

【免费下载链接】teamai-cliMake Every Team AI Native项目地址: https://gitcode.com/GitHub_Trending/te/teamai-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进