首页 > 解决方案 > 仅当有新版本的文件时才从其他作业复制工件

问题描述

我们有一个主人和两个奴隶。在 Master 上有一项检查 Nexus 上是否有新版本的工作,如果有,则下载最新的 jar 并在文本文件 VERSION.TXT 中更新最新版本(即 xxx-0.012.jar)。(只能从master访问nexus)。

我们需要在slave上运行下载的 jar,所以我们需要从 master 复制它。

我们有一个工作会触发其他几个工作: 1)CHECK_LATEST_JAR:在 master 上运行的工作并检查 nexus 上是否有新版本的 jar,下载它。2)GET_JAR_TO_SLAVE:在从属设备上运行的作业,应该从主设备复制最新的 jar 3)RUN_JAR:从文件 VERSION.TXT 获取最新的 jar 名称并使用该名称运行 jar 的作业。

在 CHECK_LATEST_JAR 中,如果在 nexus 上找到更新的版本,我们将其下载到工作区并存档工件(最新版本的 jar + 文本文件)。

现在在 GET_JAR_TO_SLAVE 中,我们想使用“从另一个作业复制工件”插件 - 但在这里我们需要添加一个条件来运行此步骤,仅当有较新版本时,就好像 CHECK_LATEST_JAR 中没有工件一样,此作业失败..

有没有办法比较位于 master 上的文件和位于 slave 上的文件?尝试使用带有 groovy 脚本的条件步骤 - 但如果作业在从属设备上运行,则无法弄清楚如何告诉它访问主控设备上的文件。

刚刚遇到可能可以使用的 FSTrigger 插件 - 但这里同样的问题是如何告诉它在主机上监视文件 VERSION.TXT 以及是否有更改以在从机上运行作业。

对于我们如何实现目标的任何想法将不胜感激。谢谢

标签: jenkinsgroovymaster-slave

解决方案


我们找到了插件Copy Data to Workspace并使用它将包含最新版本的文件从 Master 上的文件夹复制到在其中一个从属上运行的作业的工作区。之后,我们使用Conditional BuildStep 插件字符串与 Token 宏比较文件的内容,如果文件内容不同,我们将复制下载 jar 的作业的工件。 文件内容比较


推荐阅读