Jenkins管道共享库无法调用src目录中的方法

时间:2018-08-29 00:19:38

标签: jenkins jenkins-pipeline pipeline

我想从vars目录中调用src目录的方法,该方法可在IDE中使用。但这在詹金斯看来不起作用。

1。项目结构

├── src
│   └── foo
│       └── DemoClass.groovy
└── vars
    └── varDemo.groovy

2。DemoClass.groovy的内容

#!groovy
package foo

class DemoClass {
    def testDemoMethod() {
        println("src DemoClass testDemoMethod")
    }
}

3。varDemo.groovy的内容

#!groovy

import foo.DemoClass

def testVarsDemo() {
    println("vars varDemo.groovy testVarsDemo")
}

def testVarsInvokeDemoMethod() {
    println("vars varDemo.groovy testVarsInvokeDemoMethod")
    def demoClass = new DemoClass()
    demoClass.testDemoMethod()
    println("end vars varDemo.groovy testVarsInvokeDemoMethod")
}

4.Jenkins管道

@Library('tools') _
varDemo.testVarsDemo()
varDemo.testVarsInvokeDemoMethod()

5。在管道中执行结果

 > git checkout -f b6176268be99abe300d514e1703ff8a08e3ef8da
Commit message: "test"
 > git rev-list --no-walk c1a50961228ca071d43134854548841a056e16c9 # timeout=10
[Pipeline] echo
vars varDemo.groovy testVarsDemo
[Pipeline] echo
vars varDemo.groovy testVarsInvokeDemoMethod
[Pipeline] echo
end vars varDemo.groovy testVarsInvokeDemoMethod
[Pipeline] End of Pipeline

似乎demoClass.testDemoMethod()无效。为什么不能调用demoClass.testDemoMethod()?如果要调用src目录中的方法,该怎么办?谢谢!

1 个答案:

答案 0 :(得分:0)

没有在本地重新实现代码段,这是我和您的在正常工作之间发现的一些差异。

JENKINSFILE

  1. 我的@Library行上的下划线之前没有空格
  2. 在@Library行之后,我立即导入实现要调用的方法的共享库类。您的情况应该是import foo.DemoClass
  3. 我对我的方法的调用的格式为(new DemoClass(config, this)).testVarsInvokeDemoMethod()

共享库类

  1. 我的任何常规课程中都没有#!groovy
  2. 我的课是公开的,并实现了Serializable

希望这些区别之一是其为何未被调用的原因。