我正在寻找有关Jenkins Shared Library类设计的一些指导。使用全局变量作为共享库可以很好地工作,但是每次我在src /中定义一个类并想要导入它时,都会收到无法解析类的错误。
这是我的共享库结构:
src
- de
- schlumpf
- Tester.groovy
vars
- sayHello.groovy
Class 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/
版本
答案 0 :(得分:0)
它抛出错误,因为您在脚本块之外创建了一个类的对象。 尝试下面的代码,它应该可以工作。
@Library('pipeline-library-demo')
import de.schlumpf.*;
stages{
stage('Demo') {
steps{
echo 'Hello world'
sayHello 'test'
script{
def t = new Tester('Alice')
t.sayHi()
}
}
}
}
答案 1 :(得分:0)
当我动态加载库时,我在调用静态函数时遇到了类似的问题:https://www.jenkins.io/doc/book/pipeline/shared-libraries/#loading-libraries-dynamically
这应该适合你:
def myLib = library 'pipeline-library-demo'
def t = myLib.de.schlumpf.Tester.new('Alice')
t.sayHi()