Tell Jenkins to run a specific project on a particular slave node

How do I tell Jenkins to run a specific project on a particular slave?

I've set up a Jenkins master node, and a slave node that I want to use for staging an application. But I can't figure out how to configure the project to run on the slave node I created.


Solution 1:

Set the "Restrict where this job can be run" check box in your job configuration and specify the name of your slave.

If you add more slaves later, you can set labels for each slave and specify those in your job configs.

See this reference documentation:

  • https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds

Solution 2:

If you are running a Pipeline job, you first want to add a label (e.g. 'slave') to the slave node (or agent as it seems to be called now).

Then, in the pipeline script, you specify the label the job runs on:

Declarative pipeline:

pipeline {
    agent {label 'slave'}
    stages {
        ...
    }
}

Scripted pipeline:

node (label: 'slave') {
    ...
}

This job will now run on any node with the label 'slave'. If you only want the job to run on this particular slave, don't reuse the label. And of course the label doesn't have to be 'slave'; it can be whatever you want.

Update:

In the scripted pipeline, if your node is named "My Node", you can also do this:

node ('My Node') {
    ...
}

If you only want the code block to run on that particular node, this is useful. However, using labels is more flexible, and can make it easier to add nodes to share the workload.

Solution 3:

If you want to use Node/Label as a parameter then install NodeLabel Parameter Plugin