Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins—运行单个作业同时寻址两个节点—或在两个作业之间进行双向通信_Jenkins_Jenkins Plugins - Fatal编程技术网

Jenkins—运行单个作业同时寻址两个节点—或在两个作业之间进行双向通信

Jenkins—运行单个作业同时寻址两个节点—或在两个作业之间进行双向通信,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,Jenkins是新手,但有其他构建服务器的经验 我正在设置一个测试作业,其中两个节点上的软件需要相互乒乓。 我有一个标记节点池(让我们称它们为a,运行windows 7)来运行测试软件,还有一个标记节点池(让我们称它们为B,运行lubuntu 14.10) 测试是通过TCP/IP执行的,在整个测试过程中,A和B节点都需要各种命令行刺激。最后,我需要从A和B节点收集工件 我想同时控制多个节点的需求并不罕见,但我真的很难在web上找到这些信息。 有没有我错过的插件 下面是我的想法什么需要执行,如果

Jenkins是新手,但有其他构建服务器的经验

我正在设置一个测试作业,其中两个节点上的软件需要相互乒乓。 我有一个标记节点池(让我们称它们为a,运行windows 7)来运行测试软件,还有一个标记节点池(让我们称它们为B,运行lubuntu 14.10)

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

我想同时控制多个节点的需求并不罕见,但我真的很难在web上找到这些信息。
有没有我错过的插件


下面是我的想法什么需要执行,如果一个插件不存在,以帮助我

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

  • 从SVN签出到节点A
  • 从SVN签出到节点B
  • 在节点A上执行Windows脚本
  • 在节点B上执行Linux脚本
  • 从节点A收集工件
  • 从节点B收集工件
  • 除了上面所有的偶数项目符号之外,还可以从主节点或A节点使用SSH执行这些操作来控制B节点,但这会留下以下问题:

  • 如何从B节点池中选择一个B节点,并将其标记为正在使用
  • 如何使用Jenkins SSH/从凭据

    另一种完全不同的选择是设置两个作业,一个用于节点A,另一个用于节点B。但接下来我需要了解如何执行以下操作:

  • 将一个节点A作业与一个节点B作业关联,这样它们都知道关联
  • 执行双向交互通信,允许节点A作业等待来自节点B作业和visa作业的信号

  • 热切期待您的回答

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

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

    我希望这有帮助。

    在我的例子中,我使用了带有从属轴的project。然后,您可以使用自己的代码在节点之间同步执行,或者将其与(系统)混合以在不同配置之间通信


    如何从作业A触发作业B?我找到了我想可以做到的东西。是的。这是我使用的插件。适用于许多场景。很好。当我回到那个项目时,我会调查这件事。谢谢分享。
    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)
                    }
                }
            }
        }
    }