archiveArtifacts:归档构建产物
archiveArtifacts 是 Jenkins 提供的一个后处理步骤,其主要目的是在构建过程(例如编译、测试)成功完成后,将指定的文件或目录归档保存下来,并提供统一的界面供用户查看和下载。你可以把它想象成一个"成果收集器"。构建过程会产生一些有价值的输出(比如编译好的 .jar 包、生成的报告、部署包等),archiveArtifacts 会把这些输出收集起来,与本次构建关联,确保它们不会被后续的构建覆盖或清理掉。
语法:
archiveArtifacts artifacts: '路径/模式', allowEmptyArchive: true/false
参数详解:
| 参数 | 含义 |
|---|---|
artifacts: "目录*" |
指定要归档的文件路径和匹配模式。目录* 表示该目录下的所有文件。 |
allowEmptyArchive: true |
即使没有匹配到文件,也不报错,构建继续。如果设为 false 且没有文件匹配,Jenkins 会标记构建为 失败。 |
实际作用:
- 将
dependency-check-report/目录下的所有文件(如 HTML、JSON、XML 报告)保存到 Jenkins 服务器上。 - 这些文件会随构建历史长期保留(取决于 Jenkins 的日志保留策略)。
- 可通过 Jenkins Web 界面下载这些文件,用于审计或分析。
示例归档内容:
dependency-check-report.htmldependency-check-report.jsondependency-check-report.xml
归档后,点击具体build,显示效果如下:

为什么需要它?(解决了什么问题)
-
持久化构建成果 :Jenkins 的工作空间(Workspace)通常是不稳定的。每次构建可能会清理 workspace,或者新的构建会覆盖旧的文件。
archiveArtifacts将重要的文件复制到一个专属于本次构建的安全位置,使其长期存在。 -
便于访问和分发:无需登录到构建服务器去翻找文件。任何有权限的人都可以在 Jenkins 的构建页面上直接点击下载归档的文件。这对于将构建好的软件分发给测试团队、客户或用于部署非常方便。
-
历史记录和审计:你可以回溯任何一次历史构建,并查看当时生成的准确文件。这对于排查问题、版本对比和审计至关重要。
-
集成与下游作业:归档的 artifacts 可以被其他 Jenkins 作业或工具使用。例如,一个打包作业归档了一个 RPM 包,另一个部署作业可以下载这个包并部署到服务器上。
如何使用它?
archiveArtifacts 通常用在 Jenkins Pipeline 的 post 块(success 条件下)或在 Freestyle 项目的"构建后操作"中添加。
1. 在声明式 Pipeline 中的用法
pipeline {
agent any
stages {
stage('Build') {
steps {
// 模拟编译步骤,例如使用 Maven
sh 'mvn clean package'
}
}
}
post {
success {
// 构建成功后,归档 target 目录下的所有 .jar 文件
archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
}
always {
// 还可以归档测试报告(例如 JUnit 的 XML 报告)
junit 'target/surefire-reports/*.xml'
}
}
}
2. 在脚本式 Pipeline 中的用法
node {
stage('Build') {
sh 'mvn clean package'
}
stage('Archive') {
// 构建后归档
archiveArtifacts artifacts: 'target/*.war', fingerprint: true
}
}
3. 在 Freestyle 项目中的用法
-
在项目配置中,找到 "构建后操作" 部分。
-
点击 "增加构建后操作"。
-
选择 "Archive the artifacts"。
-
在 "要归档的文件" 输入框中,填写文件路径模式(例如
target/*.jar)。

关键参数和语法
-
artifacts (必需):指定要归档的文件路径模式。支持 Ant 风格的模式匹配。
-
*:匹配任意数量的字符(不包括路径分隔符)。 -
**:匹配任意数量的字符(包括路径分隔符)。 -
?:匹配单个字符。 -
,:分隔多个模式。 -
!:排除模式。
示例:
-
target/*.jar:归档target目录下所有.jar文件。 -
target/myapp-*.zip:归档所有以myapp-开头的.zip文件。 -
**/build/libs/*.jar:递归搜索所有build/libs目录下的.jar文件。 -
target/**/*:归档target目录及其子目录下的所有文件。 -
target/*, !target/*-sources.jar:归档target目录下的所有文件,但排除以-sources.jar结尾的文件。
-
-
fingerprint (可选):布尔值,默认为
false。如果设置为true,Jenkins 会为归档的每个文件计算一个唯一的指纹(MD5 checksum)。这主要用于跟踪一个 artifact 是在哪次构建中产生的,以及被哪些其他构建所使用,实现构建之间的依赖追踪。 -
onlyIfSuccessful (可选):布尔值,默认为
false。如果设置为true,则仅在构建状态为"成功"时才归档。即使在构建不稳定(Unstable)状态下也会跳过归档。在 Pipeline 中,我们通常通过在post { success { ... } }块中调用来实现这个逻辑。 -
allowEmptyArchive (可选):布尔值,默认为
false。如果设置为true,即使没有找到任何匹配的文件,构建也不会失败。如果设置为false,且没有文件匹配,则构建会被标记为失败。
注意事项
-
磁盘空间管理:归档会占用 Jenkins 服务器的磁盘空间。大量或频繁的构建可能会快速消耗空间。务必设置"丢弃旧的构建"策略,自动删除旧的构建记录及其关联的 artifacts。
-
不要归档所有内容:只归档必要的、有价值的输出文件(如二进制包、安装程序、汇总报告)。切勿归档整个工作空间或源代码(源代码应由 SCM 如 Git 管理),这会导致磁盘迅速爆满。
-
路径是相对于工作空间的:指定的文件路径是基于当前作业的工作空间的。
如何查看归档的 Artifacts?
在 Jenkins 构建历史中,点击任何一次成功的构建,你会在左侧菜单看到一个 "Artifacts" 链接或直接在页面中看到一个文件列表。从这里你可以直接浏览或下载文件。