我将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
答案 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是可选的,如果有,则将其添加或留空。
希望这可以进一步帮助您。