rsync替代Jenkins复制工件插件?

rsync替代Jenkins复制工件插件?,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我正在开发一套与我们的在线图像(如wordpress内容)相关的构建。总的来说,这是一个庞大的工作流程,因此分为几个工作 两个作业需要从其他作业复制大量工件;我一直在使用Copy-Artifacts插件,但它对我的情况来说太慢了,rsync更适合 是否可以有效地获取上游构建的源工件目录,以便我可以将其传递给rsync而不是使用Copy Artifacts插件?我想要一个简单的脚本,如: rsync-a——删除$UPSTREAM\u ARTIFACT\u DIR$WORKSPACE可以通过定义良好

我正在开发一套与我们的在线图像(如wordpress内容)相关的构建。总的来说,这是一个庞大的工作流程,因此分为几个工作

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

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


rsync-a——删除$UPSTREAM\u ARTIFACT\u DIR$WORKSPACE

可以通过定义良好的URL访问上游工件。例如 以下URL允许用户访问上一个良好版本的构件:

http://jenkins/job/job_name/lastSuccessfulBuild/artifact/
甚至可以在多配置项目中指定轴(如果需要):

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

复制工件插件为您执行此操作存在一个问题。不幸的是,它自2013年以来一直停滞不前,毫无进展。对我来说,这似乎是复制工件插件中缺失的一大功能。OP的问题不一定是请求增量拷贝,只是因为他建议使用rsync来解决这个问题。事实证明,Jenkins使用一个有限的java线程实现来复制工件,而且性能非常差。在我的例子中,我从主机到代理获得了大约1GB的工件,而我可以使用iperf3在操作系统级别(两侧都是debian stretch)确认我获得了6-9Gbps的吞吐量。我认为任何人都可以通过将工件管理分派到系统调用rsync/scp/etc……嗯,这是一个有趣的想法。我怀疑这些特定URL的简单shell wget会比jenkins copyArtifact表现更好。在我的例子中,我从主机到代理获得了大约1GB的工件,而我可以使用iperf3在操作系统级别(两边都是debian stretch)确认我获得了6-9Gbps的吞吐量。哇,一个快速测试证明,我可以使用curl在大约7秒钟内复制相同的1.5GB工件,而jenkins Copyartfact插件只需1.5分钟!事实证明,使用HTTP复制大量文件很麻烦,因此我最终编写了一个groovy函数,该函数接受作业/项目名称、文件glob模式和目标目录,在控制器上查找指定项目的上一次成功构建的路径(存储工件的位置)并对其进行SCP(使用指定的文件glob模式)到目标目录。效果很好,比我的基础结构中的copyArtifacts快13倍。我称之为fastCopyArtifacts。