0

すべてのジェンキンス ジョブが実行するメイン ビルド スクリプトがあります。このメイン スクリプトは、(Jenkins から) ジョブ名を取得し、そのジョブ名に関連するスクリプトを実行します。現在、関連するスクリプトを呼び出すために subprocess.check_output を使用しています。これの代わりに、スクリプトをインポートしてから内部の関数を呼び出すだけでよいと考えていました。私は次のようにインポートします:

sys.path.insert(0,os.path.abspath(importLocation))
print("path", sys.path, os.path.abspath(importLocation))
import build

最後に挿入するために insert(-1,...) も試しました。これを使用する方法は、このスクリプトで関数を実行する前に、メイン スクリプトにいくつかの print ステートメントがあることです。

print("Starting script...")
build.run()

これは、実行する前に「スクリプトを開始しています」と表示されるため、コンソールで正常に機能します。残念ながら、Jenkins では、メイン スクリプトから何かを表示する前に、常に build.run() の出力がコンソールに表示されます。build.run() を一番下の if ステートメントなどに入れてみました。

Jenkinsで正しい順序で実行/表示する方法についてのアイデアはありますか?

4

1 に答える 1

0

子プロセスは終了時に出力バッファーをフラッシュしますが、親からの出力はまだ親のバッファーにあります。解決策は、子を実行する前に親バッファーをフラッシュすることです。

print("Starting script...")
sys.stdout.flush()
build.run()
于 2013-07-09T15:23:27.183 に答える