如何使用pipeline插件在特定节点上触发jenkins构建?

qoefvg9y  于 2023-10-17  发布在  Jenkins
关注(0)|答案(4)|浏览(143)

我有一个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”上运行。为什么会这样?是不是因为“节点”步骤在构建步骤应该在哪个节点上构建时并不重要?

wb1gzix0

wb1gzix01#

请参阅bug here。解决方案如下。
1.安装Node和Label参数插件
1.在test_job的配置中,选择“This build is parameterized”,添加一个Label参数,并将参数名称设置为“node”
1.在管道脚本中,使用代码:

build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester1']]
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester2']]

工作会按我的意愿进行

    • 我仍然认为这是一个bug。因为节点步骤应该完成它的工作,而不是让其他插件来完成它。
7jmck4yq

7jmck4yq2#

我做了同样的事情,但是使用了Node参数,所以我可以直接使用节点列表运行作业,或者运行管道(在管道中我使用Choice参数来拥有可用节点的列表)。所以在我的例子中:
1.安装Node和Label参数插件
1.在test_job的配置中,选择“This build is parameterized”并添加一个Node参数,然后将参数名称设置为node_name
1.在管道中添加Choice参数,将其命名为node,将可能的选择放在那里,因此运行管道时您可以选择它应该在哪个节点上运行。
要插入到管道脚本中的代码:

build job: 'my_job', 
  parameters: [[$class: 'NodeParameterValue', name: 'node_name', labels: ["$node"], nodeEligibility: [$class: 'AllNodeEligibility']]]
w46czmvw

w46czmvw3#

下面是我如何得到它的工作
1.创建一个“job”“test_job”,参数类型为“label”,名称为“node”,值可以是任何字符串。(这是要触发的作业)。将“限制此项目的运行位置”设置为标签值
1.创建一个参数类型为“Node”的“pipeline”。在pipeline部分中,使用以下脚本
请注意,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}" ]
                ]
}}}}}
xhv8bpkk

xhv8bpkk4#

我刚刚在我的安装上测试了这个,它在每个节点上正确地运行了每个脚本。您可能需要检查您是否正确配置了从服务器。我相信文档说他们需要通过Java Web Start设置Launch slave agents,你可以验证一下。

相关问题