詹金斯 - 在另一份工作中使用一份工作的结果

时间:2011-09-28 01:11:58

标签: ant jenkins ivy

我有一个运行makefile并生成一些文件的作业。然后,我想要另一份将这些文件发布到常春藤的工作。

我知道克隆工作区插件,但还有其他选项吗?

5 个答案:

答案 0 :(得分:1)

我个人的偏好是在不依赖Jenkins内部文件结构的情况下做这些事情,但有时这意味着了解其他构建工具的内部结构(例如,Maven,或者在你的情况下常春藤)。

如果我是你,我会做一切工作 - 即构建,然后有一个“Ivy Publisher”(如果存在这样的插件)将工件发布到远程Ivy存储库。

如果那是不可能的,请让第一个工作将工件“安装”到本地存储库/缓存中(我不确定它在Ivy上调用了什么),然后让第二个工作从那里获取它。

我不确定这是否是最好的方法,但它对我来说效果很好。

编辑我应该提一下 - 这在分布式环境中效果不佳,除非像我这样,您的分布式环境包含多个可以访问公共NAS文件系统的节点。

编辑2 我还将Copy To Slave Plugin用于没有通用文件系统的分布式环境。

答案 1 :(得分:1)

您运行 Makefile ,然后发布到 Ivy

Ivy是Ant的一部分,是一个利用全球Maven存储库结构来获取所需jar文件和其他依赖项的模块。

不要误会我的意思,我已经使用本地远程Maven存储库来发布C / C ++库(您可以使用wget来获取其他项目将依赖的项目)。但是,我没有使用常春藤。

如果您正在考虑Apache Ivy,那么您可以使用 Maven 进行发布。有一个Maven Release插件可以将你的工件复制到你的Maven存储库,但你可能想要做的就是部署。

在我的Jenkins构建中,我只是让Jenkins从命令行执行maven的deploy-file步骤。这使我可以将文件部署到我的 Maven Ivy存储库中,而无需先创建pom.xml文件。 (好吧,你想要创建一个pom.xml,因为你想要包含一个依赖层次结构。)

我通常在与创建jar / war / ear文件的作业相同的工作中完成此操作。但是,如果您想要单独的作业,可以使用Copy Artifact Plugin。这个插件允许作业B从作业A复制任何或所有已发布的工件。如果您只想要构建的 jar 文件,那么克隆整个工作区要快得多,也更简单。

答案 2 :(得分:1)

你有几个选项,一个是Clone Workspace,它工作得相当好,但是所需的磁盘空间增加了一倍(在我们的例子中是非常相关的)。大多数其他方式是克隆工作区的变体。

我所做的是使用自定义工作区位置。即我的第一份工作建立了一切然后触发第二份工作。在第二个作业中,我将自定义工作区设置为第一个作业的工作区,因此作业会对同一文件执行其他任务。您必须检查选项以防止在第二个作业运行时构建第一个作业,因为两个作业都在相同的文件上工作,这是一种细则。

但是,如果您需要它并且小心,这可能是一个可行的解决方案。

答案 3 :(得分:0)

使用Copy Artifact plugin将作业A(编译)中的工件复制到作业B(发布)。

答案 4 :(得分:0)

我会使用一个处理两个子任务的主构建文件。 Ant有一组执行任务,可用于运行另一个Ant构建文件,执行一些命令行命令等。查看此处:

http://ant.apache.org/manual/tasksoverview.html

也许您可以使用Exec命令启动make并通过使用Ant命令运行Ant构建来处理常春藤发布。