Jenkins - 同时运行单个作业寻址两个节点 - 或者在两个作业之间进行相互通信

时间:2015-05-07 08:46:37

标签: jenkins jenkins-plugins

詹金斯新手,但有其他构建服务器经验。

我正在设置测试作业,两个节点上的软件需要相互打乒乓。 我有一个标记节点池(让我们称之为A,运行Windows 7)来运行测试软件和另一个标记节点池(让我们称之为B,运行lubuntu 14.10)。

测试通过TCP / IP执行,并且在整个测试过程中需要A和B节点上的各种命令行激励。最后,我需要从A和B节点收集工件。

我认为同时控制多个节点的要求和需求并不是那么罕见,但我真的很难在网上找到这方面的信息。
可能有一个我错过的插件吗?


以下是我对需要做什么的想法,如果没有一个插件可以帮助我。

我首选的解决方案是单一工作,但后来我需要了解如何执行以下操作:

  1. 从SVN退房到节点A.
  2. 从SVN退房到B节点。
  3. 在节点A上执行Windows脚本。
  4. 在Node B上执行Linux脚本。
  5. 从节点A收集工件。
  6. 从Node B收集工件。
  7. 上述所有偶数项目的替代方案可能是使用来自主节点或A节点的SSH来控制B节点执行这些操作,但这留下了以下问题:

    1. 如何从B节点池中选择一个B节点 - 并将其标记为正在使用?
    2. 如何使用Jenkins SSH / slave凭据?


    3. 一个完全不同的替代方案可能是设置两个作业,一个用于节点A,一个用于节点B' s。但后来我需要了解如何执行以下操作:

      1. 将一个节点作业与节点B作业相关联,以便他们都知道该关联。
      2. 执行双向内部通信,允许节点A作业等待来自Node B作业和签证的信号。
      3. 热切期待你的回答!

2 个答案:

答案 0 :(得分:0)

在我们使用的类似场景中,我们有两个作业(我不知道在两个节点上运行单个作业的方法)。
作业 A 在节点 A 上运行并设置服务器,然后触发作业 B ,该作业设置为在节点 B <上运行/ strong>(作为构建步骤)。
作业 B 将启动其客户端应用程序,该应用程序配置为与 A (在我的情况下为IP配置)安装的服务器一起使用。
作业 A (服务器)进入等待循环(使用bash while),检查 B 上运行的客户端是否已连接(我在共享位置使用标记文件)

连接后,两个作业都会执行更多步骤并完成。每项工作都将以自己的报告结束。

我希望这会有所帮助。

答案 1 :(得分:0)

在我的情况下,我使用了Multi-configuration项目与Slave轴。然后,您可以使用自己的代码在节点之间同步执行,或者将其与(系统)Groovy script混合以在不同配置之间进行通信。

即。

def siblings = [] 

build.getParentBuild().getExactRuns().each { run ->
    if (!build.is(run)) {

        if (run.hasntStartedYet()) {
            println "Build " + name + " hasn't started yet!"
        } else {
            if (!run.isBuilding()) {
                println "Build " + name + " has already completed!"
                break
            }

            executor = run.getExecutor()
            if (executor) {
                hostname = executor.getOwner().getHostName()

                // In case hostname could not be found explicitly,
                // then set it based on node's name.
                if (!hostname) hostname = executor.getOwner().getName()

                if (hostname) {
                    siblings.add(hostname)
                }
            }
        }
    }
}