将构建的特定部分委派给slave

时间:2013-08-08 11:04:56

标签: jenkins hudson distributed

我有一个项目,其中部分构建过程是在远程计算机上创建本机库。目前这是Jenkins制作的CI版本之外的手动过程。

有问题的设置是Jenkins主服务器构建了一个基于GIT的maven项目,该项目依赖于只能在特定机器上构建的本机库。 Jenkins无法编译此模块,因此,它目前是一个手动过程。

我想在创建本机库的机器上安装Jenkins slave,并将编译后的文件返回给Jenkins master,而不处理构建的任何其他部分。

我无法弄清楚这是否可行。我在这个主题上找到的文章数量讨论了詹金斯奴隶作为分发构建的一种手段,但我希望奴隶对构建过程的一小部分负责,而不是别的。 Jenkins master应该只将构建请求发送给slave并等待结果,而不是尝试编译代码本身。

3 个答案:

答案 0 :(得分:2)

我做的完全一样。我的设置,非常类似于Mark O'Connor和gaige所建议的,我正在使用Copy Artifact plugin

  • 作业A:在Mac上生成一个zip文件

  • 作业B,在奴隶B上运行 - Windows机器,将zip作为输入并生成MSI

这是作业B配置中的重要部分:

  1. 使用标签

    将作业B限制在正确的从站上

    restrict the job B on the proper slave using labels

  2. 确保作业B在作业A之后发生

    make sure job B happens after job A

  3. 确保在构建

    之前将作业A中的工件发送到作业B.

    make sure artifacts from job A are sent to job B

  4. 构建你的东西​​

  5. 作业B生成的归档工件

    archive artifacts produced by job B

答案 1 :(得分:1)

将作业的一部分委托给奴隶是必须在Jenkins外部完成的,例如,使用ssh。

但是,正如@kan所指出的那样,您很可能希望将本机库构建作为单独的作业提取,然后在特定的从站或满足特定条件的任何从站上执行该作业。

为此,我的建议是在节点配置中使用Labels来确定哪些从属可用于构建该特定作业。

Jenkins > nodes > <slave node>中,使用Labels属性设置表示特定要求的单字标签,例如操作系统或处理器类型。

然后,在特定于节点的作业中,选中Restrict where this project can be run并将Label Expression设置为符合条件的内容。如果标准很简单,那么它只是一个单词,如果你需要一个布尔值,你也可以使用它们(比如我们的OSX&&Lion)。

我相信这一切都在Jenkins的标准版本中,不需要特殊的插件。如果不是,请给我留言,我会尝试并诊断哪个插件启用此功能。

答案 2 :(得分:1)

通过使用二进制存储库管理器来集中软件工件,可以解决此问题。我个人使用Nexus,但它可能像远程文件系统一样愚蠢。

想法是在每个Jenkins作业之后发布构建的工件(如果你不喜欢Nexus,你可以使用其中一个Publish over插件)并在下一个作业中将其作为构建依赖项检索。 / p>

这种方法意味着构建执行的时间越长越好,并且具有解耦每个模块组件的构建的附加优势。