当前位置: 首页 > 知识库问答 >
问题:

Jenkins共享库错误com.cloudbees.groovy.cps.impl.CpsCallableInvock

尉迟德惠
2023-03-14

我通过jenkins管道(共享库)运行此代码。

enum Components {
  service('name_api')

  Components(String componentName) {
    this.componentName = componentName
  }

  private String componentName

  String getComponentName() {
    return componentName
  }

  static boolean isValid(String name) {
    for (Components component : values()) {
      if (component.getComponentName().equalsIgnoreCase(name)) {
        return true
      }
    }
    println("The name of component is incorrect")
  }
}

它在本地工作,但在Jenkins管道中,我得到以下错误:

hudson.remoting.ProxyException:         
com.cloudbees.groovy.cps.impl.CpsCallableInvocation

请帮帮我

共有3个答案

李和裕
2023-03-14

当我面对这个错误时,我用Cloudbees从groovy cps库中的@NonCPS注释了失败的方法,并解决了它!

阮健
2023-03-14

由于这是密切相关的,并在谷歌顶部弹出,我将向com提供一些额外的信息。云蜂。棒极了。cps。impl。CpsCallableInvocation

当我使用以下构造函数时,我发现了这一点:(EclipseIDE中没有本地错误,但jenkins抱怨说这个无用的错误消息没有提到任何代码行)

class blubb{
  blubb(Name){      
      super(Name) // must be first in CONSTRUCTOR
      // no return from super! , nevertheless, last throws...
      println("This will never be printed inside of jenkins!") 
      someBaseClassFunction() // this line is not allowed but errors!
  }
}

这就是@wunt小但非常有用的评论发挥作用的地方。

辛麻雀
2023-03-14

Jenkins认为groovy解释器有问题。我正在尝试编写一个库,但出现了相同的错误。

我制作了一个管道脚本的示例。我编写了不同的类以避免诱发错误:

class Test1 {
    private t1
    private wfs

    Test1(Test2 t2, wfs) {
        this.wfs = wfs
        wfs.echo 'TEST1 constructor'
        this.t1 = t2.getT2() }

    def getT1() {
        wfs.echo 'getT1() function'
        def result = t1.toString()
        return result }
}

class Test2 {
    private t2
    private wfs

    Test2(wfs) {
        this.wfs = wfs
        wfs.echo 'TEST2 constructor'
        this.t2 = "hello" }

    def getT2() {
        wfs.echo 'getT2() function'
        def result = t2.toString()
        return result }
}

echo 'Creating Test2 object'
Test2 test2 = new Test2(this)
echo "Test2 object was created successfully. test2.t2="+test2.getT2()
echo 'Creating Test1 object'
Test1 test1 = new Test1(test2,this)
echo "Test1 object was created successfully. test1.t1="+test1.getT1()

此脚本的输出为:

Started by user admin
[Pipeline] echo
Creating Test2 object
[Pipeline] echo
TEST2 constructor
[Pipeline] echo
getT2() function
[Pipeline] echo
Test2 object was created successfully. test2.t2=hello
[Pipeline] echo
Creating Test1 object
[Pipeline] echo
TEST1 constructor
[Pipeline] End of Pipeline
com.cloudbees.groovy.cps.impl.CpsCallableInvocation
Finished: FAILURE

问题出在这个字符串中。t1=t2。getT2()。结果是t2。getT2()函数无法在构造函数内完成:(

第二个-如果您尝试像这样返回:

def getT1() {
    wfs.echo 'getT1()' 
    return t1.toString() 
}

它将失败。。。

 类似资料:
  • 可以合并多个共享Jenkins库吗? 例如,我有一个公共共享库:我的共享库(带有maven项目的git存储库)定义在包含一些作业的jenkins文件夹上。在该文件夹中运行的每个作业都可以使用Jenkins文件中的共享库,包括: 现在,我想创建另一个共享库:包含一些专门管道的my-专门化共享库(在另一个git存储库中,也作为maven项目)。我的专用共享库中的管道(groovy类、脚本等)应该能够使

  • 问题内容: 我正在尝试使用通过Cmake创建的Makefile在Linux中编译共享库,但是运行make会出现以下错误: 我在CMakeLists.txt中提供以下命令,以便说我想要共享(.so)库: 为了避免上面显示的-fPIC错误,我还需要指定什么? 提前谢谢 问题答案: 需要使用-fPIC编译boost库:请看一下:如何使用boost.python中的-fPIC编译静态库。 尝试在项目中按c

  • 我试图在Linux中使用Cmake创建的Makefile编译一个共享库,但运行make时出现以下错误: 为了避免上面显示的-fpic错误,我还需要指定什么? 提前多谢

  • 我刚开始使用IntelliJ,我的SharedLibrary越来越大,所以我想搬到IDE。我明白了。gdsl用于自动完成等(基本工作:) 但是,当我的脚本使用@库符号时,我得到了错误(无法解析符号等),我是java世界中的“孩子”(. net日报),我想我错过了一些Jenkins依赖项,但哪一个? 此项目仅适用于共享库,其他:)有什么提示吗?

  • 我有一个Jenkins文件,我正在尝试从共享库实例化groovy类。我得到“无法解决类测试” 我有一个src/com/org/foo。共享库中的groovy文件: 我正试图在我的Jenkins文件中实例化它 如果我将文件作为一个类引用(我没有对其构造函数的访问权限),那么它就会起作用。即: 这很好,让我使用foo函数。但是,我失去了赋予类常量并用参数构造它的能力。 知道如何定义和使用共享库中的类吗

  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎