6

bash スクリプトで動作する grep コマンドがあります。

if grep 'stackoverflow' outFile.txt; then
 exit 1
fi

私のホストで実行すると、これは正常に機能します。ただし、Jenkins ビルド ステップからこれを呼び出すと、毎回 0 で終了し、「stackoverflow」が表示されません。何がうまくいかないのですか?

4

4 に答える 4

5

「シェルの実行」コマンドの最初の行として次の行を追加します

#!/bin/sh

一致するものが見つからない場合、grep コマンドはゼロ以外のコードで終了し、jenkins はジョブを失敗としてマークします。下記参照。

「シェルの実行」のヘルプセクションで

プロジェクトをビルドするためのシェル スクリプト (デフォルトは sh ですが、これは構成可能です) を実行します。スクリプトは、ワークスペースを現在のディレクトリとして実行されます。シェル スクリプトの内容を入力します。シェル スクリプトに #!/bin/sh のようなヘッダー行がない場合、システム全体で構成されたシェルが使用されますが、ヘッダー行を使用して別の言語 (#!/bin/perl など) でスクリプトを記述することもできます。 ) またはシェルが使用するオプションを制御します。

デフォルトでは、シェルは「-ex」オプションで呼び出されます。したがって、すべてのコマンドは実行前に出力され、コマンドのいずれかがゼロ以外の終了コードで終了した場合、ビルドは失敗と見なされます。再度 #!/bin/... 行を追加して、この動作を変更します。

ベスト プラクティスとして、ここに長いシェル スクリプトを入れないようにしてください。代わりに、SCM にシェル スクリプトを追加し、そのシェル スクリプトを Jenkins から (bash -ex myscript.sh などを介して) 呼び出すことを検討してください。そうすれば、シェル スクリプトの変更を追跡できます。

于 2013-06-29T16:02:11.270 に答える
0

2つがまったく同じであれば、うまくいくはずです。現在のディレクトリまたはユーザーは 2 つの環境で異なりますか? ファイルを読み取れない可能性があります。

于 2013-06-04T03:47:48.917 に答える