【问题标题】:Using Jenkins Shared Libraries as classes使用 Jenkins 共享库作为类
【发布时间】:2018-10-04 21:58:46
【问题描述】:

我有一个 Jenkins 文件,我正在尝试从我的共享库中实例化一个 groovy 类。我得到“无法解决类测试”

我在共享库中有一个 src/com/org/foo.groovy 文件:

package com.org

class Test implements Serializable{
  String val
  Test(val) {
    this.val = val
  }
}

我正在尝试在我的 jenkinsfile 中实例化它

@Library('Shared-Library@master') 
import com.org //also tried to use with .foo with no success

def t = new Test("a") //doesnt work
def t = new foo.Test("a")//doesnt work
def t = new com.org.foo.Test("a")//doesnt work

如果我将文件称为一个类(我无权访问它的构造函数),那么会起作用。那就是:

@Library('Shared-Library@master')
def t = new foo.com.org.foo()

这很好,让我可以使用 foo 函数。但是,我失去了提供类常量并使用参数构造它的能力。

知道如何定义和使用共享库中的类吗? 谢谢

【问题讨论】:

  • 为什么要在foo.groovy 中定义它而不是命名为Test.groovy?我不知道是否有 Groovy 的怪异或 Jenkins Groovy 的怪异导致编译行为异常。如果您执行import com.org.fooprintln(foo),它将打印出class com.org.Test
  • 这是一个 javaism:保持类名 == 文件名。

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


【解决方案1】:
  1. 类的范围是默认范围。您可以将范围更改为公开
  2. 它抛出一个错误,因为您在脚本块之外创建了一个类的对象。试试下面的代码,它应该可以工作。试试下面的代码
@Library('Shared-Library@master') 
import com.org.*;

stages{
   stage('Demo') {  
      steps{
         script{
            def t = new Test("a") //this should work
         }
      }
   }
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多