主人jenkins可以在远程jenkins上运行工作吗?

时间:2012-05-01 19:00:38

标签: continuous-integration jenkins cruisecontrol.net

我们正在从CruiseControl.NET迁移到Jenkins,只是为了与合作伙伴保持同步,因此我们没有两个不同的CI脚本。我们正在设法让Jenkins做类似于我们CruiseControl所做的事情,它有一个集中的服务器调用远程构建机器上的项目(jenkins中的作业)。

我们有多个与单个项目关联的构建机器,因此当我们从集中式CI服务器构建项目时,它将调用远程CI服务器上的项目。远程CI服务器将从集中式CI服务器项目中提取该版本。

在CruiseCruise控件中,我们设置了一个在远程项目上执行forceBuild的项目。构建机器上的项目使用remoteProjectLabeller来检索版本号,以便它们始终保持同步。

要检索主版本号:

<labeller type="remoteProjectLabeller">
  <project>MainProject</project>
  <serverUri>tcp://central-server:21234/CruiseManager.rem</serverUri>
</labeller>

调用远程项目:

<forcebuild>
    <project>RemoteBuildMachineA</project>
    <serverUri>tcp://remote-server:21234/CruiseManager.rem</serverUri>
    <integrationStatus>Success</integrationStatus>
</forcebuild>

到目前为止,在jenkins中我使用java web start设置了辅助服务器作为奴隶,但我不知道如何让主jenkins调用奴隶上的项目设置。

我可以设置Jenkins来调用奴隶上的项目(作业)吗?

我可以让奴隶从主人那里取出版本号吗?

编辑 -

让我补充一些信息。

  • 主服务器和远程构建计算机从服务器都在运行Windows。
  • 我们让中央主人CruiseControl同时启动了远程项目,所以他们同时运行,并希望尽可能与jenkins一样。

4 个答案:

答案 0 :(得分:9)

詹金斯有build agents的概念,它可能更适合你的场景 - 有一个主人触发构建和执行它的奴隶。然后,构建可以仅限于某些类别的从属(例如,如果它依赖于特定软件,则不存在于所有代理上)。所有数据都由主人集中管理,我相信这是你想要实现的目标。

答案 1 :(得分:5)

在Jenkins中,不可能在从属设备上触发构建,即构建运行的地方不受触发它的人的控制。它由作业本身的设置控制。每个作业都有一个名为“限制此作业可以运行的位置”的设置。

在你的情况下你可能有两个工作:A和B.A将被限制为在“master”上运行而B将被配置为在“slavename”上运行。然后剩下要做的就是A触发B。

但是你有进一步的限制:你希望A和B从版本控制中检出相同的版本,你希望A和B并行运行。有很多方法可以实现这一点,但最简单的方法可能是定义多配置作业。

无法将现有的自由式作业转变为多配置作业,因此您必须重新开始工作。

  • 选择新工作
  • 选择构建新的多配置项目。添加名称。
  • 在“配置矩阵”下,打开“添加轴”下拉列表。
  • 选择奴隶
  • 检查主人和奴隶
  • 添加SCM信息和构建步骤

当作业运行时,它在主服务器和从服务器上运行。 Jenkins确保他们使用相同的源版本构建。

答案 2 :(得分:0)

从/ jenkins / computer网址,您可以添加,删除和重新配置本地或远程“构建代理”的“节点”。

然后可以限制作业在特定的构建代理上运行,或者遵循各种规则从可用代理中选择适当的构建代理。

答案 3 :(得分:0)

我在考虑Jenkins,就像在远程机器上定义作业的CruiseControl一样。因此,在Jenkins中,远程项目在主服务器上定义,并通过代理程序委托给远程计算机。

我使用在远程计算机上安装的Windows Web Start代理作为Windows服务。要在特定远程计算机上运行特定作业,我在其从属配置中使用唯一标签定义了每个远程节点。为了将特定作业绑定到特定从站,我在每个作业配置中使用了slave的标签(“限制可以运行此项目的位置”)。

要使用单个主作业触发作业,我创建了一个自由样式作业,该作业仅设置为“构建其他项目”并提供逗号分隔的列表或项目名称。此作业并行构建下游作业。

我仍然在寻找一种方法来将主构建号发送到下游作业,以使它们始终保持同步。 (这用于版本DLL等。)