如何在声明式管道中使用NodeLabel参数插件

时间:2018-09-03 07:59:16

标签: jenkins jenkins-plugins jenkins-pipeline

我正在尝试将我的自由式作业转换为声明性管道作业,因为管道提供了更大的灵活性。我无法弄清楚如何在管道中使用NodeLabel参数插件(https://wiki.jenkins.io/display/JENKINS/NodeLabel+Parameter+Plugin)。

pipeline {
agent any

parameters {
    // Would like something like LabelParameter here
}

stages {
    stage('Dummy1') {
        steps {
            cleanWs()
            sh('ls')
            sh('pwd')
            sh('hostname')
        }
    }
    stage('Dummy2') {
        steps {
            node("comms-test02") {
                sh('ls')
                sh('pwd')
                sh('hostname')
            }
        }
    }
}

我基本上只需要一种方法,使用一个参数来指定作业的生成位置(使用从属标签)。

Jenkins要求提供一个我设置为“ any”的代理字段。但这似乎没有可用的labelparameter吗?

作为替代方案,我尝试使用“节点”命令(https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#-node-分配节点)。但这给我留下了两个正在运行的作业,这些作业在工作时看上去并不那么漂亮。

是否可以使用NodeLabel参数插件?还是有人可以采用更清洁的方法?

编辑:也许我不清楚。我需要能够在不同的节点上运行作业。通过参数触发作业时,应确定要运行的节点。节点标签插件可以完美地做到这一点。但是,我无法在管道中重现此行为。

2 个答案:

答案 0 :(得分:1)

这是一个完整的例子:

pipeline {
    parameters {
        choice(name: 'node', choices: [nodesByLabel('label')], description: 'The node to run on') //example 1: just listing all the nodes with label
        choice(name: 'node2', choices: ['label'] + nodesByLabel('label'), description: 'The node to run on') //example 2: add the label itself as the first choice to make "Any of the nodes" the default choice
    }
    
    agent none
    stages {
        stage('Test') {
            agent { label params.node}
            stages {
                stage('Print environment settings') {
                    steps {
                        echo "running on ${env.NODE_NAME}"
                        sh 'printenv | sort'
                    }
                }
            }
        }
    }
}

答案 1 :(得分:0)

假设您使用管道上的NodeLabel插件添加了参数(例如,名为slaveName)。现在,您需要提取slaveName的值并将其输入到agent-> node-> label字段中。

您可以使用代理内的node属性指定节点。 像这样-

agent
{
    node
    {
        label "${slaveName}"
    }
}