Jenkins共享库src类-无法解析类

时间:2019-01-10 09:47:31

标签: jenkins groovy shared-libraries jenkins-pipeline jenkins-shared-libraries

我正在寻找有关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的作用就像一个咒语...有人知道我在这里做错了吗?

共享库在系统设置中导入: enter image description here

我知道这看起来与此相似,但是我在路径中找不到错别字或其他内容... Using Jenkins Shared Libraries as classes

官方文档在这里:https://jenkins.io/doc/book/pipeline/shared-libraries/

版本

    詹金斯:ver。 2.150.1
  • 管道2.6
  • 管道:Groovy 2.61.1
  • 管道:共享Groovy库2.12

2 个答案:

答案 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()