2 votes

Appeler timeout() & input() à l'intérieur d'un script groovy partagé.

J'ai une classe Groovy partagée entre différents pipelines Jenkins. Je voudrais déplacer cette partie du pipeline à l'intérieur du script groovy partagé.

timeout (time: 15, unit: 'SECONDS') {
    input ('Validation is required')
}

Mais il ne reconnaît pas l'entrée () ou le timeout(). donc je dois les passer comme paramètres

def requireValidation (Closure timeout, Closure input) {
    timeout (time: 15, unit: 'SECONDS') {
        input ('Validation is required')
    }
}

Existe-t-il un moyen d'importer input & timeout à l'intérieur du groovy script de manière à avoir une fonction sans paramètres ?

 def requireValidation()

0voto

Perplexabot Points 1252

Une classe groovy normale G.groovy :

class G {
    def hello(s) {
        println("hello ${s}")
    }
    def timeout( ...
    def input( ...
}

et le script qui doit l'utiliser main.groovy :

def requireValidation(){
    def script = new GroovyScriptEngine('.').with {
        loadScriptByName('G.groovy')
    }
    this.metaClass.mixin script

    hello('jon');
}

requireValidation()

qui s'imprimera :

bonjour jon

L'importation se fait à l'intérieur du requireValidation (inspirée de Python) en utilisant la fonction GroovyScriptEngine . L'utilisation directe de la fonction est due à la magie de this.metaClass.mixin script . Une meilleure approche dans main.groovy serait :

def script = new GroovyScriptEngine('.').with {
    loadScriptByName('G.groovy')
}
this.metaClass.mixin script

def requireValidation(){
    hello('jon');
}

requireValidation()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X