Jenkins构建产物迁移至RustFS对象存储,解决控制器磁盘瓶颈问题

Jenkins默认将构建产物存于控制器本地磁盘,存在单点故障与扩容困难问题。通过artifact-manager-s3插件配合RustFS(S3兼容对象存储),可透明化迁移工件至外部存储,实现产物持久...

互联网/IT 阅读量: 3338

在持续集成系统中,构建产物(如归档文件、临时缓存)的可靠存储常被忽视,直到磁盘满载或控制器迁移时才暴露风险。Jenkins默认将archiveArtifacts、stash等操作的输出写入控制器本地磁盘,这一设计虽简单,却使产物生命周期与控制器强绑定——一旦控制器重建、磁盘扩容或集群横向扩展,历史构建成果极易丢失或无法访问。

这一问题的本质在于架构错配:构建产物是不可变的交付物,按作业名与构建号组织成扁平目录结构,天然适配对象存储的键值模型;而本地文件系统则受限于单机容量、I/O性能与高可用能力。随着CI/CD流水线规模扩大,尤其在多主节点(high-availability Jenkins)或云原生部署场景下,本地存储已成为明显的扩展瓶颈。

近期实践表明,借助开源对象存储RustFS与Jenkins官方插件artifact-manager-s3,可低成本实现构建产物的外置化管理。RustFS是一个轻量级、100%兼容S3 API的存储服务,支持HTTP明文通信与路径风格URL,无需TLS证书即可部署,特别适合内网测试环境或私有云场景。其核心价值在于:既保留S3生态工具链兼容性,又规避了AWS云服务的成本与依赖。

具体实施路径清晰且对用户透明。首先,在Jenkins容器镜像中安装必要插件:基于jenkins/jenkins:lts-jdk17基础镜像,通过jenkins-plugin-cli命令行工具安装artifact-manager-s3与aws-credentials插件。前者提供S3后端集成能力,后者确保凭证类型支持完整——尽管RustFS非AWS服务,但插件仍需该凭证类型以识别静态密钥对。

文章配图
  • S3 Bucket Region:us-east-1(仅为占位,非真实区域)
  • Base Prefix:artifacts/
  • Custom Endpoint::9000(对应RustFS监听端口)
  • 启用Use Path Style URL与Use Insecure HTTP(因RustFS默认无TLS)
  • 关键项:启用Disable Session Token——此选项绕过AWS STS会话令牌验证,避免因RustFS不支持临时凭证导致“security token invalid”错误。

上述配置完成后,所有调用archiveArtifacts、unstash等标准Pipeline指令的作业,其产物将自动落至RustFS桶中指定前缀下,路径格式为artifacts///artifacts/。整个过程对流水线编写者完全透明:无需修改任何脚本逻辑,也无需显式调用S3 SDK。

验证阶段可快速完成。创建一个简易Pipeline作业:

执行构建后,使用Rclone客户端(rc ls rustfs/jenkins-artifacts/ -r)查看桶内容,可见产物已按规范路径存储;同时在Jenkins构建页面点击下载链接,实际读取的正是RustFS中的对象,而非本地磁盘文件。

RustFS与Jenkins集成关键配置项对照表

该方案的价值不仅在于解决磁盘空间问题,更在于推动CI基础设施向云原生架构演进。当构建产物脱离控制器后,Jenkins主节点可真正实现无状态化:重启、扩缩容、跨AZ迁移均不影响历史产物可追溯性;同时为后续引入版本化工件管理、构建产物审计、跨项目共享奠定基础。

值得注意的是,artifact-manager-s3插件自2020年发布以来已趋于稳定,当前主流Jenkins LTS版本(如2.426+)均兼容。RustFS最新稳定版为1.0.4(2026-10-25发布),其轻量特性使其可在单机Docker环境中快速启动,资源占用远低于MinIO等全功能对象存储,适合中小团队快速落地。

在DevOps实践中,存储层的解耦常被低估。Jenkins控制器应聚焦调度与协调职能,而非充当文件服务器。将构建产物外置至对象存储,是CI系统走向高可用与可伸缩的关键一步。对于尚未部署专用存储的团队,RustFS+artifact-manager-s3组合提供了一条低门槛、高兼容性的过渡路径。