【发布时间】:2019-01-10 09:47:31
【问题描述】:
我正在寻找有关设计 Jenkins 共享库类的一些指导。使用全局变量作为共享库工作正常,但每次我在 src/ 中定义一个类并想导入它时,我都会收到无法解析类的错误。
这是我的共享库结构:
src
- de
- schlumpf
- Tester.groovy
vars
- sayHello.groovy
类 Tester.groovy
这是我想在管道作业中初始化的类的代码。
package de.schlumpf
public class Tester implements Serializable {
public String name = "test"
Tester(String pName) {
this.name = pName
}
def sayHi() {
echo "Hello, ${this.name}."
}
def sayHi(String name) {
echo "Hello, ${name}."
}
}
变量 sayHello.groovy
#!/usr/bin/env groovy
def call(String name = 'human') {
echo "Hello, ${name}."
}
管道作业
@Library('pipeline-library-demo')
import de.schlumpf.Tester //de.schlumpf doesn't work as well
stage('Demo') {
echo 'Hello world'
sayHello 'test'
def t = new Tester('Alice')
t.sayHi()
}
在第 2 行我收到错误:无法解析 de.schlumpf.Tester 类。全局变量 sayHello 就像一个魅力...有谁知道我在这里做错了什么?
我知道这看起来和这个相似,但我在我的路径中找不到错字或其他东西... Using Jenkins Shared Libraries as classes
官方文档在这里:https://jenkins.io/doc/book/pipeline/shared-libraries/
版本
- 詹金斯:版本。 2.150.1
- 管道 2.6
- 管道:Groovy 2.61.1
- 管道:共享 Groovy 库 2.12
【问题讨论】:
-
在
vars代码中使用src代码然后在管道中使用它通常更容易。 -
我已经读过好几遍了。但是我必须使用静态方法。在 vars 文件夹中,我不能将类与对象一起使用,对吗?好吧,可以做到这一点,但我不明白为什么使用 src 文件夹如此复杂。我的意思是它已实现,所以为什么它没有按预期工作......一般我想使用对象而不是静态代码。
-
我遇到了同样的问题。您已经找到解决方案了吗?
-
还没有,我使用了 Var 解决方案。但是自从我实现它之后我就没有再测试它了
-
@MattSchuchard 如果有枚举(在 src 中)应该作为参数从 Jenkinsfile 传递给函数(在 var 中)怎么办?
标签: jenkins groovy shared-libraries jenkins-pipeline jenkins-shared-libraries