切换主题
项目与项目组
项目是平台的执行单元:一个项目描述「从哪里取代码、怎么构建、把哪些产物部署到哪台机器」。项目分组(project_group)是所有项目都必须归属的容器,也是数据权限的最小授权单位。本页介绍项目管理、项目配置、详情页、数据权限,以及配置的复制 / 导入导出与项目模板。
相关页面
运行项目、Webhook 触发与任务产物下载的更多细节见 构建与部署、任务中心、Webhook 触发;分组任务通知的渠道配置见 通知;项目模板的完整说明见 项目模板。
项目与分组模型
- 项目(
project)承载全部执行配置,配置以 JSON 存放在config列中(结构见下文「项目配置」)。 - 项目分组(
project_group)承载分组级的任务变量、可选目标服务器范围与任务通知,是组内项目的公共配置来源。 project.group_id非空:项目必须归属一个分组,分组即数据权限的授权单位(见「数据权限」)。- 项目名称在分组内唯一(唯一键
uk_project_group_id_name (group_id, name)):不同分组可以有同名项目;同一分组下重名会被拒绝,接口返回唯一键冲突(409)。 - 系统内置一个默认分组,名称为「默认分组」。导入项目、初始化示例项目在引用无法解析或未指定分组时会自动归入该分组(必要时自动创建)。
项目实体返回的主要字段:
| 字段 | 说明 |
|---|---|
id | 主键 |
name | 项目名称 |
groupId | 所属项目分组(列表附带 groupName) |
enabled | 是否启用 |
config | 项目配置 JSON(含 Git 凭据密文等,接口回显时掩码) |
项目分组
分组列表
「项目分组」页面(/projects/groups)分页展示全部分组:
| 列 | 说明 |
|---|---|
| ID | 主键 |
| 分组名称 | 分组名 |
| 项目数 | 组内项目数量 |
| 分组配置 | admin 显示「任务变量 N 条 · 目标服务器 M 台/不限制 · 通知已启用/未启用」;非 admin 仅显示目标服务器范围 |
| 创建时间 | 创建时间 |
- 支持按分组名称关键字模糊搜索;分页每页 20 / 50 / 100。
- 操作:详情(进入分组详情页)、成员(admin 或对该分组有 manage 权限时可见)、编辑 / 删除(仅 admin)。
非 admin 的可见性
分组任务变量与任务通知只会下发给 admin(敏感值仍为掩码);非 admin 通过接口只能拿到 targetIds,用于在项目部署页收窄目标服务器下拉。因此分组详情页对非 admin 显示「分组任务变量仅管理员可见」「分组通知仅管理员可见」。
新建 / 编辑分组
分组的「新建」「编辑」在新窗口中打开独立页面(/projects/groups/new、/projects/groups/:id/edit),保存成功后自动刷新来源列表页并关闭本窗口。页面形态:
- 名称:必填。
- 目标服务器:多选,留空表示不限制;配置后组内项目只能从中选择目标服务器。
- Tab 任务变量:复用项目任务变量表格(见下)。
- Tab 任务通知:组内所有项目共用的一套通知配置。
删除分组
组内仍有项目时拒绝删除;删除分组会同时清理该分组的授权记录。
分组配置一:任务变量
字段与项目任务变量相同(两处共用同一结构):
| 字段 | 说明 |
|---|---|
name | 名称:描述该变量的作用,仅用于辨识(可选) |
key | 变量名 |
value | 变量值;masked=true 时为 AES-256-GCM 密文,接口回显为 ****** |
masked | 是否为敏感变量(敏感变量密文入库、不回显明文) |
scope | 注入范围:all 本地与远端 / local 仅本地 / remote 仅远端 |
enabled | 是否启用 |
分组任务变量的作用范围是组内所有项目;与项目同名时以项目自身配置为准(项目变量优先)。
分组配置二:目标服务器范围
targetIds 为分组可选的目标服务器 ID 列表:
- 为空 = 不限制(兼容存量分组):组内项目可选全部目标服务器。
- 非空:项目保存时逐个校验
deploy.targetIds(多选)中的目标服务器是否都在范围内,任一不在则返回 400;项目部署页下拉同步只展示范围内的目标服务器。切换分组后会移除不在范围内的目标。 - 保存分组时校验所选目标服务器存在。
分组配置三:任务通知
任务通知以分组为维度,组内所有项目共用同一套渠道与事件(这是任务终态与人工卡点通知的唯一配置来源)。通知内容由平台按任务状态内置渲染,无需配置模板。
| 字段 | 说明 |
|---|---|
enabled | 是否启用通知 |
channelIds | 通知渠道(可多选) |
events | 通知事件:task_success 任务成功、task_failed 任务失败、task_waiting 等待人工确认、agent_offline 执行机离线 |
项目级通知已废弃
通知配置已从项目迁移到分组。项目配置中的 config.notify 字段保留但不被读取、也不再由前端编辑(导入导出仍原样携带历史数据)。项目配置页不再有「通知」Tab,通知请在「项目分组 - 编辑」中维护。
任务变量合并顺序
执行任务合成 RunPlan 时按下列顺序注入任务变量,同名后者覆盖前者:
系统内置 → 环境资源携带 → 项目分组 env → 项目 config.env → 触发时临时变量 → 运行期 CICD_*1
因此项目变量始终优先于分组变量;分组变量的改动即时生效于后续触发的任务(已排队任务使用各自的 RunPlan 快照,不受影响)。
项目管理
项目列表
「项目」页面(/projects)按数据权限过滤(无授权的项目对普通用户不可见):
| 列 | 说明 |
|---|---|
| ID / 项目名称 | 主键、名称 |
| 构建步骤 | 各构建步骤类型标签(Java / Go / 前端 / Docker),未配置显示「未配置」 |
| 分组 | 所属项目分组名称 |
| 执行机 | 固定显示「按环境资源自动匹配」(项目不直接选执行机) |
| 代码 | 仓库地址、分支 / Tag、缓存开关 |
| 状态 | 启用 / 停用 |
| 操作 | 详情 / 运行 / 成员 / 配置 / 复制 / 另存为模板 / 导出 / 删除 |
- 支持按项目名称关键字、按分组筛选;分页每页 20 / 50 / 100。
- 顶部提供导出选中 / 导出全部 / 导入与新建项目(导出、导入、新建均仅 admin)。
- 运行按钮对无
operate权限的用户禁用;成员 / 配置按钮对 admin 或对该项目有manage权限的用户可见。
启用与停用
enabled 控制项目是否启用。停用后的项目不接受 Webhook 触发,但仍可手动运行。
新建与编辑
- 项目名称:必填。
- 项目分组:必填(项目必须归属一个分组)。
- 启用:开关,默认启用。
- 快速开始(仅新建时展示):从「项目模板」中
quick_start=1的模板一键填充整份配置,详见下文「项目模板与快速开始」。 - 套用模板:一次性把某个项目模板的配置复制到当前表单(保存后与模板不再关联;模板不含凭据,套用后需补充仓库凭据、环境资源与目标服务器)。
- 保存校验:名称非空、必须选择分组、构建与部署不能同时关闭(至少启用一项)。
运行项目
在项目列表点「运行」弹出运行对话框:
| 字段 | 说明 |
|---|---|
| 执行范围 | 勾选打包(build)/ 部署(deploy)/ 启动(start)。阶段按顺序执行且不可跳跃:勾选后面的会自动勾上前面的,取消前面的会同时取消后面的 |
| 分支 / Tag | 下拉选择远端分支 / Tag,留空使用项目默认;打开对话框时自动拉取(git ls-remote),可点「刷新分支 / Tag」重取,也支持手工输入列表外的值 |
| 指定提交 | 可选,指定 commit SHA |
| 本次不缓存 | 开启后本次任务强制干净拉取,结束后不保留工作目录(请求体 cache=false) |
| 优先级 | 数值越大越先调度(仅排队时生效) |
关闭部署的项目
项目关闭部署后,运行对话框不再允许勾选部署 / 启动阶段。若 Docker 构建步骤的交付方式为「推送镜像仓库」,关闭部署仍会执行镜像推送。
运行后若资源被占用会进入队列并提示排队位置;否则直接派发任务并跳转到任务详情。
删除项目
存在排队或运行中的任务时拒绝删除(返回冲突);删除时在同一事务内清理该项目的授权记录。
项目配置
项目配置页(/projects/:id/config)分 Tab 编辑:代码获取 / 构建 / 部署 / 任务变量 / Webhook。配置整体以 config JSON 提交,字段名与后端结构一致。
代码获取(Git)
config.git 字段:
| 字段 | 说明 |
|---|---|
url | 仓库地址(git@... 或 https://...) |
ref | 分支名或 Tag 名(可手输,或展开下拉拉取远端分支 / Tag) |
refType | branch 分支 / tag Tag |
authType | ssh SSH 密钥 / https HTTPS 账号 |
keyScope | SSH 密钥范围:agent 执行机级密钥 / project 项目级密钥(见 资源与凭据) |
username | HTTPS 用户名(authType=https 时) |
password | HTTPS 密码或访问令牌(密文入库,回显 ******,留空表示不修改) |
depth | 浅克隆深度,0 表示完整克隆 |
cache | 缓存工作目录,默认开启;关闭则每次全新拉取、任务结束后删除 |
resetHard | 拉取后执行 reset --hard(cache 开启时可配) |
cleanUntracked | 清理未跟踪文件(clean -f,cache 开启时可配) |
- 工作目录固定为
{workspaceRoot}/{项目ID}(以项目 ID 命名,避免同名项目相互覆盖);仓库内子目录由各构建步骤的「子目录」指定。页面会展示当前所选环境资源关联执行机实际上报的工作目录。 - 测试连接 / 获取分支:由执行机发起 Git 连通性探测,需要项目已保存且引用的环境资源已关联执行机。展开分支下拉或点「获取分支」即可拉取远端分支 / Tag(Tag 与分支同一次
ls-remote返回);仓库地址变更后旧列表作废。
构建
config.build 字段:
| 字段 | 说明 |
|---|---|
enabled | 启用构建;关闭后任务仍取码,但不执行构建步骤(只把仓库中的文件交给部署阶段) |
steps[] | 构建步骤列表,按列表顺序串行执行;各步骤在自身内引用需要的环境资源与镜像仓库 |
构建步骤类型与对应环境资源(均为步骤内字段):
类型 type | 说明 | 对应环境资源字段 | 类型专属字段 |
|---|---|---|---|
java | Java / Maven | jdkId | goals(默认 clean package -DskipTests)、artifactPattern(默认 target/*.jar) |
go | Go | goId | buildCmd(默认 go build ./...)、artifactPattern(默认 bin/*) |
frontend | 前端 | nodeId | installCmd(默认 npm install)、buildCmd(默认 npm run build)、distDir(默认 dist) |
uniapp | uni-app | nodeId(+ 云打包时 hbuilderxId) | platform、installCmd、buildCmd、distDir、小程序直传、pack 打包配置(mode=offline 离线 Android 打包 / mode=cloud DCloud 云打包,云打包支持 android + ios,详见 构建与部署) |
docker | Docker | dockerId | dockerfile(默认 Dockerfile)、imageName、imageTag(默认 latest)、deliver(tar 导出 tar 后上传 / registry 推送镜像仓库)、registryId(镜像仓库引用,用于 docker push / pull 鉴权,留空匿名) |
每个步骤的通用字段:name 步骤名称(可选)、subDir 子目录(相对仓库根,留空为仓库根)、env[] 步骤级环境变量(key / value,只对本步骤的构建命令生效,同名覆盖项目级变量)、jdkId / goId / nodeId / dockerId / hbuilderxId(本步骤引用的环境资源,按类型只填用到的字段;hbuilderxId 供 uni-app 云打包使用)。
步骤之间共享工作目录
一次取码后各步骤串行执行,共用同一份工作目录且步骤之间不清理,因此前序步骤的产物可被后续步骤使用(如前端先产出 web/dist,Go 步骤用 //go:embed 打进二进制)。
- 构建步骤允许为空:此时不构建,直接上传代码库中的文件(部署条目按仓库根相对路径解析)。
- Java 步骤使用所选 JDK 环境资源上传的
settings.xml;若代码仓库中已有settings.xml则优先使用仓库中的。 artifactPattern仅用于构建后产物概览与校验,实际上传内容以「部署」中的条目为准。
部署
config.deploy 字段:
| 字段 | 说明 |
|---|---|
enabled | 启用部署;关闭后不要求目标服务器,任务只构建并把产物归档到管理端(供人工下载) |
targetIds | 目标服务器引用列表(可多选,任务按顺序逐台部署;每台须在项目分组允许的范围内) |
remoteDir | 远端目录:条目未指定目标目录时的默认落地目录 |
tempDir | 远端中转目录,留空用 /tmp |
backup / backupDir | 覆盖前备份开关与备份目录 |
maxBackups | 备份保留份数,0 表示不限 |
startWait | 启动脚本执行后等待秒数,0 表示不等待 |
approval | 人工卡点:{ enabled, timeoutMinutes }。启用后打包与上传完成、开始部署前暂停,需项目操作权限的人点「放行」;timeoutMinutes 为等待超时分钟数,0 表示默认 24 小时,超时任务失败并通知 |
stopSteps / deploySteps / startSteps | 部署脚本三段(见下) |
artifacts[] | 部署文件(产物)列表,按顺序上传 |
scripts[] | 选用的内容模板(部署阶段最前面生成脚本文件) |
部署脚本按顺序执行:部署前(停止,stopSteps)→ 文件落地 → 部署(可选,deploySteps)→ 部署后(启动,startSteps)→ 等待「启动等待」秒。每个步骤含 name、script、ignoreFailure(失败不中断)。脚本用 ${...} 部署占位符:${remoteDir}、${remoteFile}、${remoteFileAbs}、${logDir}、${image}、${container}(注意与内容模板的 {{ }} 语法不同,见 项目模板与内容模板)。
**部署文件(产物)**字段:
| 字段 | 说明 |
|---|---|
source | 来源:相对仓库根的路径或 glob(如 bin/app、dist、target/*.jar),也可填执行机绝对路径 |
targetDir | 目标目录,留空使用项目 remoteDir |
targetName | 目标名称,留空时目录来源取源目录名、单文件取原文件名 |
put | 落地方式(subdir 子目录 / direct 直接) |
mode | 模式:replace 覆盖 / merge 合并 / clean 清空后放入 |
dirMode | 目录来源打包方式(如 tar) |
excludes | 排除规则 |
permissions | 落地权限(八进制,如 755 / 644;目录来源递归设置) |
owner / group | 属主 / 属组(可选,由部署用户执行 chown) |
required | 来源匹配为空时任务失败(默认开启);关闭后匹配为空只跳过该条目 |
enabled | 是否启用(界面不再暴露,保存时统一补 true) |
noBackup | 该条目覆盖前不备份(默认 false 即参与备份) |
前端界面在部署文件列表中暴露的列:来源、目标目录、目标名称、落地方式(覆盖 / 合并 / 清空后放入)、权限、备份、操作。
**脚本文件(内容模板)**字段 scripts[]:{ templateId, fileName, dir, permissions, owner, group },用于选用已分配给本项目分组的内容模板,在部署阶段最前面生成文件(先于备份与「部署前(停止)」步骤,因此停止脚本本身也可由模板生成)。留空的字段沿用模板默认值。内容、文件名、目录均按 {{ }} 模板语法渲染,语法与示例见 项目模板与内容模板。
任务变量
config.env 字段:name、key、value、masked、scope(all / local / remote)、enabled,语义与分组任务变量一致。对本项目的全部阶段(打包 / 上传 / 部署 / 启动)生效;分组已配置的同名变量会被这里的值覆盖。表格支持批量粘贴(每行 KEY=VALUE,# 开头为注释)与批量复制。
任务变量 Tab 的表格上方提供可用变量对照表,把三类可用变量连同描述一起列出(变量名 / 描述 / 来源 / 值),来源分三种:
- 内置:运行期自动写入的
CICD_TASK_ID(当前任务 ID)、CICD_PROJECT(项目名称)、CICD_STAGE(当前阶段:build / upload / deploy / start)、CICD_BRANCH(本次执行的分支)、CICD_COMMIT(本次执行的提交号)、CICD_WORKDIR(当前打包目录:本次取码后的仓库根绝对路径,各构建步骤的实际目录 = 该目录 + 步骤子目录,可写简写${WORKDIR}),用户不可覆盖。 - 分组:所属分组配置的任务变量(描述取自其
name字段)。分组只对 admin 下发 env,非 admin 看不到这部分。 - 项目:下方表格中正在编辑的项目变量,随编辑实时更新。
变量的值里可使用内置动态表达式(随机数 / UUID、当前时间、时间戳、字符串处理),任务合成时一次性替换为实际值,且可与普通文本、多个表达式任意拼接,例如 release-${now(20060102)}-${random(4)}。完整语法与函数清单见 任务变量与变量展开。
Webhook
Webhook 配置来自独立接口(/api/projects/:id/webhook),顶部「保存」会连同 Webhook 配置一起落库。字段:
| 字段 | 说明 |
|---|---|
enabled | 是否启用 |
provider | 平台:github / gitlab / gitee / codeup / generic(通用) |
| 端点地址 | 只读,{server.baseUrl}/hooks/git/{hookKey};未配置 server.baseUrl 时按监听地址推断(通常为内网,需在 backend/config.yaml 配置外部地址) |
secret | 验签密钥(密文入库、掩码回显);留空表示不验签,此时端点仅靠随机地址保密。可随机生成并复制到 Git 平台 |
events | 触发事件:push / tag / merge_request |
branchFilter / tagFilter | 分支 / Tag 过滤(glob,如 main、release/*、v*) |
pathFilter | 路径过滤(只在这些路径变更时触发,如 src/**) |
refSource | 分支来源:webhook 使用 Webhook 推送的分支 / project 始终使用项目配置分支 |
actions | 触发范围:{ build, deploy, start, fromStage } |
queuePolicy | 排队策略:always 资源被占用时排队 / skip 资源被占用时丢弃 |
debounceSeconds | 防抖秒数:同一分支在该时间窗内的重复投递合并为一次,默认 5 |
skipCiKeyword | 跳过关键字:提交信息包含该关键字时跳过,如 [skip ci] |
页面还提供发送测试投递 / 测试并真实触发、重置地址(旧端点立即失效)与最近投递记录(含重放)。Webhook 端点标识 key 使用随机路径而非项目 ID,避免被枚举;复制 / 导入项目时该标识会重新生成。
项目详情页
项目详情页(/projects/:id)读取 GET /api/projects/:id/detail,返回项目本体、groupName、targets 列表(每台的目标服务器名称 / 连接方式 / 节点)、taskCounts、artifacts(count / bytes / retentionDays)、taskTotal 与最近 20 条任务(含各自的产物归档)。
页面分两个 Tab:
- 概览:项目名称、所属分组、构建步骤、代码仓库、目标服务器、部署目录、产物归档(数量与占用、保留天数提示);任务统计(排队中 / 已派发 / 执行中 / 成功 / 失败 / 已取消)与最近任务与产物表格(状态、触发方式、执行机、产物归档、耗时、创建时间、详情),产物可直接下载(
type=dir且文件名不以.tar.gz结尾时自动补后缀);项目成员表格(用户名 / 显示名称 / 角色 / 权限 / 状态 / 备注,仅 admin 或对该项目有 manage 权限的用户可见)。 - 配置:只读展示项目的代码获取 / 构建 / 部署 / 任务变量 / Webhook 配置(
ProjectConfigView)。
页头提供运行(对该项目有 operate 及以上权限时可用,与项目列表页共用同一运行弹窗 RunProjectDialog)、成员(admin 或该项目有 manage 权限时可见,打开 MemberDrawer 管理项目级授权)入口;成员抽屉关闭后会自动刷新上方的成员表格。
数据权限
数据权限记录保存在 sys_user_scope,是「用户 / 角色 / 项目组 / 项目」的授权关系。
| 字段 | 说明 |
|---|---|
scope_type | 授权对象类型:group 项目分组 / project 项目 |
scope_id | 授权对象 ID |
user_id | 被授权用户 |
permission | 权限档位:view / operate / manage |
remark | 备注 |
权限档位由低到高(view = 1 < operate = 2 < manage = 3):
| 档位 | 含义 |
|---|---|
view 只读 | 可查看项目列表与详情 |
operate 可触发 | 可运行任务、执行 Git 测试与获取分支 |
manage 可管理 | 可编辑项目配置、管理任务与成员 |
生效规则:
- 项目级授权覆盖分组级:项目存在直接授权时以该授权为准(可对组内个别项目单独降权 / 提权);项目无直接授权时才取所属分组的授权。
- 多处授权时取较高档位。
- 分组授权按项目当前所属分组实时计算,因此对组内后续新增项目自动生效。
- 角色
admin直通(不受数据权限限制);角色user无权限时接口返回 404(而非 403,避免暴露对象是否存在)。 - 两处维护入口写入同一张表:「项目 / 项目分组 → 成员」抽屉,以及「用户管理 → 数据权限」。成员抽屉中项目级授权会覆盖其所属分组的授权。
- 授权变更有进程内缓存(
auth.scopeCacheSeconds,默认 0 即不缓存);启用缓存时授权写入会主动失效该用户缓存以保证「改完即生效」。
配置复制、导入导出与初始化示例
复制项目
对项目点「复制」会在同一分组内新建一个名称加「-副本」的项目(该分组内重名继续加序号 -副本2、-副本3…):配置整体复制(凭据密文沿用),但 Webhook 端点标识重新生成,避免与原项目共用同一入口。
导出项目
POST /api/projects/export(ids 为空导出全部,仅 admin)导出 JSON 信封:
json
{
"kind": "cicd-projects",
"version": 1,
"exportedAt": "2026-01-01T00:00:00Z",
"projects": [
{
"name": "示例项目",
"groupId": 1,
"enabled": true,
"config": { "git": {}, "build": {}, "deploy": {}, "env": [] },
"refs": {
"groupName": "默认分组",
"jdkName": "JDK 17",
"goName": "Go 1.22",
"nodeName": "Node 20",
"dockerName": "Docker",
"registryName": "私有仓库",
"targetNames": ["生产应用服务器"]
}
}
]
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 内部引用(分组 / 环境资源 / 镜像仓库 / 目标服务器)以
refs中的名称随文件带上,导入时按名称在新环境重新匹配。 - 导出文件包含项目配置与凭据密文,仅可在使用相同加密密钥的环境之间导入。导出前页面会给出确认提示。
导入项目
POST /api/projects/import(仅 admin)解析导出的信封(文件上限 16 MB):
kind必须为cicd-projects(也接受裸数组,按条目字段指纹识别),且每条记录必须带enabled键(用于识别「是项目导出文件」)。- 名称按本环境重新匹配引用:名称优先,其次沿用仍存在的原 ID;未命中的引用置空并写入告警,不阻断整批导入。
- 目标分组内重名自动加「-导入」后缀;未指定 / 无法解析分组时归入默认分组。
- 导入后 Webhook 端点标识重新生成。
- 导入结果返回成功条目与逐条告警。
初始化示例项目
POST /api/projects/sample(仅 admin)创建内置示例项目(如「示例-Java 后端服务」「示例-前端 + Go 多步骤」)。默认分组内已存在同名项目时跳过、不覆盖。示例项目的 Git 地址、环境资源与目标服务器均留空,需按实际环境补充后再运行。
产物归档与保留策略
- 构建步骤的主产物会归档到管理端(
task_artifact),在项目详情页供登录用户下载。 - 保留与容量由
backend/config.yaml的artifact段控制:
| 配置项 | 说明 | 默认 |
|---|---|---|
artifact.retentionDays | 产物保留天数,超过后由巡检清理(含磁盘文件) | 30 天 |
artifact.maxTaskBytes | 单个任务产物归档的大小上限(字节),<= 0 不限制 | 2 GB |
artifact.maxTotalBytes | 全部产物归档的总大小上限(字节),超出后按最旧优先回收,<= 0 不限制 | 20 GB |
产物可落在管理端本机磁盘或 S3 对象存储(storage.artifact),见 资源与凭据。
项目模板与快速开始
项目模板(project_template)是可复用的项目配置骨架:功能与项目配置一致(git / build / deploy / env),但不参与执行、不归属分组。
- 全局只读共享:模板对所有登录用户可读,写入仅 admin。
- 不保存凭据:模板对所有用户共享,因此不落任何凭据——Git 密码、Webhook 密钥与端点标识清空,掩码任务变量仅保留
masked标记(值为空),套用后由使用者在项目上补充。 - 一次性套用:项目「套用模板」把模板配置一次性复制到表单,保存后与模板再无运行期关联。模板与项目入口见「项目模板」页面。
模板字段:
| 字段 | 说明 |
|---|---|
name | 模板名称 |
config | 与项目配置同结构(写入前剔除凭据) |
quickStart | 是否出现在「新建项目」页的快速开始区域 |
sortNo | 快速开始列表中的升序排序值 |
另存为模板
对项目点「另存为模板」(仅 admin):配置整体复制并归一化后剔除凭据,名称留空取项目名、重名自动加「-模板」后缀。已建项目与模板之间无运行期关联。
快速开始
「新建项目」页的快速开始区域由数据库模板驱动(GET /api/templates?quickStart=1&limit=200&offset=0,即 quick_start=1 的模板,按 sort_no 升序):点一下即把整份配置复制到表单,模板中显式绑定的环境资源、镜像仓库与目标服务器随之填入。模板绑定的目标服务器中不在当前项目分组可选范围内的会被逐个移除并提示。快速开始仅在新建时展示。
模板导入导出
POST /api/templates/export(仅 admin)导出信封{ kind: "cicd-templates", version, exportedAt, templates: [...] },每条含name/quickStart/sortNo/config/refs(引用名称)。POST /api/templates/import(仅 admin)按名称匹配引用,未命中的置空并告警;重名自动加「-导入」后缀;导入时同样剔除凭据,避免手工构造的文件把凭据写进全局共享的模板。