web-dev-qa-db-fra.com

erreur de bibliothèque partagée jenkins com.cloudbees.groovy.cps.impl.CpsCallableInvocation

Je lance ce code à travers le pipeline jenkins (bibliothèque partagée). 

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

Localement, ça marche. Je reçois cette erreur: 

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

aide moi s'il te plait

4
element

Quelque chose ne va pas avec l'interprète groovy dans ce Jenkins. J'essaie d'écrire une bibliothèque et avoir la même erreur.

J'ai fait un exemple de script de pipeline. J'ai écrit différentes classes pour éviter les erreurs induites:

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

la sortie sur ce script est:

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

Le problème est dans cette chaîne this.t1 = t2.getT2(). Il s'avère que la fonction t2.getT2() n'a pas pu être effectuée à l'intérieur du constructeur :(

Et 2ème - si vous essayez de revenir comme ça:

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

Ça va échouer ...

2
wunt

Comme cela est étroitement lié et apparaît dans Google en haut, je vais donner quelques informations supplémentaires à com.cloudbees.groovy.cps.impl.CpsCallableInvocation

J'arrive là-dessus lorsque j'ai utilisé le constructeur suivant: (aucune erreur localement dans EclipseIDE, mais Jenkins s'est plaint de ce message d'erreur inutile ne mentionnant aucune ligne de code)

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

Ici, c’est le point où le commentaire @wunt, petit mais très utile, entre en jeu.

0
Cutton Eye

Quand je fais face à cette erreur, j'annote la méthode qui échoue avec @NonCPS à partir de bibliothèque groovy-cps de Cloudbees et résolu!

0
Arcones