2012-07-13 20 views
10

ジェンキンスの使用はほとんど始まっていません。これは私が今までに持っていた最初の問題です。基本的に私のジェンキンズの仕事は、いくつかのテストでエラーが発生しても常に成功します。これは私がシェルの設定で実行しているものです:ユニットテストが失敗したときにジェンキンスが成功する(レール)

bundle install 
rake db:migrate:reset 
rake test:units 
rake spec:models 

事が失敗したタスクが最後のものであるとき、ジェンキンスさんが唯一の失敗を報告することです。たとえば、「rake test:units」を最後のタスクとすると、何か問題が生じた場合にエラーを通知します。この設定を使用すると、rspecテストのエラーレポートだけが表示されますが、単体テストのエラーレポートは表示されません。

rspecまたは単体テストを使用するだけでなく、私たちは現在rspecに移行していますが、この問題は依然として痛いです。

これはJenkinsmのログの一部です。ユニットテストの1つが失敗するのがわかりますが、ジェンキンはまだ成功しています。

314 tests, 1781 assertions, 1 failures, 0 errors, 0 skips 
rake aborted! 
Command failed with status (1): [/var/lib/jenkins/.rvm/rubies/ruby-1.9.3-p1...] 

Tasks: TOP => test:units 
(See full trace by running task with --trace) 
Lot of rspec tests here.... 
Finished in 3.84 seconds 
88 examples, 0 failures, 42 pending 
Pushing HEAD to branch master of origin repository 
Pushing HEAD to branch master at repo origin 
Finished: SUCCESS 

答えて

18

ジェンキンスは、入力したコマンドを一時ファイルに書き込んでから、/bin/sh -xeを使用してビルドステップボックスに入力してコマンドを実行します。

通常、コマンドは順番に実行され(印刷され)、コマンドが失敗したときにスクリプトは即座に終了します。つまり、ゼロ以外の終了コードで終了します。

これが起こっていない場合、唯一の理由は、この動作を無効にしたことが原因である可能性があります。これらの2つの文字を使用して、ビルドステップの最初の行を開始することでオーバーライドすることができます。#!

は、あなたのビルドステップは次のようになりますたとえば、:

#!/bin/bash 
bundle install 
rake db:migrate:reset 
rake test:units 
rake spec:models 

は、その後、それはジェンキンスさんは、一時ファイルにスクリプトを記述することを意味し、それが /bin/bashで実行されます。このように呼び出されると、bashはコマンドを1つずつ実行し、成功するかどうかは気にしません。 bashプロセスの終了コードは、スクリプト内の最後のコマンドの終了コードであり、スクリプト終了時にJenkinsに表示されます。

したがって、ビルドステップの最初の行に何を置くかに注意してください。シェルがどのように動作するのかわからない場合は、ハッシュ・バンを置かずにJenkinsにスクリプトの実行方法を決定させてください。

ビルドステップの実行方法をさらに制御する必要がある場合は、使用するシェルのマニュアルページを調べて、必要な動作をさせる方法を調べる必要があります。ジェンキンスはここではほとんど役割を果たしていない。あなたが望む方法で望むシェルを実行するだけです。これは、スクリプト内のコマンドのいずれかがエラーを返す場合に失敗するスクリプトを伝え

#!/bin/bash -e 

+1

あなたは真実です、私は最初の行に "#!/ bin/bash"を持っていました:) –

+1

'#!/ bin/bash -x'を追加すると、Jenkinsがコマンドを表示する部分を得ることができますスクリプト出力で実行されます。本当にJenkinsのデフォルトの '-xe'からあなたが望まない' -e'だけです – ZombieDev

5

それはrake test:unitsの結果が何であるかを知る方法がないので、ジェンキンスさんは、最後のコマンド実行の結果コードを確認することができます。

もっとも簡単なことは、これらのコマンドの各コマンドを、別々のjenkinsビルドステップとして持つことです。

+0

私はそれを知りませんでしたが、それが動作するようになりました、THX! –

+0

この回答は100%正しいですが、私は人々がジェンキンスのベストプラクティスであることを人々に別の構築ステップとして考えるようにすることは良い考えではないと思います。下の私の答えを見てください。 – sti

+0

ジョブの中断可能な部分ごとにサブステップを持つことは、各サブステップが独立して実行されることが明らかである限り、悪い考えではありません。もう1つのオプションは、ビルドの各サブステップの結果をチェックし、必要に応じてエラーで終了することです。 – Gonen

関連する問題