2009-09-03 1 views
31

私はビルドプロセスを自動化するためのbashスクリプトを書いています。 2つの主要ビルドブロックがあります.1つはantタスクで、もう1つは普通の古い "mvnクリーンインストール"です。この2つのビルドプロセスのいずれかからビルドエラーが発生したときに何かしたい。bashスクリプトを使ってant/mavenからビルドエラーを検出する方法は?

と問題があり、これらは随時テストの失敗やエラーが含まれていますビルドしますが、最終的な結果は成功です。私は、これらのプロセスによって返される状態コード($?)は、ビルドの失敗または成功に関係なく0でなければならないと信じています。私は間違っている可能性があります。

ので、私のスクリプトは、彼らから半ばビルド(テスト・エラーなど)の際に虚偽の情報をキャッチすることなく、(成功/失敗ビルド)最終結果を検出するための最良の方法は何ですか? Ant manualによると

+2

ツールは、適切な終了ステータスを返します。 – derobert

+0

私は実際にant/mavenの終了ステータスが何であるか分かりません。ビルドに失敗しても0を返すと仮定します。ビルドが失敗したときにゼロ以外の値を返すと言っていますか?それは私の人生をはるかに簡単にします。 – fei

+0

あなたのテストが時には合格しないことがあります。どちらの方法も気にしない場合、ビルドの一環として実行するのはどうしてでしょうか? –

答えて

4

アリは、Javaプログラムのリターンコードを返す(そのWindowsとUnix版で)スクリプトを起動します。したがって、成功したビルドは0を返し、失敗したビルドは他の値を返します。

Mavenはまた、エラーの非ゼロの終了コードを返します。 Maven Invocation APIを使用してこのステータスを調べる方法を示すa linkです。

だから、あなたが明示的にスクリプト でリターンコードを処理できる必要がありますように私には思えます。恐らくそれらがあなたにとって懸念されていなければ、テストなどに関するエラーコードを無視することができます。アリに

execエラーコードは、システム固有の動作しています。これらはあなたを助けるかもしれない:

3

は正確に私はあなたが望む結果を得るために行うものです。

<exec executable="${env.M2_HOME}/bin/mvn" dir="${basedir}" 
      failonerror="true" osfamily="unix"> 
     <arg value="-DskipTests=${argSkipTests}"/> 
     <arg value="-Doffline=${argOffline}"/> 
     <arg line="${projectsLine}"/> 
     <arg line="${resumeFromLine}"/> 
     <arg line="${alsoMakeLine}"/> 
     <arg line="${alsoMakeDependentsLine}"/> 
     <arg line="${commandsLine}"/> 
    </exec> 
11

Maven 2に対して誤った戻りコードを返す問題がいくつかあります(常に0が返されます)。特にMaven 2.0.9で修正されたMNG-3651が修正されました。

以降のMaven 2.0.9から
exit /B %ERROR_CODE% 

、最後の行は、これに変更されました:

cmd /C exit /B %ERROR_CODE% 

だから、非0

は、古いバージョンでは、mvn.batは、この行で終了しましたビルドに失敗した場合は、戻りコードが返されます。 build ERRORの場合、戻りコードは1です。2.0.9以降にアップグレードできない場合は、上記のようにmvn.batを修正して正しいコードを返すことを検討することができます。

36
mvn clean test 
rc=$? 
if [[ $rc -ne 0 ]] ; then 
    echo 'could not perform tests'; exit $rc 
fi 
+4

あなたはこの答えに詳しいことができればもっと良いでしょう。どのように、そしてなぜこれが他の答えよりも問題に答えるのでしょうか? – nietonfir

+1

私はこの答えが一番好きです。私はbashスクリプトでmvnからエラーコードを処理する方法を尋ねました。そして、Renaudの答えは法案に完全に合っています。私はFeiがmvnがテスト失敗のためにゼロでないコードを返すことを発見した後、このようなテクニックを使用して終了した疑いがあります。 –

+0

ほぼ完璧ですが、実際にその文字列の比較をしたい場合は引用符を使用します(https://www.gnu.org/software/bash/manual/bashref.html /「==」で検索する) (引用符ではない)整数の比較演算子である "-ne"です。 – cslotty

関連する問題