2

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

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

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

我很难弄清楚这是否可能。我在该主题上找到的文章数量讨论了 Jenkins slaves 作为分发构建的一种方式,但我希望从属服务器负责构建过程的一小部分,仅此而已。Jenkins master 应该只是将构建请求发送到 slave 并等待结果,而不是尝试编译代码本身。

4

3 回答 3

3

我做的完全一样。我的设置与 Mark O'Connor 和 gaige 的建议非常相似,我正在使用Copy Artifact 插件

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

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

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

  1. 使用标签将作业 B 限制在正确的从站上

    使用标签将作业 B 限制在正确的从站上

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

    确保工作 B 发生在工作 A 之后

  3. 确保在构建之前将作业 A 的工件发送到作业 B

    确保将作业 A 的工件发送到作业 B

  4. 建立你的东西

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

    归档作业 B 产生的工件

于 2013-08-13T00:00:17.520 回答
2

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

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

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

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

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

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

于 2013-08-08T12:46:08.983 回答
1

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

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

这种方法意味着构建执行的位置更重要,并且具有解耦每个模块组件的构建的额外优势。

于 2013-08-08T21:27:14.863 回答