Angelina
Angelina

Reputation: 2265

Globally declare and reuse node in Jenkinsfile

Is there a way to reuse node in different stage without copy/pasting the agent every time? I have below agent docker in 5 of my stages, it's making file rather big.

pipeline {
    agent {
        node {
            label 'centos'
        }
    }
    stages {
        stage('3rd party Scan') {
            when {
                beforeAgent true
                allOf {
                    triggeredBy 'TimerTrigger'
                    branch 'master'
                }
            }
            agent {
                docker {
                    reuseNode true
                    image NODE_DOCKER_IMAGE
                    args '-u root'
                }
            }
            steps {
                script {
                   sh 'npm ci'
                   scan.run_scan();
                }
            }
        }

        stage('Install') {
            when {
                beforeAgent true
                not { expression { ... } }
            }

            agent {
                docker {
                    reuseNode true
                    image NODE_DOCKER_IMAGE
                    args '-u root'
                }
            }

            steps {
                sh 'git clean -fxd'
                sh 'npm ci'
            }
        }

        stage('Version') {
            agent {
                docker {
                    reuseNode true
                    image NODE_DOCKER_IMAGE
                    args '-u root'
                }
            }

            steps {...
            }
        }
    }
}

Upvotes: 0

Views: 1240

Answers (1)

MaratC
MaratC

Reputation: 6889

A stages clause is valid under stage so this might work:

pipeline {
    agent {
        node {
            label 'centos'
        }
    }
    stages {
      stage('All Docker Stages') {
       agent {
           docker {
               image NODE_DOCKER_IMAGE
               args '-u root'
           }
       }
       stages {
          stage('3rd party Scan') {
            when {
                beforeAgent true
                allOf {
                    triggeredBy 'TimerTrigger'
                    branch 'master'
                }
            }
            steps {
                script {
                   sh 'npm ci'
                   scan.run_scan();
                }
            }
        }

        stage('Install') {
            when {
                beforeAgent true
                not { expression { ... } }
            }
            steps {
                sh 'git clean -fxd'
                sh 'npm ci'
            }
        }

        stage('Version') {
            steps {

Upvotes: 1

Related Questions