Jenkins 的构建产物别堆在控制器磁盘:用 RustFS 当它的 S3 工件仓库

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,产物就从绑死一台控制器的磁盘变成随时可取的桶对象,控制器迁移和扩容都不再牵动交付物。

相关推荐
王中阳Go14 分钟前
100 件货卖出 116 件,库存停在 -16
后端·mysql·go
泡海椒15 分钟前
jquick-pdf 多重折线(JMultiLineChartData)实战:Java 生成工单 SLA 月报
后端
Swot17 分钟前
SvelteKit Remote Functions 使用指南
前端·后端
Java旅途24 分钟前
让项目过程清晰可追溯:从课题双选到文档归档的一体化平台
后端
黄连木笛26 分钟前
不改 Redis Insight 原有代码,把它汉化了:DOM 整段匹配 + XHR 拦截 + asar 重打包
redis·后端
flash俊杰27 分钟前
v2.34-02 静默截断:10,000 个会话与 500 条消息是怎么被发现的
后端
vaskilab36 分钟前
Agent 上线后翻车的 6 种死法:一个 20 万人规模项目的四版重构实录
后端
鶴哥只手遮天1 小时前
《rustc 内幕》第 1 章 全景:rustc 编译流水线与 crate 版图
后端·rust·开源
starzy19901 小时前
深入理解Scala隐式值:编译期自动装配
开发语言·后端·scala