2017-12-05 1 views
0

Ich benutze eine gemeinsame jenkins-Bibliothek und klonen einen anderen Git Repo von dort. Das Repo enthält eine jenkinsfile ähnlich den follwing:Jenkins pipeline: Werte von einer anderen jenkinsfile lesen

#!/usr/bin/env groovy 
@Library('mylib') 
import jLib.* 

someStage{ 
    myparam = someValue 
} 

ich will "somevalue" lesen. Derzeit mache ich das mit einer Regexp, aber auf diese Weise kann ich nur eine Zeichenfolge und nicht komplexere Werte wie eine Karte abrufen.

In den documentation of Shared jenkins libs Werte werden von einem jenkinsfile die folgende Art und Weise geladen:

def call(body) { 
    // evaluate the body block, and collect configuration into the object 
    def config = [:] 
    body.resolveStrategy = Closure.DELEGATE_FIRST 
    body.delegate = config 
    body() 
} 

Wie kann ich Werte aus dem Jenkinsfile extrahieren im Arbeitsbereich auf ähnliche Weise? Woher kommt der Körper?

Vielen Dank für Ihre Zeit

+0

Ich glaube nicht, dass ich verstehe, was Sie versuchen zu tun - lesen Sie den Wert von 'Myparam'? Die Methode 'call (body)' ist eine Groovy-Methode, die eine Funktion aufruft und aufruft. Man kann sich die Signatur wie 'call (Closure body) vorstellen, wenn das hilft. – mkobit

+0

Ja Ich möchte den Wert von Myparam lesen. – herm

+0

Grundsätzlich möchte ich diese Datei in meinem Arbeitsbereich in eine Closure umwandeln und die darin enthaltenen Werte lesen, ähnlich wie es im zweiten Snippet angezeigt wird. Aber ich weiß nicht wie. – herm

Antwort

0

Ich fand eine Lösung.

Map configFromJenkinsfile(jenkinsfile){ 
    def jenkinsfileConfig = [:] 
    def matches = jenkinsfile =~ /(?s)\{(.*?)\}/ 
    def exec = new GroovyShell(new Binding(jenkinsfileConfig)).evaluate(matches[0][1]) 
    return jenkinsfileConfig; 
} 

Getestet habe ich es mit jenkinsFile als String übergeben (nach String projectJenkinsFile = readFile "Jenkinsfile" verwenden)

ich das Teil in der jenkinsfile ausführen mit allen Zuordnungen (zwischen '{' und '}') in einem groovyshell mit meinem Karte als verbindlich Alle Zuordnungen ohne Typ werden in der Bindung gefangen und können abgerufen werden.

Verwandte Themen