Jenkins - 运行 单个作业同时处理两个节点 - 或者在两个作业之间相互通信
Jenkins - Running a single job addressing two nodes simultaneous - or intercommunicate between two jobs
Jenkins 新手,但有其他构建服务器的经验。
我正在设置一个测试作业,其中两个节点上的软件需要相互来往。
我有一个标记节点池(我们称它们为 A,运行ning windows 7)到 运行 测试软件和另一个标记节点池(我们称它们为 B,运行ning lubuntu 14.10).
测试是通过TCP/IP执行的,并且在整个测试过程中需要在 A 和 B 节点上进行各种命令行刺激。最后我需要从 A 和 B 节点收集工件。
我想同时控制多个节点的要求和需要并不少见,但我真的很难在网上找到这方面的信息。
可能有我错过的插件吗?
如果没有一个插件可以帮助我,下面是我对执行者需要什么的想法。
我的首选解决方案是单一作业,但我需要了解如何执行以下操作:
- 从 SVN 检出到节点 A。
- 从 SVN 签出到节点 B。
- 在节点 A 上执行 Windows 脚本。
- 在节点 B 上执行 Linux 脚本。
- 从节点 A 收集神器。
- 从节点 B 收集工件。
替代上述所有偶数项目符号,可能是使用 SSH 从主节点或 A 节点执行这些操作以控制 B 节点,但这留下了以下问题:
- 如何select 从 B 节点池中取出一个 B 节点 - 并将其标记为已使用?
- 如何使用 Jenkins SSH/slave 凭据?
一个完全不同的替代方案可能是设置两个作业,一个用于节点 A,一个用于节点 B。但随后我需要了解如何执行以下操作:
- 将一个节点 A 作业与一个节点 B 作业相关联,这样它们都知道该关联。
- 进行双向互通,让Node A作业等待Node B作业的信号和签证。
热切期待您的解答!
在我们使用的类似场景中,我们有两个作业(我不知道在两个节点上 运行 一个作业的方法)。
Job A 运行s on node A 并设置服务器然后触发job B,在节点 B 上设置为 运行(作为构建步骤)。
作业 B 将启动其客户端应用程序,该应用程序配置为与 A 安装的服务器一起工作(在我的例子中是 IP 配置)。
作业 A(服务器)进入等待循环(使用 bash while)检查客户端 运行ning 是否在 B 已连接(我在共享位置使用标志文件)。
连接后,两个作业都需要执行更多步骤并完成。每个作业都将以其自己的报告结束。
希望对您有所帮助。
在我的例子中,我使用 Multi-configuration project with Slave axis. Then you can synchronize execution between nodes using your own code, or mix it with (system) 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)
}
}
}
}
}
Jenkins 新手,但有其他构建服务器的经验。
我正在设置一个测试作业,其中两个节点上的软件需要相互来往。 我有一个标记节点池(我们称它们为 A,运行ning windows 7)到 运行 测试软件和另一个标记节点池(我们称它们为 B,运行ning lubuntu 14.10).
测试是通过TCP/IP执行的,并且在整个测试过程中需要在 A 和 B 节点上进行各种命令行刺激。最后我需要从 A 和 B 节点收集工件。
我想同时控制多个节点的要求和需要并不少见,但我真的很难在网上找到这方面的信息。
可能有我错过的插件吗?
如果没有一个插件可以帮助我,下面是我对执行者需要什么的想法。
我的首选解决方案是单一作业,但我需要了解如何执行以下操作:
- 从 SVN 检出到节点 A。
- 从 SVN 签出到节点 B。
- 在节点 A 上执行 Windows 脚本。
- 在节点 B 上执行 Linux 脚本。
- 从节点 A 收集神器。
- 从节点 B 收集工件。
替代上述所有偶数项目符号,可能是使用 SSH 从主节点或 A 节点执行这些操作以控制 B 节点,但这留下了以下问题:
- 如何select 从 B 节点池中取出一个 B 节点 - 并将其标记为已使用?
- 如何使用 Jenkins SSH/slave 凭据?
一个完全不同的替代方案可能是设置两个作业,一个用于节点 A,一个用于节点 B。但随后我需要了解如何执行以下操作:
- 将一个节点 A 作业与一个节点 B 作业相关联,这样它们都知道该关联。
- 进行双向互通,让Node A作业等待Node B作业的信号和签证。
热切期待您的解答!
在我们使用的类似场景中,我们有两个作业(我不知道在两个节点上 运行 一个作业的方法)。
Job A 运行s on node A 并设置服务器然后触发job B,在节点 B 上设置为 运行(作为构建步骤)。
作业 B 将启动其客户端应用程序,该应用程序配置为与 A 安装的服务器一起工作(在我的例子中是 IP 配置)。
作业 A(服务器)进入等待循环(使用 bash while)检查客户端 运行ning 是否在 B 已连接(我在共享位置使用标志文件)。
连接后,两个作业都需要执行更多步骤并完成。每个作业都将以其自己的报告结束。
希望对您有所帮助。
在我的例子中,我使用 Multi-configuration project with Slave axis. Then you can synchronize execution between nodes using your own code, or mix it with (system) 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)
}
}
}
}
}