12

Ich habe eine deklarative Pipeline-Skript für mein mehrfach verzweigten Projekt zu verweisen, in denen Ich mag würde eine Textdatei und speichern Sie das Ergebnis lesen als ein String-Variable in dem von einem späteren Schritt zugegriffen werden Pipeline. Unter Verwendung des Schnipsel-Generator Ich habe versucht, so etwas zu tun:So setzt und eine Variable in einem Jenkinsfile

filename = readFile 'output.txt' 

Für welche filename wäre meine String.

Ich erhalte eine Fehlermeldung in der Ausgabe Jenkins Konsole:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
WorkflowScript: 30: Expected a step @ line 30, column 5. 
      filename = readFile 'output.txt' 

Benötige ich einen withEnv Schritt verwenden, muß die Ausgabe von readFile zu einer Jenkins Umgebungsvariable zu setzen? Wenn das so ist, wie?

Dank

+0

können Sie bearbeiten Ihre Frage nach der [MCVE] (http: In Ihrem Fall wäre es es in der Root-Pipeline wird Einstellung // stackoverflow.com/help/mcve) Anleitung? –

Antwort

13

Der Fehler ist zu verdanken, dass Sie nur Pipeline Schritte innerhalb der steps Richtlinie nutzen. Eine Problemumgehung, die ich kenne, besteht darin, den Schritt script zu verwenden und ein beliebiges Pipelineskript darin einzuschließen und das Ergebnis in der Umgebungsvariablen zu speichern, damit es später verwendet werden kann.

So in Ihrem Fall:

pipeline { 
    agent any 
    stages { 
     stage("foo") { 
      steps { 
       script { 
        env.FILENAME = readFile 'output.txt' 
       } 
       echo "${env.FILENAME}" 
      } 
     } 
    } 
} 
+0

ich versucht, und das Echo zeigt nichts –

+0

Seltsam, wenn diese laufen (Jenkins 2.32.2) ich das erwartete Ergebnis (hinzugefügt 'writefile-Datei:‚output.txt‘, Text:‚asdsad'' kurz vor ' readFile', bekomme ich '[Pipeline] echo asdsad' wie erwartet. Sind Sie sicher, dass sich in der Datei Inhalte befinden? –

+0

Es ist leer und das lag an einem anderen Problem in meiner Logik, aber ich denke, deine Antwort ist, was ich gesucht habe. Danke –

10

According to the documentation, können Sie auch globale Umgebungsvariablen gesetzt, wenn Sie später den Wert der Variablen in anderen Teilen des Skripts verwenden möchten.

pipeline { 
    ... 
    environment { 
    FILENAME = readFile ... 
    } 
    ... 
} 
+0

Dies ist die richtige Antwort – Liam

-2

Ein komplettes Beispiel für scripted pipepline:

 stage('Build'){ 
      withEnv(["GOPATH=/ws","PATH=/ws/bin:${env.PATH}"]) { 
       sh 'bash build.sh' 
      } 
     } 
+0

Diese Frage sagt nichts über das Ausführen eines Build-Skript oder das Hinzufügen zu PATH. – daemonaka

Verwandte Themen