12

私は、テキストファイルを読み込み、結果を文字列変数として保存して、後のステップでアクセスするためのマルチブランチプロジェクト用の宣言型パイプラインスクリプトを用意しています。パイプライン。 filenameは私の文字列になるためにJenkinsfileで変数を設定および参照する方法

filename = readFile 'output.txt' 

:私はこのような何かをしようとしたスニペットジェネレータを使用します。

私はジェンキンスのコンソール出力でエラーが発生します。

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

私はジェンキンス環境変数にreadFileの出力を設定するためのwithEnvステップを使用する必要がありますか?もしそうなら、どうですか?

おかげ

+0

を使用すると、[MCVE](HTTPによるあなたの質問を編集することができますガイドですか? –

答えて

13

エラーは、あなただけstepsディレクティブ内のパイプラインステップを使用することを許可していることにあります。私が知っている回避策の1つは、scriptのステップを使用し、その内部に任意のパイプラインスクリプトをラップし、その結果を環境変数に保存して後で使用できるようにすることです。だからあなたの場合

:後でスクリプトの他の部分で変数の値を使用したい場合は

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

これを試してもエコーに何も表示されない –

+0

これを実行すると(Jenkins 2.32.2)、期待通りの結果が得られました( 'writeFile file: 'output.txt'、text:' asdsad ' readFile'、期待通りに '[パイプライン] echo asdsad'を取得します)。ファイルに内容がありますか? –

+0

ああ、それは空白で、それは私の論理のなかの他の問題のためでしたが、あなたの答えは私が探していたものだと思います。ありがとう –

10

According to the documentationは、あなたはまた、地球環境変数を設定することができます。あなたのケースでは、ルートのパイプラインでそれを設定することになります。

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

これは正解です – Liam

-2

スクリプトpipeplineのための完全な例://:

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

この質問は、ビルドスクリプトの実行やPATHへの追加については何も言いません。 – daemonaka

関連する問題