我有一个Jenkins管道作业,叫做“TestPipeline”。我想触发一个建立在2个不同的奴隶标记为“测试1”和“测试2”。管道脚本在这里非常简单:
node('tester1') {
build 'test_job'
}
node('tester2') {
build 'test_job'
}
但是,当我运行TestPipeline作业时,“test_job”不会在我分配的节点上运行。但是在随机节点上运行。
我想知道我是否应该在我的“test_job”上设置“Restrict where this project can be run”。因此我将其设置为“tester”(“tester”标签包含节点“tester1”和“tester2”)。但是当我再次运行管道作业时,“test_job”在“tester2”上运行了两次。我应该期望作业首先在“tester1”上运行,然后在“tester2”上运行。为什么会这样?是不是因为“节点”步骤在构建步骤应该在哪个节点上构建时并不重要?
4条答案
按热度按时间wb1gzix01#
请参阅bug here。解决方案如下。
1.安装Node和Label参数插件
1.在test_job的配置中,选择“This build is parameterized”,添加一个Label参数,并将参数名称设置为“node”
1.在管道脚本中,使用代码:
工作会按我的意愿进行
7jmck4yq2#
我做了同样的事情,但是使用了Node参数,所以我可以直接使用节点列表运行作业,或者运行管道(在管道中我使用Choice参数来拥有可用节点的列表)。所以在我的例子中:
1.安装Node和Label参数插件
1.在test_job的配置中,选择“This build is parameterized”并添加一个Node参数,然后将参数名称设置为
node_name
1.在管道中添加Choice参数,将其命名为
node
,将可能的选择放在那里,因此运行管道时您可以选择它应该在哪个节点上运行。要插入到管道脚本中的代码:
w46czmvw3#
下面是我如何得到它的工作
1.创建一个“job”“test_job”,参数类型为“label”,名称为“node”,值可以是任何字符串。(这是要触发的作业)。将“限制此项目的运行位置”设置为标签值
1.创建一个参数类型为“Node”的“pipeline”。在pipeline部分中,使用以下脚本
请注意,test_job的标签是${env.NODE_NAME},它将由管道根据用户的选择进行设置
xhv8bpkk4#
我刚刚在我的安装上测试了这个,它在每个节点上正确地运行了每个脚本。您可能需要检查您是否正确配置了从服务器。我相信文档说他们需要通过Java Web Start设置Launch slave agents,你可以验证一下。