0

jetbrainsツールteamcity用のプラグインを作成しました。トリガーされたビルドをリッスンし、トリガーされたもの、そこでの変更の数など、さまざまなビルドに関する情報を含むテキストファイルを出力するのは、ほとんどサーバーリスナーです。終了後、入力可能なPythonスクリプトを作成しました。サーバーの実行中にチームシティに情報を入力し、ビルドを開始します。ビルドの実行後にそのビルドのアーティファクトを取得できるようにしたいのですが、問題は、各ビルドの実行にかかる時間がわからないことです。30秒の場合もあれば30分の場合もあります。

だから私はPythonでこの行を使ってビルドを開始しています。

    urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')

ビルドの実行後(不定の時間)、この行を使用してテキストファイルを取得したいと思います。

urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')

繰り返しますが、問題は、2行目を実行する前にどれくらい待つかわからないことです。通常、Javaでは、特定の時間スリープし、ビルドが完了するのを待つ、ある種の2番目のスレッドを実行します。Pythonでこれを行う方法がわかりません。したがって、Pythonでこれを行う方法、またはこれを行うためのより良い方法のいずれかについて誰かが考えている場合は、それをいただければ幸いです。自分自身をもっとよく説明する必要がある場合は、私に知らせてください。

許す-

4

2 に答える 2

2

ビルドサーバーから連絡を受けて通知を受け取らない限りそれを行う唯一の方法はポーリングすることです。他のコメントに示されているようにスレッドを生成するか、メインスクリプトをスリープ状態にしてポーリングするだけです。

何かのようなもの:

wait=True
while wait:
   url=urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')
   if url.getcode()!=404:
     wait=False
   else:
     time.sleep(60)

別の方法として、 CherryPyを使用することもできます。次に、ビルドが完了したら、curlまたはwgetをリスニングしているCherryPyサーバーに接続し、アプリをトリガーしてURLをダウンロードすることができます。

xmlrpclibを使用して同様のことを行うこともできます。

于 2009-08-20T17:47:37.297 に答える
0

Pythonには実際にはJavaにかなり似たスレッドシステムがあるので、それほど問題なく使用できるはずです。

ただし、事前に決められた時間待つだけの場合は、

import time
time.sleep(300) # sleep for 300 seconds
于 2009-08-20T17:06:40.360 に答える