【问题标题】:rsync alternative to Jenkins Copy Artifacts plugin?rsync 替代 Jenkins Copy Artifacts 插件?
【发布时间】:2014-01-21 20:22:18
【问题描述】:

我正在开发一组与我们的在线图片(例如 wordpress 内容)相关的构建。总体而言,这是一个庞大的工作流程,因此分为多个工作。

几个作业需要从其他作业复制大量工件;我一直在使用 Copy Artifacts 插件,但它对我的情况来说太慢了,而 rsync 会更适合。

是否可以有效地获取上游构建的源工件目录,以便我可以将其传递给 rsync 以代替使用 Copy Artifacts 插件?我想要一个简单的脚本,例如:

rsync -a --delete $UPSTREAM_ARTIFACT_DIR $WORKSPACE

【问题讨论】:

  • 复制工件插件为您执行此操作存在问题。不幸的是,它自 2013 年以来一直没有进展。对我来说,这似乎是 copy-artifact-plugin 中一个很大的缺失功能。 issues.jenkins-ci.org/browse/JENKINS-20814
  • OP的问题不一定是增量副本的请求,只是因为他建议使用rsync来解决问题。结果发现 Jenkins 使用单个有限的 Java 线程实现来复制工件,并且性能极差。在我的情况下,我得到大约 1GB)工件从主机复制到代理,而我可以使用 iperf3 在操作系统级别(两侧的 debian 拉伸)确认我得到了 6-9Gbps 的吞吐量。我认为任何人都可以通过将工件 mgmt 调度到对 rsync/scp/etc 的系统调用来受益。

标签: jenkins jenkins-plugins


【解决方案1】:

可以通过看起来定义明确的 URL 访问上游工件。例如, 以下 URL 使人们能够访问最后一个良好构建的工件:

http://jenkins/job/job_name/lastSuccessfulBuild/artifact/

如果需要,甚至可以在多配置项目中指定轴:

http://jenkins/job/job_name/label=foo,arch=x86/lastSuccessfulBuild/artifact/

【讨论】:

  • 嗯,有趣的想法。我怀疑这些特定 URL 的简单 shell wget 会胜过 jenkins copyArtifact。在我的情况下,我得到大约 1GB)工件从主机复制到代理,而我可以使用 iperf3 在操作系统级别(两侧的 debian 拉伸)确认我得到了 6-9Gbps 的吞吐量。 .
  • 哇,快速测试证明我可以使用 curl 在大约 7 秒内复制相同的 1.5GB 工件,而 jenkins copyArtitfact 插件需要 1.5 分钟!
  • 使用 HTTP 被证明对于复制潜在的大量文件很麻烦,所以我最终编写了一个 groovy 函数,它接受作业/项目名称、文件 glob 模式和目标目录,查找路径控制器上指定项目的最后一次成功构建(存储工件的位置)并将它们(使用指定的文件 glob 模式)scp 到目标目录。效果很好,并且比我的基础架构中的 copyArtifacts 快 13 倍。我称之为 fastCopyArtifacts。
  • @timbaktu 你有机会分享这个时髦的脚本吗?即使我们必须重构它以满足我们的需求,它也可以为我们节省大量时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多