Studio 不自己构建代码,构建和部署由代码仓库的 CI 完成,例如 GitHub Actions 或 GitLab CI。CI 连接到 Studio 之后:
- 每个 PR 部署一个预览,任务负责人验收时可以亲自试一遍;
- 推送到分支或打标签时,部署到预发布或生产环境,受保护的环境要经审批人批准;
- 任务上会标出改动已经部署到哪个环境。
不连接 CI,Agent 团队照样开发、开 PR,只是没有预览和部署。
先确认两件事
- CI 能访问 Studio。 CI 构建完,要把产物上传到 Studio 的地址。Studio 只在内网时,云端的 CI(例如 GitHub 托管的 Actions)访问不到它,请用能访问 Studio 的自托管 CI 执行机,或者给 Studio 配置公网地址。
- 有要部署到的环境。 Studio 默认有一个「预览」环境,PR 的预览部署在这里。预发布、生产环境由管理员添加,见 部署环境。
接入 CI
每次接入一个应用的一种触发方式。要给 PR 做预览、又要部署到预发布,就接入两次。
打开项目,进入「项目设置 › 部署」,点「接入 CI」。
「触发方式」选一种:
触发方式 部署什么 默认的环境 Pull request 每个改动了应用的 PR 部署成一个单独的应用,合并或关闭后删除 预览 推送到分支 每次推送到这个分支时构建并部署,默认是仓库的默认分支 预发布(名为 staging 的环境) 标签 每个匹配的标签构建并部署,默认匹配 v*受保护的环境,例如生产 「环境」默认跟着触发方式走,也可以改。受保护的环境会标出来:CI 的每次部署都会变成一份等审批人批准的申请。
「应用」填写应用在仓库里的目录(在根目录就填
.)和应用 ID。PR 的预览部署到<应用 ID>-pr-<编号>。选择接入的方式,二选一:
- 模板:复制 CI 文件,以及保存 CI 密钥的命令,自己提交到仓库、运行命令。
- 给你的 Agent 的提示词:同样的内容写成提示词,交给你本地的编码工具,由它提交 CI 文件、保存密钥。
Studio 不会往仓库里写任何东西,CI 文件和密钥都由你或你的编码工具提交和保存。GitHub 上,CI 文件是 .github/workflows/nb-studio-<应用>-<用途>.yml,读取 Actions 密钥 NB_STUDIO_API_KEY;GitLab 上,CI 文件放在 .gitlab/ 下,由仓库的 .gitlab-ci.yml 引用。
仓库的 CI 密钥
CI 用一个属于组织的 API 密钥向 Studio 上传和部署,它不属于任何个人,接入 CI 的人离开团队也不受影响。生成密钥需要能管理这个项目,例如项目负责人。
- 密钥只在生成时显示一次,Studio 不保存它。模板和提示词里的命令,会把它直接存进代码托管平台的 CI 密钥,不经过屏幕。
- 密钥 90 天到期。到期前 14 天、前 3 天和到期当天,Studio 会在收件箱提醒项目负责人和管理员,附上更换密钥的命令。
- 在「设置 › API 密钥」里能看到它,标着由哪个仓库管理。停用或删除它,CI 就停止部署。
确认接入成功
CI 第一次上报后,「项目设置 › 部署」的「CI 状态」里列出 CI 部署的应用,按环境分组,显示最近一次构建和部署。还没有上报时,显示等待第一次上报。
完成的标志开一个 PR 后,任务页上出现它的预览,可以打开、用初始管理员登录。
预览
- 预览用示例数据,管理员账号由 Studio 自动生成,不包含企业的真实数据。能编辑任务的人可以在任务页看到初始管理员的账号和密码。
- 预览环境最多同时运行 20 个预览,10 分钟没人访问就停止,24 小时后休眠,有人访问时再启动。这些默认值在「发布 › 部署环境」里调整。
- PR 合并或关闭后,它的预览自动删除。
- 不需要预览的任务,在任务的属性里打开「不需要预览」,Agent 会给 PR 加上
no-preview标签,CI 模板据此跳过预览。
接着 走完第一个需求。
