簡體   English   中英

Jenkins Pipeline Jenkinsfile 加載外部常規類

[英]Jenkins Pipeline Jenkinsfile load external groovy class

任何人都可以就如何將外部 groovy 類加載到 Jenkinsfile 中提出建議嗎? 一般來說,我想通過構造函數傳遞參數來構建實例。 下面的示例代碼。

詹金斯檔案

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

工具.groovy

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

    public void print(def script) {
        script.sh "echo " + message
    }
}
mytools = load 'Tools.groovy'
public class Demo {

}
return new Demo() ;

在您的Tools.groovy您必須有一個 return 語句...因為您要在類中調用函數,所以您必須在最后返回 new Demo(),這會將對象的引用返回到 mytools。

除此之外,您始終可以使用 groovy 類加載器。

如果您的外部 groovy 文件位於 JenkinsFile 所在的同一存儲庫中,您可以簡單地使用“加載”,如下所示

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']]]

它需要一個輔助函數來做到這一點。

工具.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

詹金斯檔案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM