我有一个大组具有相同标签的节点。我想能够运行在詹金斯一份工作,对所有具有相同标签的节点以及这样做的同时执行。
我看到了一个建议,使用在詹金斯的矩阵配置选项,但我只能想到一个轴(标签组)。当我尝试和运行工作,现在看来似乎只执行一次,而不是300次(1为每个标签组中的节点)。
我应该我其他的轴是什么?还是......有一些插件来做到这一点?我曾试图NodeLabel参数插件,选择“所有可用的网络节点上运行”,但它似乎并没有同时运行的作业。
矩阵的构建将工作;使用“奴隶”为轴心,拓展“个人节点”列表中选择所有节点。
请注意,您将需要每次添加或删除从时间来更新选项。
对于一个更易于维护的解决方案,你可以使用Job DSL plugin建立具有用于构建的模板,然后每个从遍历并创建构建标签设置为从属名称的新工作种子工作。
还有就是你需要两个插件:Paramitrized Trigger Plugin能够触发其他工作作为你的主要工作构建步骤,并NodeLabel Plugin(阅读你所需要的descrition部分BuildParameterFactory)以指定标签。
做到这一点的最好和最简单的方法是使用Elastic Axis插件。 1.安装pulgin。 2.创建一个多配置工作。(如果安装不存在) 3.在作业的配置,你可以找到新的轴加入弹性轴。添加标签,如下图所示,以获得多从作业运行。
明白了 - 不需要任何特殊的插件!
我已经创建了一个触发/调用另一个构建父作业,而当我打电话给他,我传给他,我wan't孩子作业运行上的标签。
所以基本上父作业只有触发我需要这份工作,和孩子作业运行多次,在该标签奴隶的数量(在我的情况下的4倍)。
采取一些上面的答案,并调整它们的2.0系列。
现在,您可以启动所有节点上的所有工作。
// The script triggers PayloadJob on every node.
// It uses Node and Label Parameter plugin to pass the job name to the payload job.
// The code will require approval of several Jenkins classes in the Script Security mode
def branches = [:]
def names = nodeNames()
for (int i=0; i<names.size(); ++i) {
def nodeName = names[i];
// Into each branch we put the pipeline code we want to execute
branches["node_" + nodeName] = {
node(nodeName) {
echo "Triggering on " + nodeName
build job: 'PayloadJob', parameters: [
new org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterValue
("TARGET_NODE", "description", nodeName)
]
}
}
}
// Now we trigger all branches
parallel branches
// This method collects a list of Node names from the current Jenkins instance
@NonCPS
def nodeNames() {
return jenkins.model.Jenkins.instance.nodes.collect { node -> node.name }
}
从代码https://jenkins.io/doc/pipeline/examples/#trigger-job-on-all-nodes取