Jenkins Pipeline Jenkinsfile加载外部groovy类

时间:2016-11-18 20:50:44

标签: jenkins groovy jenkins-pipeline

有人可以建议如何将外部groovy类加载到Jenkinsfile中吗? 一般来说,我想通过构造函数传递参数来构建实例。 示例代码如下。

Jenkinsfile

stage('Demo stage') {
   //missing part  

}

Tools.groovy

public class Demo {
     String message;

     Demo(String message) {
        this.message=message;
     }


    public void print(def script) {
        script.sh "echo " + message
    }

}

3 个答案:

答案 0 :(得分:2)

mytools = load 'Tools.groovy'
public class Demo {

}
return new Demo() ;

在你的Tools.groovy中你必须有一个return语句...因为你想在一个类中调用函数,你必须在最后返回新的Demo(),这将返回对象的引用到mytools。

除此之外,你总是可以使用groovy类加载器。

答案 1 :(得分:0)

如果您的外部groovy文件位于JenkinsFile所在的同一个存储库中,您只需使用" load"如下图所示

mytools = load 'Tools.groovy'

如果它在另一个回购中,你需要在加载groovy文件之前签出scm,如下所示

checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'jenkins-scripts']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '******', url: 'https://github.com/jenkins_scripts.git']]]

答案 2 :(得分:0)

它需要辅助功能。

Tools.groovy

public class Demo {
    String message;
     
    Demo(String message) {
        this.message = message;
    }

    public void print(def script) {
        script.sh "echo " + message
    }
}

Demo createDemo(String message) {
    new Demo(message)
}

return this

Jenkinsfile

stage('Demo stage') {
   steps {
       script {
           Object lib = load 'path/to/Tools.groovy'
           Object demo = lib.createDemo('a demo')
           demo.print(this)
       }
   }
}