web-dev-qa-db-ja.com

groovyファイルをロードして実行する方法

プロジェクトのルートにドロップされたjenkinsfileがあり、パイプライン用のgroovyファイルを取得して実行したいと思います。これを機能させることができる唯一の方法は、別のプロジェクトを作成し、fileLoader.fromGitコマンドを使用することです。やりたい

def pipeline = load 'groovy-file-name.groovy'
pipeline.pipeline()
42
user301693

Jenkinsfileとgroovyファイルが1つのリポジトリにあり、JenkinsfileがSCMからロードされている場合は、次を実行する必要があります。

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()
}
74
Anton Shishkin

loadを実行する前に、checkout scm(またはSCMからコードをチェックアウトする他の方法)を実行する必要があります。

16

複数の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
6
awefsome

@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()
}

非常に便利なスレッドは、同じ問題を抱えていて、あなたに続いて解決しました。

私の問題は:Jenkinsfile-> first.groovyを呼び出す-> call 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)
}

注意:引数はオプションです。もしあれば空欄のままにしてください。

これがさらに役立つことを願っています。

1
kancio