プロジェクトのルートにドロップされたjenkinsfileがあり、パイプライン用のgroovyファイルを取得して実行したいと思います。これを機能させることができる唯一の方法は、別のプロジェクトを作成し、fileLoader.fromGit
コマンドを使用することです。やりたい
def pipeline = load 'groovy-file-name.groovy'
pipeline.pipeline()
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()
}
load
を実行する前に、checkout scm
(またはSCMからコードをチェックアウトする他の方法)を実行する必要があります。
複数の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
@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)
}
注意:引数はオプションです。もしあれば空欄のままにしてください。
これがさらに役立つことを願っています。