动态选择节点参数

时间:2019-06-14 12:07:41

标签: jenkins jenkins-plugins jenkins-groovy

我正在使用Jenkins进行测试。我有许多测试服(一个字符串参数)和许多节点。特定的测试服只能在特定的节点上运行,例如:

  • test_suite_1只能在node_1,node_2或node_3上运行
  • test_suite_2只能在node_4或node_5上运行。

要运行测试,我必须选择一个测试套件和一个或多个节点,这很棒,我仍然想使用此功能。

我想要什么? 当我仅选择一个测试套件时-用户将不会选择任何节点-该节点将通过脚本/插件动态选择-它应取决于所选的测试套件和节点的可用性(例如,我选择了test_suite_1和node_1繁忙,则此脚本应选择node_2或node_3。

我知道NodeLabel参数有一个默认的节点-但正如我之前提到的,特定的测试服只能在特定的节点上运行,因此不可能为每个测试套件都设置一个默认的节点。

如何在NodeLabel参数插件中自动选择Node?

我找到了Groovy Label Assignment插件,但是当我同时具有Node参数和Label参数时-无论Label中包含什么,Node参数中的值都具有更高的优先级。

1 个答案:

答案 0 :(得分:0)

您的prior question因过于广泛而被关闭。我对此的回复由于没有足够的上下文而被删除,因此让我们尝试再次回答...

(ps:您可能希望用在评论中添加的详细信息来重新表达您的问题)

您有2个测试和5个节点,分为2组。

在节点1、2和3上创建标签(例如:GROUP_A)。
詹金斯|管理节点| [选择一个节点] |配置
在“标签”下,添加“ GROUP_A ”,然后保存

对节点4、5做类似的操作(即GROUP_B)

对于test_suite_1,请在“常规”下进行配置
[ X ]限制可以在哪里运行此项目
标签表达式:“ GROUP_A

对test_suite_2做类似的事情。

现在,test_suite_1将在 GROUP_A 中的任何节点上运行,而test_suite_2将仅在 GROUP_B 中的任何节点上运行。这就是Node labels的目的。 Usage example here

通常,Jenkins作业是粘性的,因此除非发生故障,否则它们会坚持到其运行的最后一个节点。您可以使用Least Load Pluginwiki)将此行为更改为在最不繁忙的节点上运行。

  

根据描述:默认情况下,詹金斯(Jenkins)尝试将作业分配给   最后一个节点已执行。这可能导致节点遗留   其他节点超载时处于空闲状态。该插件会覆盖   默认行为,并将作业分配给负载最小的节点。

我不知道如果没有指定选项,您是否可以将其默认为分组,如果您提供参数,可以使其在特定节点上运行,但是我也不知道您是否需要。您可以调查“ Node and Label parameter”插件的使用。也许是(GROUP_A)||(${SELECTEDNODE})的正则表达式,其中SELECTEDNODE是从选择选项

提供的

我们不使用Node and Label plugin,但我不认为您可以在所有节点上同时运行您的作业(“ 1)选择多个节点来运行测试”,“我可以选择多个节点一次”),除非您选择了多个节点,否则除非您切换到多配置项目;它是“选定的一项”选项吗?您必须对此进行测试。