Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run Jenkins stage on different nodes

I have the following Jenkinsfile of a multibranch pipeline architecture

#!/usr/bin/groovy

pipeline {
    agent {
        node {
            label 'ubuntu'
            customWorkspace "/src/$BUILD_NUMBER"
        }
    }
    environment {
        SRC_DIR = "$WORKSPACE"
        BUILD_DIR="/build/$BUILD_NUMBER"
    }

    stages {
        stage('Build') {
            steps {
                dir(BUILD_DIR) {
                    sh '$SRC_DIR/build.sh'
                }
            }
        }

        stage('Test') {
            steps {
                dir(BUILD_DIR) {
                   sh '$SRC_DIR/test.sh'
                }
            }
        }
    }
}

I am trying to run the 'Build' stage on Ubuntu and Red Hat nodes in parallel, and the 'Test' stage on the Ubuntu node only.

Can anybody help me in specifying how to choose which stage are run on which nodes. I found few solutions online but they recommended rewriting the build stage twice: once for the Red Hat node and the other for the Ubuntu node. Isn't there a way to do this without code duplication ?

Thank you very much

like image 986
T code Avatar asked Jan 16 '18 14:01

T code


1 Answers

Sure, you would want to label your slave nodes somehow. Basically configure all the node on Jenkins and give them meaningful names.

  stage('Build') {
   steps {
     node('os_linux') {
       sh './build.sh' 
     }
     node('os_redhat') {
       sh './build.sh' 
   }
  }

This will run the tasks in serial, and Jenkinsfile syntax also supports executing commands in parallel on different nodes.

Thanks,

like image 100
Surendra Deshpande Avatar answered Sep 28 '22 11:09

Surendra Deshpande