13

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

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

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

要检索主版本号:

<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

4 回答 4

10

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

于 2012-05-01T19:11:18.870 回答
5

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

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

但是您还有更多限制:您希望 A 和 B 从版本控制中签出相同的版本,并且您希望 A 和 B 并行运行。有很多方法可以做到这一点,但最简单的可能是定义一个多配置作业。

没有办法将现有的自由式工作转变为多配置工作,因此您将不得不做一份新工作。

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

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

于 2012-05-01T21:53:47.187 回答
0

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

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

于 2012-05-01T22:25:21.813 回答
0

我在想 Jenkins 太像 CruiseControl,它的工作是在远程机器上定义的。所以在 Jenkins 中,远程项目是在主服务器上定义的,并通过代理委托给远程机器。

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

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

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

于 2012-05-06T21:38:15.630 回答