You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins下游运行时,如何用Copy artifacts插件复制上游触发构建的制品?

解决Jenkins上下游任务制品复制问题

问题本质

你碰到的核心矛盾是:上游任务虽配置了阻塞等待下游完成,但此时上游仍处于运行状态,工作区可能被占用、制品未完成归档,导致下游无法从「触发当前构建的上游运行中构建」复制文件;而「最后完成的上游构建」是稳定状态,所以复制正常。要拿到触发当前下游的新鲜snapshot.zip,得换个稳定的产物获取方式。

具体实现步骤

1. 上游任务先归档制品到构建记录

放弃直接从上游工作区复制的思路,先让上游把生成的zip制品归档到自身构建记录中:

  • 在上游Maven构建步骤之后,添加**「Archive the artifacts」**步骤
  • 配置归档路径:比如**/target/*.zip(根据你的实际制品路径调整)
  • 勾选「Keep build artifacts」确保构建记录保留这些文件

2. 下游从上游归档的制品中复制

下游使用**「Copy artifacts from another project」**插件,配置如下:

  • 「Which build」选择**「Upstream build that triggered this job」**
  • 「Artifacts to copy」填写和上游一致的归档路径(如**/*.zip)
  • 注意选择从artifacts复制,而非workspace(插件默认会优先取artifacts,无需额外配置,但要确保上游已完成归档)

3. 固定上游任务执行顺序

确保上游任务的执行流程严格按以下顺序:

  1. 执行Maven构建生成snapshot.zip
  2. 完成制品归档到构建记录
  3. 触发下游任务并阻塞等待其完成

这样下游触发时,上游的新鲜制品已经稳定归档,即使上游仍在运行,也能从它的构建artifacts中获取到正确的文件。

4. 备选方案:通过参数传递构建号

如果上述方案仍有问题,可在上游触发下游时传递自身构建号:

  • 上游触发下游时,添加参数:UPSTREAM_BUILD_NUMBER=${BUILD_NUMBER}
  • 下游「Copy artifacts」配置中,选择「Specific build」,并填写参数${UPSTREAM_BUILD_NUMBER}
  • 同样从artifacts中复制文件

关键提醒

  • 绝对不要直接从运行中的上游工作区复制:工作区可能存在文件锁、后续步骤会修改文件,导致复制失败或拿到不完整的制品
  • 依赖构建归档的artifacts是Jenkins中获取构建产物的标准稳定方式,只要归档步骤执行完成,无论构建是运行中还是已结束,都能安全访问

内容的提问来源于stack exchange,提问作者K. Sai Bharadwaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:30:01