2012-05-01 84 views
12

我们正在从CruiseControl.NET迁移到Jenkins,以便与合作伙伴保持同步,因此我们没有两个不同的CI脚本。我们试图设置Jenkins来做一些类似于CruiseControl的工作,它有一个中央服务器在远程构建机器上调用项目(jenkins中的作业)。主jenkins可以在远程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> 

到目前为止,在詹金斯我设置为从属使用Java Web Start的辅助服务器但我不知道我会如何让主jenkins调用从站上的项目设置。

我可以设置Jenkins以调用从站上的项目(作业)吗?

我可以让奴隶从主站拉出版本号吗?

编辑 -

让我补充一些更多的信息。

  • 主人和远程生成机器奴隶都运行Windows。
  • 我们让中央大师CruiseControl在同一时间启动远程项目,以便他们同时运行,并且如果可能的话,希望与詹金斯有相同的事情。

回答

9

詹金斯有build agents的概念,这也许可以适合您的方案更好 - 有一个触发执行它的构建和奴隶的主人。然后构建可以仅限于某些类别的从站(例如,如果它依赖于特定的软件,而不是所有代理都存在)。所有的数据都由主人集中管理,我相信这是你正在努力实现的目标。

+0

+1是的我一直在考虑巡航控制思维的配置。谢谢。 –

5

在詹金斯,不可能对从机,即其中一个构建运行不受谁触发它的一个控制触发构建。它由作业本身的设置控制。每个作业都有一个名为“限制作业可以运行的地方”的设置。

你的情况,你可能有两个工作:A和B. A将被限制在对“主”和B运行将被配置成在“slavename”运行。然后,所有剩下要做的就是对于A触发B.

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

没有办法将现有的自由式作业变成多配置作业,因此您将不得不做出新的工作。

  • 选择新的工作
  • 选择建立新的多配置项目。添加一个名字。
  • 在配置矩阵下,打开“添加轴”下拉菜单。
  • 选择奴隶
  • 检查主机和从机
  • 添加的SCM信息,并建立步骤(S)

作业运行时,它运行在主机和从机两种。詹金斯确保他们从相同的源版本构建。

+2

*在Jenkins中,不可能在一个从机上触发构建,即构建运行的地方不受触发它的人控制* - 这不是100%正确的。您可以使用[节点标签参数插件](https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin)将节点标签指定为参数,然后在* Restrict地址中使用该参数的值这项工作可以运行*领域。 –

+0

我使用三台虚拟机a,b和c设置测试环境。 A是主人,B和C是奴隶。我创建了一个多配置作业,在配置矩阵下,我只选择节点b,因为我只希望它在该VM上执行。但是,当我运行构建它从主人运行它。为什么是这样?我期待它在我选择的节点上运行它。 –

+0

@AndyArismendi,你确定吗?去工作,选择最后的构建。它会显示与你的孩子构建相对应的小球(可能只有一个,如果你只有一个孩子构建,那么它会在旁边说'默认')。球会是蓝色,红色或灰色 - 取决于状态。点击其中一个非灰色球。这是你的孩子建立状态。孩子应该在奴隶'b'上跑。另一方面,顶级工作可能在任何地方运行(除非绑定到具有Matrix Tie Parent插件的节点)。 –

0

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

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

+0

我很抱歉,但是看起来你并没有在这里说出与以前答案中已经提供的内容有什么新内容。 –

0

我在想Jenkins太像CruiseControl,在远程机器上定义了作业。因此在Jenkins中,远程项目在主服务器上定义,并通过代理委托给远程计算机。

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

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

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

相关问题