bash スクリプトで動作する grep コマンドがあります。
if grep 'stackoverflow' outFile.txt; then
exit 1
fi
私のホストで実行すると、これは正常に機能します。ただし、Jenkins ビルド ステップからこれを呼び出すと、毎回 0 で終了し、「stackoverflow」が表示されません。何がうまくいかないのですか?
「シェルの実行」コマンドの最初の行として次の行を追加します
#!/bin/sh
一致するものが見つからない場合、grep コマンドはゼロ以外のコードで終了し、jenkins はジョブを失敗としてマークします。下記参照。
「シェルの実行」のヘルプセクションで
プロジェクトをビルドするためのシェル スクリプト (デフォルトは sh ですが、これは構成可能です) を実行します。スクリプトは、ワークスペースを現在のディレクトリとして実行されます。シェル スクリプトの内容を入力します。シェル スクリプトに #!/bin/sh のようなヘッダー行がない場合、システム全体で構成されたシェルが使用されますが、ヘッダー行を使用して別の言語 (#!/bin/perl など) でスクリプトを記述することもできます。 ) またはシェルが使用するオプションを制御します。
デフォルトでは、シェルは「-ex」オプションで呼び出されます。したがって、すべてのコマンドは実行前に出力され、コマンドのいずれかがゼロ以外の終了コードで終了した場合、ビルドは失敗と見なされます。再度 #!/bin/... 行を追加して、この動作を変更します。
ベスト プラクティスとして、ここに長いシェル スクリプトを入れないようにしてください。代わりに、SCM にシェル スクリプトを追加し、そのシェル スクリプトを Jenkins から (bash -ex myscript.sh などを介して) 呼び出すことを検討してください。そうすれば、シェル スクリプトの変更を追跡できます。
2つがまったく同じであれば、うまくいくはずです。現在のディレクトリまたはユーザーは 2 つの環境で異なりますか? ファイルを読み取れない可能性があります。