2017-03-01 113 views
2

Jenkinsfileでif文を使用してマルチブランチパイプラインプロジェクトを使用しようとしています。この質問のために、現在のディレクトリに 'scan.txt'というテキストファイルがあると仮定します。テキストファイルは、bashコマンドで生成されJenkinsfileでJenkins環境変数を使用する方法ステートメント

echo "False" > scan.txt 

だから、唯一のコンテンツは

が、私はそうのようなscan.txtの内容に私のJenkinsfileに任意の環境変数を設定する「偽」の文字列は次のとおりです。

script { 
    env.TEXT = readFile 'scan.txt' 
} 

私はスクリプトブロックの外

echo "${env.TEXT}" 

を行う場合は、jenkそのステップでは、期待通りにFalseが表示されます。

しかし、 "False"に等しいかどうかを確認する私の試みはすべて失敗しました。スクリプトブロックの直後に次のように試しました。

if (env.TEXT.equals("False")) { 
    //do something 
} 

if (env.TEXT.matches("False")) { 
    //do something 
} 


if (env.TEXT == "False") { 
    //do something 
} 

これらのどれも動作しません。これらの条件はすべて真偽値です。読み込みファイルのパイプラインステップのドキュメントでは、ファイル内容の文字列を返します。 https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-readfile-code-read-file-from-workspace ここでは何が起こっているのか分かりません。誰にも洞察力はありますか?

おかげ

答えて

10

echo "False" > scan.txtエコーでファイルの最後に改行が残っている場合、パイプラインスクリプトにenv.TEXTをエコーし​​た場合、これを行うことができます。

だから、String.trim()を使用してそれがFalseに等しいかどうかをチェックする前にトリミングすると、最初と最後のすべての空白が削除されます。さらに、文字列が含まれているかどうかをテストする最良の方法は、Boolean.parseBoolean()を使用することです。すべての作業が面倒です。

node { 
    sh 'echo "False" > output.txt' 
    def val = readFile 'output.txt' 
    echo "${val}" 
    echo "${val.trim()}" 
    if (val.equals("False")) { // This will print No 
     echo "Yes" 
    } else { 
     echo "No" 
    } 
    if (val.trim().equals("False")) { // This will print Yes 
     echo "Yes" 
    } else { 
     echo "No" 
    } 
    if (!Boolean.parseBoolean(val)) { // This will print Yes 
     echo "Yes" 
    } else { 
     echo "No" 
    } 
} 

そして出力に、我々が得る:

Started by user jon 
[Pipeline] node 
Running on master in /var/lib/jenkins/workspace/pl 
[Pipeline] { 
[Pipeline] sh 
[pl] Running shell script 
+ echo False 
[Pipeline] readFile 
[Pipeline] echo 
False 

[Pipeline] echo 
False 
[Pipeline] echo 
No 
[Pipeline] echo 
Yes 
[Pipeline] echo 
Yes 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

我々は最初のエコーのステップを実行するときに、それ自体、私たちは余分な改行を持つことができたよう

だが、これを試してみましょう。また、Boolean.parseBoolean()はトリミングなしで文字列を処理することにも注意してください。

-2

だから、私は条件

env.TEXT.contains("False") 

を使用する場合、それが動作判明! readFileには文字列に "False"以上の文字が含まれている必要があります。

+2

これはハックですが、実際の解決策はJon S. – Pom12

関連する問題