CI/継続的テスト システムの一部は、ビルド/テスト ノードを再デプロイする必要があります。これまでのところ、私はそれらをオフラインにマークしてから、ビルドに通常かかる時間の 2 倍の時間を待っています...
これはあまりエレガントではありません。
(オフラインとしてマークした後) ノードが現在のジョブを完了するのを待つにはどうすればよいですか?
CI/継続的テスト システムの一部は、ビルド/テスト ノードを再デプロイする必要があります。これまでのところ、私はそれらをオフラインにマークしてから、ビルドに通常かかる時間の 2 倍の時間を待っています...
これはあまりエレガントではありません。
(オフラインとしてマークした後) ノードが現在のジョブを完了するのを待つにはどうすればよいですか?
Hudson Remote access APIを介して、ジョブが現在構築されているかどうかにアクセスできます(にアクセスしてドキュメントも参照してくださいhttp://your-hudson-url/api
)。好みに応じて、APIはXML、JSON、またはPythonで読み取り可能な形式を返すことができます。
具体的には、ジョブのAPIを確認する必要があります。APIで利用できるものを確認する最良の方法は、サーバーを調べることですhttp://your-hudson-url/job/<job name>/api/xml
。各ジョブには、ハドソンが追跡しているビルド(および結果)のリストがあります。ビルドが進行中の場合、build/building要素には。が含まれますtrue
。
これが私のテストビルドからのXML出力の例です。url http://localhost:8080/job/Plotting build/api/xml?depth=1
(デフォルトよりも詳細を提供するために1に設定されているdepthパラメーターに注意してください):
<freeStyleProject>
<action/>
<description>An example of the plot plugin</description>
<displayName>Plotting build</displayName>
<name>Plotting build</name>
<url>http://localhost:8080/job/Plotting%20build/</url>
<buildable>true</buildable>
<build>
<action>
<cause>
<shortDescription>Started by user test</shortDescription>
<userName>test</userName>
</cause>
</action>
<building>false</building>
<duration>30291</duration>
<fullDisplayName>Plotting build #14</fullDisplayName>
<id>2010-10-29_16-14-02</id>
<keepLog>false</keepLog>
<number>14</number>
<result>SUCCESS</result>
<timestamp>1288394042180</timestamp>
<url>http://localhost:8080/job/Plotting%20build/14/</url>
<builtOn/>
<changeSet/>
</build>
<build>
...
ノードをオフラインにすることに影響があるかどうかはわかりません。Hudsonがビルドが進行中であることを知っている限り、APIは正しい情報を返し、定期的にポーリングして最新のビルドが終了したかどうかを確認できると思います。
更新:または、APIを使用してノードにクエリを実行し、ノードがアイドル状態であるかどうかを確認できます。ただし、私が知る限り、Hudson APIは、ノードクエリ出力で実行されているジョブを表示しません。
からの出力例http://localhost:8080/computer/(master)/api/xml?depth=1
<masterComputer>
<displayName>master</displayName>
<executor>
<idle>true</idle>
<likelyStuck>false</likelyStuck>
<number>0</number>
<progress>-1</progress>
</executor>
...
<idle>true</idle>
...
コンピューター/アイドル要素は、false
ジョブが実行されているかどうかです。この記事の執筆時点では、ジョブの実行中に要求すると無効な応答を引き起こすハドソンのバグがあります(ただし、デフォルトの深さはノードがアイドル状態であるかどうかを示します)。depth=1
ノードAPIを使用すると、デプロイメントスクリプトの一部としてノードをオフラインにする(そしてオンラインに戻す)ことができる場合があります。
スクリプトがマシンに対してローカルである場合は、帯域幅効率が低く、処理効率が高い方法を使用することをお勧めします。
例として @Dave_Bacher を使用すると、次のような URL を実行して API の JSON バージョンと対話します。
http://localhost:8080/job/Plotting build/api/json?depth=1&tree=builds[building,number]
あとは、JSON をすばやく実行し、ビルドを見つけて、それが building=false または true かどうかを判断するだけです。
これにより、スクリプトの実行時間が 10.5 秒から 1 秒未満に短縮されました。