我们需要能够运行一个消耗两个奴隶的Jenkins作业。 (或者,两个工作,如果我们可以保证它们同时运行,并且至少有一个工作可能知道另一个工作。)情况是我们有一个重量级的应用程序,我们需要运行测试。测试在一台机器上运行,应用程序在另一台机器上运行。将它们放在同一台主机上是不切实际的。
现在,我们有一个Jenkins作业,它使用脚本启动专用应用程序服务器,安装正确的版本,正确的数据,然后针对它运行测试。这意味着当没有进行重量级测试时,我无法使用专用的应用程序服务器来运行其他任务。它也几乎限制了我们一个循环。能够动态分配应用服务器将允许更多。
显然没有办法在核心jenkins中做到这一点,但我希望有一些插件或hackery来实现这一点。当前的测试版本是一个maven 2作业,但这是可配置的,如果我们必须将其包装在其他内容中。它是通过成功完成另一项工作而开始的,可以将其改为开始两项工作,或其他任何需要的工作。
答案 0 :(得分:2)
我刚刚从中了解到,通过嵌套node
子句,可以在pipeline作业中很好地同时分配多个从属:
node('label1') {
node('label2') {
// your code here
[...]
}
}
请参阅this question,其中Mateusz建议解决类似问题。
答案 1 :(得分:0)
让我看看我是否理解了这个问题。
您希望动态选择一个奴隶并在其上启动App Server。
当App服务器在Slave上运行时,您不希望它运行任何其他作业。
但是当App服务器没有运行时,您希望将该Slave用作其他任何Slave以用于其他工作。
唯一的出路就是标记奴隶。并使用“限制可以运行此项目的位置”使App Server和Test Suite在具有Slave标签的计算机上运行。
然后在从属节点中,将“执行者数量”放到1.这将确保在任何时候只运行一个作业。
下一步将创建一个作业来启动App Server,然后在App Server启动作业成功后启动测试作业。
如果您的测试作业需要知道运行App服务器的计算机的服务器详细信息,那么它就会变得很有趣。