まず、この興味深い課題への背景。継続的な統合構築では、デッドロックやループなどの開発やテスト中にテストに失敗することがあります。したがって、ビルドが失敗したことを通知するためのすべてのメカニズムは役に立たなくなります。LinuxのコマンドのI/Oでの単純なタイムアウト
ビルドログファイルへの出力が5分以上続く場合、ビルドスクリプトのタイムアウトが発生するのは、ビルドが進行するにつれてユニットテストの名前を日常的に書き出すからです。だからそれが「凍っている」ことを確認する最善の方法です。
大丈夫です。
ビルドサーバーはHudsonを使用して、NantとMSBuild(Windows上のすべて)に基づいてより複雑なビルドスクリプトを呼び出す単純なbashスクリプトを実行します。
これまでのところ、ネット上のすべてのソリューションには、コマンドの実行時間の合計にタイムアウトが含まれていました。しかし、最初の5分間でテストがハングアップまたはフリーズする可能性があるため、このソリューションは失敗します。我々はこれまで考えられてきたもの
:
まず、ここではハイレベルのbashコマンドは、ハドソンの完全なテストスイートを実行します。
build.sh clean free test
このコマンドは、すべてのNantおよびMSBuildビルドログをstdoutに送信するだけです。
それは我々がファイルにその出力をティーする必要があることは明らかです:
build.sh clean free test 2>&1 | tee build.out
続いて並列にコマンドが5分以上はメインプロセスを殺す場合は、寝るファイルの修正時刻を確認し、必要があります。その時点ではkill -9
は問題ありません。
これはあなたが手助けできる部分です。
実際、私は15年以上前にデータ電話回線を使って日本に接続していたが、何もしなかったことを覚えていない。
敬具
、 ウェイン
を殺す -
はまた、全体のプログラムグループを殺すために方法を考え出すことは、単に いくつかの研究でしたが、簡単であることが判明します*、出力に関係なく5分の壁時計時間後ではありません。 (そうでなければ、質問はhttps://stackoverflow.com/questions/5161193/how-to-kill-a-child-process-after-a-given-timeout-in-bashの複製となります) –