Search code examples
groovyjenkins

Run a remote command on all Jenkins slaves via Masters's script console


I want to run same shell command (very simple shell commands like ls) on all the UNIX slaves which are connected to the master by using the master's script console.

How can I do this using groovy?

Want to do something like this: Display Information About Nodes but instead of displaying information, I want to also run some simple UNIX commands on each slave and print the results.


Solution

  • import hudson.util.RemotingDiagnostics;
    
    print_ip = 'println InetAddress.localHost.hostAddress';
    print_hostname = 'println InetAddress.localHost.canonicalHostName';
    
    // here it is - the shell command, uname as example 
    uname = 'def proc = "uname -a".execute(); proc.waitFor(); println proc.in.text';
    
    for (slave in hudson.model.Hudson.instance.slaves) {
        println slave.name;
        println RemotingDiagnostics.executeGroovy(print_ip, slave.getChannel());
        println RemotingDiagnostics.executeGroovy(print_hostname, slave.getChannel());
        println RemotingDiagnostics.executeGroovy(uname, slave.getChannel());
    }