GitFox 4.5正式发布,流水线支持任务并行与挂载卷,制品支持批量上传,并优化交互体验。
大家好!GitFox 独立版本 4.5 发布啦!
本次发布,流水线支持任务并行与挂载卷,制品支持批量上传,并优化交互体验。
一、新增功能点
流水线支持任务并行
在编排流水线时,可将需要同时执行的多个任务放入同一并行组。流水线执行时,组内任务会同时执行,不再逐个排队等待;待组内任务全部执行完成后,再继续执行后续任务,从而缩短流水线整体耗时。
流水线支持自定义挂载卷
流水线新增挂载卷能力,解决阶段内任务间的数据传递、以及依赖反复下载这两个问题。卷在阶段上声明一次,该阶段内的任务就都能挂载使用,并按用途分为两类:
- 临时卷:为同一阶段的任务提供共享读写空间,阶段结束自动清理,适合传递构建产物、交换中间文件。
- 宿主机卷:把依赖缓存持久保留在宿主机上,下次构建直接命中,省去重复下载,编译效率明显提升。
制品支持文件批量上传
制品现支持批量上传,可一次选择多个文件上传至当前目录,单次最多 50 个,替代原有的单文件逐个上传方式,节省操作时间。
二、功能优化
- 代码详情页编辑器代码行尾增加blame信息。
- 代码详情页增加文件菜单,支持文件下载。
- 代码详情页支持md文件预览。
- 代码详情页代码浏览链接增加锚点功能。
- 代码详情页代码详情页左侧文件树组件交互优化。
- 流水线编排页面编辑变量与触发规则时,页面表单改为弹窗展示。
- 流水线列表页增加最近更新时间字段,支持排序功能。
- 流水线执行历史页面,点击流水线名称可直接跳转至流水线执行详情页。
- 制品库文件列表的制品目录字段仅展示子目录。
- 制品库文件列表改为可调整列宽的高级表单。
- 后台变量功能,添加变量时变量值的输入框样式统一。
三、新增功能说明
▼ 流水线支持任务并行
在流水线编排时,把任务类型设置为并行任务(type: parallel),组内任务写在它的 spec.steps 下即可。并行组本身不是一个执行节点,只负责组织任务与并发调度;组内任务互不依赖,会同时启动,全部执行完成后才继续执行并行组之后的任务。
完整语法见 流水线语法与环境变量。
代码示例:
version: 1
kind: pipeline
spec:
stages:
- id: ldbvux8d
name: 阶段
type: ci
spec:
steps:
- id: wllmnoug_build_run
name: 代码克隆
type: run
spec:
script:
- echo clone
- id: build-parallel
name: 并行构建
type: parallel # 并行任务
spec:
steps: # 组内任务,并发执行
- id: frontend
name: 前端构建
type: run
spec:
script:
- echo frontend-start
- sleep 2
- echo frontend-end
- id: backend
name: 后端构建
type: run
spec:
script:
- echo backend-start
- sleep 2
- echo backend-end
- id: allmnoug_build_run
name: 产物上传
type: run
spec:
script:
- echo upload # 组内任务全部结束后执行
▼ 流水线支持自定义挂载卷
流水线中每个任务都运行在独立容器里,任务结束即销毁,默认只有内置的 _workspace 卷用于共享克隆下来的源码。配置自定义挂载卷后,可以实现两类场景:
- 在任务之间共享数据;
- 把依赖缓存保留到宿主机,供后续构建复用。
卷采用两级配置:在阶段上声明卷(volumes),在任务上挂载卷(mount)。
第一步:在阶段上声明卷
在阶段的 spec.volumes 中声明卷,指定卷名与卷类型:
stages:
- type: ci
spec:
volumes:
- name: cache # 卷名,阶段内唯一
type: temp # host / temp
- 卷名:阶段内唯一,用于后续在任务上引用。
- 卷类型:可选
host或temp,区别见下文「卷类型」一节。
第二步:在任务上挂载卷
在任务的 spec.mount 中按卷名挂载到容器内的绝对路径。同一个卷可以挂给多个任务,从而在任务之间传递数据:
steps:
- name: 写入
type: run
spec:
mount:
- name: cache
path: /data
script:
- echo hello > /data/hello.txt
- name: 读取
type: run
spec:
mount:
- name: cache
path: /data
script:
- cat /data/hello.txt
卷类型
卷类型有两种,分别对应不同的数据生命周期:
| 类型 | 说明 |
|---|---|
临时卷(temp) |
由运行器创建,用于同一阶段内任务间的数据共享,阶段结束后自动清理。 |
宿主机卷(host) |
把宿主机目录挂进容器,数据跨构建保留,适合存放依赖缓存与构建缓存。 |
volumes:
- name: go-cache
type: host
spec:
path: /data/gitfox/go-cache # 宿主机绝对路径
效果示例
以 Go 项目为例,将 $GOMODCACHE 指向宿主机卷后,第二次构建可直接命中模块缓存,示例项目中编译耗时由 20 秒降至 3 秒。
其他语言缓存目录可参考:
| 语言 | 需挂载的缓存目录 |
|---|---|
| Node.js | ~/.npm |
| Python | ~/.cache/pip |
| Maven | ~/.m2/repository |
注意事项
- 仅限 CI 阶段:卷为阶段级配置,只在
type: ci的阶段中声明,跨阶段不共享。 - 卷名限制:卷名在阶段内唯一,且不能使用
_workspace、_addons、_docker_socket、socketDir等保留名。 - 路径要求:挂载路径必须是绝对路径,同一任务内的挂载路径不能重复。
- 工作区覆盖:若把用户卷挂到内置工作区路径
/gitfox,用户挂载优先、内置工作区挂载会被跳过,该任务将不再与其他任务共享工作区内容。
完整说明见 stage 自定义挂载卷使用说明。
▼ 制品库支持文件批量上传
通用文件类型制品库在文件上传时,可以一次选择多个文件,也可以直接把文件拖拽到上传区域,单次最多支持 50 个文件。上传完成后,所选文件会按原文件名在当前目录下分别生成制品,并展示在文件列表中,可统一进行查看与下载。
当上传文件与库中已有文件重名时,系统会给出提示,确认后可覆盖上传。
四、下载链接
| 类别 | 地址 |
|---|---|
| 独立版本镜像 | hub.zentao.net/app/gitfox-front:4.5 |
| GitFox 引擎 | hub.zentao.net/app/gitfox-server:4.5 |
| 部署教程 | 查看部署教程 |
| 源码包 | php8.4 源码包 |
最后编辑:孟笑宇 于 2026-11-13 16:50:40