1

それぞれ別のマシンで実行する必要があるスクリプトがたくさんあります。これを行うためにJenkinsを使用しようとしています。単一のテストを実行し、時間制限とテスト結果の収集を処理できる Python スクリプトと、この Python スクリプトを異なる引数で実行するいくつかの Jenkins ジョブがあります。コマンド ラインからこのスクリプトを実行すると、問題なく動作します。しかし、Jenkins 経由で (まったく同じ引数を使用して) スクリプトを実行すると、テストがタイムアウトします。スクリプトはテストの強制終了を処理するため、制御はずっと Jenkins に戻され、すべてがクリーンアップされます。どうすればこれをデバッグできますか? Python スクリプトは、subprocess.popen を使用してテストを開始します。

補足として、Jenkins と Python スクリプトの有無にかかわらず、これをより適切に行う方法についての提案をお待ちしています。さまざまなマシンで一連のスクリプトを実行し、その出力を収集するだけです。

4

2 に答える 2

1

これをデバッグするには:

  • set -xシェル スクリプトの先頭に追加します。
  • 呼び出されたときに各行の行番号を出力する PS4 を設定します。PS4='+ $BASH_SOURCE:$FUNCNAME:$LINENO:'
  • Hudson の実行時に設定されていない環境変数をスクリプトが想定している場所を特に探してください。

Python スクリプトが stderr (ログの送信先set -x) をリダイレクトし、それを Hudson に渡さない (したがってログに記録しない) 場合は、スクリプト内からファイルにリダイレクトできます。exec 2>>logfile

ちなみに、多数のマシンでジョブを開始するためのツールは、Jenkins 以外にも多数あります。MCollective (すでに Puppet を使用している場合はうまく機能します)、knife ssh (Chef を使用している場合は既に持っているでしょう。私のあまり謙虚な意見では、そうすべきです!)、Rundeck (おしゃれな Web を持っている) UI (ただし、このセキュリティ バグが修正されるまでは使用しないでください)、Fabric (mcollective または knife をまだ持っていない場合は非常に良い選択です)、その他多数。

于 2013-03-28T23:06:16.600 に答える