Created
February 26, 2011 14:16
-
-
Save tyuki39/845232 to your computer and use it in GitHub Desktop.
Jenkinsで、指定ジョブがビルド中でない場合は即実行、指定ジョブがビルド中の場合は待って実行する例
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 1. depjobnameで指定したジョブよりも自分自身が先にキューに入った場合は、自分自身のビルドを即実行する。 | |
// 2. depjobnameで指定したジョブよりも自分自身が後にキューに入った場合は、depjobnameの終了を待つ。 | |
// 2-1. ポーリング方式で終了を待つ | |
// 2-2. 最大リトライ回数は retrycount で指定 | |
// 2-3. リトライ間隔は sleeptime で指定(単位はミリ秒) | |
// 3. depjobnameで指定したジョブが存在しなかった場合は、ビルドを失敗させるためにあえて例外が発生する | |
// ようにしています。 | |
// 4. 設定手順 | |
// 4-1. Groovy Pluginをインストールする | |
// 4-2. このスクリプトファイルをワークスペースに配置する | |
// 4-3. ジョブの[ビルド]セクションの[ビルド手順の追加]で、[Execute system Groovy script]を選択する | |
// 4-4. Groovy script fileを選択する。 | |
// 4-5. このスクリプトファイルの名称を入力欄に記述する(入力欄の値はワークスペースからの相対パス) | |
// | |
import hudson.model.Hudson | |
def depjobname = "TEST" | |
def retrycount = 10 | |
def sleeptime = 5000 | |
def depjob = hudson.model.Hudson.instance.getItem(depjobname) | |
assert depjob, "ERROR: The job $depjobname is not found." | |
if( depjob.isBuilding() ) { | |
def lastbuild = depjob.getLastBuild() | |
for(i in 1..retrycount) { | |
if( depjob.isBuilding() && lastbuild == depjob.getLastBuild() ) { | |
println "[Retry $i]: Waiting for the completion of the depending job $lastbuild ..." | |
sleep(sleeptime) | |
} | |
else { | |
println "The execution of the depending job $lastbuild has finished." | |
break | |
} | |
} | |
} | |
else { | |
println "The depending job $depjobname is not running." | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment