我有一个名为“TestPipeline”的Jenkins管道作业。我想触发2个标记为“tester1”和“tester2”的不同从属的构建。管道脚本在这里非常简单:
node('tester1') {
build 'test_job'
}
node('tester2') {
build 'test_job'
}
但是,当我运行TestPipeline作业时,“test_job”将不会在我指定的节点上运行。但是在随机节点上运行。
我想知道我是否应该在“test_job”上设置“限制此项目可以运行的位置”。所以我把它设置为“tester”(“tester”标签包含节点“tester1”和“tester2”)。但是当我再次运行管道作业时,“test_job”在“tester2”上运行两次。我应该期望首先在“tester1”上运行该作业,然后在“tester2”上运行。 这是为什么?是因为“节点”步骤在构建构建步骤的哪个节点上无关紧要?
答案 0 :(得分:22)
请参阅错误here。解决方案如下。
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester1']]
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester2']]
这项工作将按照我的意愿建造。
然而,我认为这只是一种解决方法。我仍然相信这是一个错误。因为节点步骤应该完成它的工作,而不是让其他插件为它做。
答案 1 :(得分:6)
我做了同样的事,但是使用Node参数,所以我可以直接使用节点列表运行作业,或者运行管道(在管道中我使用Choice参数来获得可用节点列表)。所以在我的情况下:
node_name
node
,添加可能的选项,以便运行管道,您可以选择应该在哪个节点上运行。要插入管道脚本的代码:
build job: 'my_job',
parameters: [[$class: 'NodeParameterValue', name: 'node_name', labels: ["$node"], nodeEligibility: [$class: 'AllNodeEligibility']]]
答案 2 :(得分:1)
这就是我的工作方式
创建一个'job''test_job',其参数类型为'label',名称为'node',值可以是任何字符串。 (这是要触发的作业) 设置“限制此项目的运行位置”为标签值
创建参数类型为“节点”的“管道”。在管道部分,使用以下脚本
请注意,test_job的标签为$ {env.NODE_NAME},它将由管道根据用户的选择进行设置
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
script {
build job: 'test_job', parameters: [
[$class: 'LabelParameterValue', name: 'node', label: "${env.NODE_NAME}" ]
]
}}}}}
答案 3 :(得分:0)
我刚刚在我的安装上对此进行了测试,并在每个节点上正确运行了每个脚本。 您可能需要检查是否已正确配置了从属设备。我相信文档说他们需要通过Java Web Start设置启动启动从属代理,你可以验证。