13

我正在寻找有关设计 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}."
  }
}

var 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 行中,我得到了错误:Unable to resolve class de.schlumpf.Tester。全局变量 sayHello 就像一个魅力......有谁知道我在这里做错了什么?

共享库在系统设置中导入: 在此处输入图像描述

我知道这看起来与这个相似,但我在我的路径中找不到错字或其他东西...... 使用 Jenkins 共享库作为类

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

版本

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

2 回答 2

1

它引发错误,因为您在脚本块之外创建了一个类的对象。试试下面的代码,它应该可以工作。

@Library('pipeline-library-demo')
import de.schlumpf.*;

stages{
    stage('Demo') {  
      steps{
        echo 'Hello world'
        sayHello 'test'
       script{
        def t = new Tester('Alice')
        t.sayHi()
       }
      }
   }
 }  
于 2019-09-18T13:25:16.393 回答
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()
于 2021-03-07T13:46:26.043 回答