在jenkins声明式管道文件中重用groovy脚本

时间:2019-04-03 02:07:49

标签: jenkins jenkins-pipeline

是否有一种方法可以重用一次在Jenkinsfile中加载的Groovy脚本。

现在这就是我正在做的

            steps {
                script {
                    def util = load("${env.WORKSPACE}/scripts/build_util.groovy")
                    util.runStep1()
                }
            }
            steps {
                script {
                    def util = load("${env.WORKSPACE}/scripts/build_util.groovy")
                    util.runStep2()
                }
            }
            steps {
                script {
                    def util = load("${env.WORKSPACE}/scripts/build_util.groovy")
                    util.runStep3()
                }
            }

我在后期制作中再次执行相同的操作,其中包含多个脚本块步骤来发送邮件。

有更好的方法吗?我不能使用shared libraries

2 个答案:

答案 0 :(得分:1)

是的,您只需要加载一次脚本。

def util = load("${env.WORKSPACE}/scripts/build_util.groovy")

您可以创建一个阶段,然后在其中加载脚本并存储在变量中,然后执行以下操作:-

stage('Environment') {
     agent  { node { label 'master' } }
        steps {
          script {
                def util = load("${env.WORKSPACE}/scripts/build_util.groovy")
               }
            }
         }
post {
        // Things that we want done regardless of pipeline's outcome
        //
        always {

            // Push the overall statistics from all the stages to InfluxDB
            //
            node (LINUX_BUILD_NODE){
                script{
                    //Mail sending function call
                    //
                    util.runStep1()
                    util.runStep2()
                    util.runStep3()                        
                }
            }
        }
    }

您可以在任何阶段使用“ util ”来调用不同的功能。

答案 1 :(得分:0)

您可以在顶级声明变量util,然后在第一个阶段为它分配值,然后在任何阶段都可以使用它。

def util;

pipeline {
   agent any
   stages {
      stage('one') {
        steps {
            script {
                util = load("${env.WORKSPACE}/scripts/build_util.groovy")
                util.runStep1()
            }
        }
      }
      post {
        util.xxxx
      }

      stage('two') {
        steps {
            script {
                util = load("${env.WORKSPACE}/scripts/build_util.groovy")
                util.runStep2()
            }
        }
      }
      post {
        util.xxxx
      }

   }

   post {
        util.xxxx
   }
}