在Jenkinsfile中全局声明和重用节点

时间:2020-04-15 23:52:57

标签: jenkins-pipeline

是否有一种方法可以在不同阶段重用节点,而不必每次都复制/粘贴代理? 在我的五个阶段中,我都位于代理docker以下,这使文件变得很大。

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 {...
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

stages子句在stage下有效,因此这可能起作用:

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 {