Jenkins 控制器默认把构建产物(archives、stash)写在自己的本地磁盘上,机器一换、磁盘一满,历史产物就取不回来了。Artifact Manager on S3 这个插件把存储后端替换成 S3 兼容对象存储,作业里照常写 archiveArtifacts,文件却悄悄落进桶里。RustFS 100% 兼容 S3,正好能当这个工件仓库。本文用 Jenkins LTS 镜像装上这个插件,把工件管理器指到 RustFS 桶,跑一个归档作业并确认产物进了桶。
控制器磁盘为什么不是放产物的好地方
构建产物和节点日志本质是不可变的交付物,按作业名、构建号组织目录,天然适合对象存储的扁平键空间。Jenkins 控制器磁盘的问题在于它和控制器生命周期绑定,迁移控制器、扩大磁盘都要停服务,而且多控制器场景下产物没法共享。
插件激活之后,所有走标准 archiveArtifacts(以及 stash、unstash)的工件,都会写到配置的桶前缀下,而不是控制器磁盘。作业配置里完全不出现 S3,对写流水线的人透明。
装插件、建桶、配凭证
Jenkins 在 github.com/jenkinsci/jenkins 维护,本文用 jenkins/jenkins:lts-jdk17(Jenkins LTS 线,基于 JDK 17)镜像,在构建阶段装两个插件:
sql
FROM jenkins/jenkins:lts-jdk17
USER root
RUN jenkins-plugin-cli --plugins artifact-manager-s3 aws-credentials
USER jenkins
artifact-manager-s3 会自动带上 AWS 凭证支持,显式加 aws-credentials 是确保凭证类型可用。桶要提前建好,插件只校验不创建:
vbnet
rc alias set rustfs http://<your-rustfs-endpoint>:9000 <your-access-key> <your-secret-key>
rc mb rustfs/jenkins-artifacts
完成安装向导后,在 Manage Jenkins、Credentials、global、Add Credentials 里选 AWS Credential,ID 填 rustfs-creds,把 RustFS 的访问密钥和秘密密钥填进去。
把工件管理器指到 RustFS
打开 Manage Jenkins、AWS Configuration,Region 填 us-east-1、Credentials 选 rustfs-creds。再到 Manage Jenkins、System 的 Artifact Management for Builds 段,选 Cloud Provider Amazon S3,填:
- S3 Bucket Name:jenkins-artifacts
- S3 Bucket Region:us-east-1
- Base Prefix:artifacts/
- Custom Endpoint::9000
- Custom Signing Region:us-east-1
- 启用 Use Path Style URL
- 启用 Use Insecure HTTP
- 启用 Disable Session Token

非 AWS、又没 TLS 的端点必须走路径风格和纯 HTTP,这两条对应 RustFS 的寻址方式。Disable Session Token 是关键:RustFS 用静态访问密钥对,插件若去调 AWS STS 拿会话凭证就会报 security token invalid,把这个选项打开就绕开了。点 Validate S3 Bucket configuration 确认无误再保存。
跑一个归档作业,去桶里验收
写一个 freestyle 或流水线作业,生成文件并归档:
typescript
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "jenkins artifact stored on rustfs" > report.txt'
}
}
}
post {
always {
archiveArtifacts 'report.txt'
}
}
}
构建完成后列桶,产物按作业名和构建号组织在前缀下:
bash
rc ls rustfs/jenkins-artifacts/ -r
返回类似 artifacts/s3-artifacts-demo/3/artifacts/report.txt,在构建页面点下载,读的正是 RustFS 里的这个对象。

上线前要确认的边界
这套部署官方标注为本地集成测试,不是生产配置。落到生产至少有三件事:一是凭证要在 AWS Configuration 页面先选好并保存,再回去配 S3 桶,顺序反了会报 no valid session credentials;二是多 Jenkins 控制器共享同一个桶时,Base Prefix 要按控制器或团队区分,否则同名作业会互相覆盖;三是凭证用单独一组 IAM 密钥,把权限收窄到 jenkins-artifacts 这一个桶。
当前 RustFS 稳定版是 1.0.4(2026-10-25),对接命令以官方集成指南为准(docs.rustfs.com/zh/developer/integration/devops/jenkins)。把 Jenkins 的工件仓库搬进 RustFS,产物就从绑死一台控制器的磁盘变成随时可取的桶对象,控制器迁移和扩容都不再牵动交付物。