Limiting Jenkins pipeline to running only on specific nodes

JenkinsJenkins Pipeline

Jenkins Problem Overview


I'm building jobs that will be using Jenkins piplines extensively. Our nodes are designated per project by their tags, but unlike regular jobs the pipeline build does not seem to have the "Restrict where this project can be run" checkbox. How can I specify on which node the pipeline will run the way I do for regular jobs?

Jenkins Solutions


Solution 1 - Jenkins

You specify the desired node or tag when you do the node step:

node('specialSlave') {
   // Will run on the slave with name or tag specialSlave
}

See https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#node-allocate-node for an extended explanation of the arguments to node.

Edit 2019: This answer (and question) was made back in 2017, back then there only was one flavor of Jenkins pipeline, scripted pipeline, since then declarative pipeline has been added. So above answer is true for scripted pipeline, for answers regarding declarative pipeline please see other answers below.

Solution 2 - Jenkins

For the record let's have the declarative pipeline example here as well (choosing a node which has the label 'X'):

pipeline {
    agent { label 'X' }
...
...
}

Solution 3 - Jenkins

To be clear, because Pipeline has two Syntax, there are two ways to achieve that.

Declarative

pipeline {
    agent none

    stages {
        stage('Build') {
            agent { label 'slave-node​' }
            steps {
                echo 'Building..'
                sh '''
                '''
            }
        }
    }

    post {
        success {
            echo 'This will run only if successful'
        }
    }
}

Scripted

node('your-node') {
  try {
     
    stage 'Build'
    node('build-run-on-this-node') {
        sh ""
    }
  } catch(Exception e) {
    throw e
  }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOpher LubzensView Question on Stackoverflow
Solution 1 - JenkinsJon SView Answer on Stackoverflow
Solution 2 - JenkinsredsevenView Answer on Stackoverflow
Solution 3 - JenkinseinverneView Answer on Stackoverflow