如何加载groovy文件并执行它

时间:2016-06-13 22:33:52

标签: jenkins groovy jenkins-pipeline

我将jenkins文件放入项目的根目录中,并希望为我的管道提供一个groovy文件并执行它。我能够使其工作的唯一方法是创建一个单独的项目并使用pub fn collect_prime_factors(number: i32) -> Vec<i32> { let mut prime_factors = Vec::new(); for i in 2..number { if number % i == 0 { prime_factors.push(i); }; } prime_factors // Return the vector from the function. } 命令。我想做

fileLoader.fromGit

5 个答案:

答案 0 :(得分:64)

如果从SCM加载了Jenkinsfile和groovy文件并且Jenkinsfile,则必须执行以下操作:

<强> Example.Groovy

def exampleMethod() {
    //do something
}

def otherExampleMethod() {
    //do something else
}
return this

<强> JenkinsFile

node {
    def rootDir = pwd()
    def example = load "${rootDir}@script/Example.Groovy "
    example.exampleMethod()
    example.otherExampleMethod()
}

答案 1 :(得分:14)

在执行checkout scm之前,您必须执行load(或从SCM检查代码的其他方式)。

答案 2 :(得分:5)

感谢@anton和@Krzysztof Krasori,如果我合并checkout scm和确切的源文件

,它工作正常

<强> Example.Groovy

def exampleMethod() {
    println("exampleMethod")
}

def otherExampleMethod() {
    println("otherExampleMethod")
}
return this

<强> JenkinsFile

node {
    // Git checkout before load source the file
    checkout scm

    // To know files are checked out or not
    sh '''
        ls -lhrt
    '''

    def rootDir = pwd()
    println("Current Directory: " + rootDir)

    // point to exact source file
    def example = load "${rootDir}/Example.Groovy"

    example.exampleMethod()
    example.otherExampleMethod()
}

答案 3 :(得分:3)

如果您的管道可以加载多个groovy文件,并且这些groovy文件之间也共享它们的内容:

JenkinsFile.groovy

def modules = [:]
pipeline {
    agent any
    stages {
        stage('test') {
            steps {
                script{
                    modules.first = load "first.groovy"
                    modules.second = load "second.groovy"
                    modules.second.init(modules.first)
                    modules.first.test1()
                    modules.second.test2()
                }
            }
        }
    }
}

first.groovy

def test1(){
    //add code for this method
}
def test2(){
    //add code for this method
}
return this

second.groovy

import groovy.transform.Field
@Field private First = null

def init(first) {
    First = first
}
def test1(){
    //add code for this method
}
def test2(){
    First.test2()
}
return this

答案 4 :(得分:1)

非常有用的线程,遇到了同样的问题,跟随您解决了

我的问题是:Jenkinsfile->呼叫first.groovy->呼叫second.groovy

这是我的解决方法:

Jenkinsfile

node {
  checkout scm
  //other commands if you have

  def runner = load pwd() + '/first.groovy'
  runner.whateverMethod(arg1,arg2)
}

first.groovy

def first.groovy(arg1,arg2){
  //whatever others commands

  def caller = load pwd() + '/second.groovy'
  caller.otherMethod(arg1,arg2)
}

注意:args是可选的,如果有,则将其添加或留空。

希望这可以进一步帮助您。