Jenkins管道Jenkins文件加载外部groovy类

Jenkins管道Jenkins文件加载外部groovy类,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,有人能就如何将外部groovy类加载到Jenkins文件中提供建议吗? 通常,我希望通过构造函数传递参数来构建实例。 下面是示例代码 詹金斯档案 工具.groovy public class Demo { String message; Demo(String message) { this.message=message; } public void print(def script) { scri

有人能就如何将外部groovy类加载到Jenkins文件中提供建议吗? 通常,我希望通过构造函数传递参数来构建实例。 下面是示例代码

詹金斯档案

工具.groovy

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

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

如果您的外部groovy文件与Jenkins文件位于同一个存储库中,您可以简单地使用“加载”,如下所示

mytools = load 'Tools.groovy'
如果它在另一个repo中,则需要在加载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']]]
Tools.groovy
中,必须有一个返回语句。。。由于您希望在类内调用函数,因此必须在最后返回new Demo(),这将返回对象对mytools的引用


除此之外,您还可以始终使用groovy类加载器。

这样做需要一个助手函数

工具.groovy 詹金斯档案
load
对函数很有效,但似乎无法处理类(根据问题)。根据问题,他们希望加载类,而不是实例。默认不受信任的代码中不允许使用类加载器。
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']]]
mytools = load 'Tools.groovy'
public class Demo {

}
return new Demo() ;
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
stage('Demo stage') {
   steps {
       script {
           Object lib = load 'path/to/Tools.groovy'
           Object demo = lib.createDemo('a demo')
           demo.print(this)
       }
   }
}