持续集成 Pipeline share library 调用不到 src 目录的方法

TavisD · August 28, 2018 · Last by fungaegis replied at October 28, 2020 · 1847 hits

想在 vars 目录调用 src 目录下写的方法,本地 IDE 执行没问题,但是在 Jenkins 里执行却调用不了,google 了好久也没解决,请问有同学碰到过吗?

目录结构

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

DemoClass.groovy 的内容

#!groovy
package foo

class DemoClass {
    def testDemoMethod() {
        println("src目录 DemoClass类 testDemoMethod方法")
    }
}

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方法")
}

在 Jenkins 上的 Pipeline

@Library('tools') _

varDemo.testVarsDemo()

varDemo.testVarsInvokeDemoMethod()

Pipeline 执行后结果如下

 > 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
Finished: SUCCESS

代码有执行到了 testVarsDemo() 的方法,也打印出来了。执行了 testVarsInvokeDemoMethod() 方法,有打印出来,但是demoClass.testDemoMethod()里的方法却没有打印出来。
请问下这是因为什么?怎么解决?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

var 里不要直接去调 src 里的东西
在你的 pipeline 里把 src 里的实例作为参数传到 var 里用

TavisD #2 · August 29, 2018 Author

我本来是打算一些常见的公共类,比如 Jira 操作类、tools 工具类就封装放在 src 里,然后 vars 里再实例化调用它们的方法。这样 pipeline 里就直接调用 vars 里的方法就好了,其他人引用时就方便很多。
不太明白你意思,可以稍微具体点吗?如果在 pipelien 里把 src 实例化,同时后面再调用 vars 里的方法的话,好像@Library('tools') _又引入不了 src 里的类了。

src 里也不一定要写类,可以写方法,然后 src 里的方法是可以调用同 package 里的类的
然后你的 pipeline 里可以直接用 src 里的方法

另外,pipeline 里可以引入 src 里的类的
我记得官方文档就有事例

您好,请问后续是如何解决的,我也遇到了同样的问题。

6Floor has deleted

调用入口是:

def call(){
}

想问题主解决这个问题了吗?我查了很多资料 stack overflow 翻烂了也没找到解决方案.我也是想实现 将功能函数/类放在 src 然后在 vars 中创建模板库引用功能函数. 现在用 import 直接报错.......我看 github 上面别人也是这么用的....

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up