webentwicklung-frage-antwort-db.com.de

fehler der gemeinsam genutzten Bibliothek von jenkins com.cloudbees.groovy.cps.impl.CpsCallableInvocation

Ich führe diesen Code über die Jenkins-Pipeline (gemeinsam genutzte Bibliothek) aus. 

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")
  }
}

Vor Ort funktioniert es. Ich erhalte diesen Fehler: 

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

hilf mir bitte

4
element

Mit dem groovigen Interpreter in diesem Jenkins stimmt etwas nicht. Ich versuche eine Bibliothek zu schreiben und habe den gleichen Fehler.

Ich habe ein Beispiel für ein Pipeline-Skript erstellt. Ich habe verschiedene Klassen geschrieben, um induzierte Fehler zu vermeiden:

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

ausgabe für dieses Skript ist:

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

Das Problem liegt in dieser Zeichenfolge this.t1 = t2.getT2(). Es stellt sich heraus, dass die Funktion t2.getT2() nicht im Konstruktor ausgeführt werden konnte :(

Und der zweite - wenn Sie versuchen, so zurückzukehren:

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

Es wird scheitern ...

2
wunt

Da dies eng verwandt ist und in Google oben angezeigt wird, werde ich einige zusätzliche Informationen zu com.cloudbees.groovy.cps.impl.CpsCallableInvocation bereitstellen.

Ich komme hierüber vorbei, wenn ich folgenden Konstruktor verwendet habe: (lokal keine Fehler in EclipseIDE, aber Jenkins beschwerte sich mit dieser nutzlosen Fehlermeldung, die keine Codezeile erwähnte)

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!
  }
}

Dies ist der Punkt, an dem @wunt kleiner, aber sehr nützlicher Kommentar ins Spiel kommt.

0
Cutton Eye

Wenn ich auf diesen Fehler stoße, kommentiere ich die Methode, die mit @NonCPS aus der groovy-cps-Bibliothek von Cloudbees fehlschlägt und wurde gelöst!

0
Arcones