Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Jenkinsで、指定ジョブがビルド中でない場合は即実行、指定ジョブがビルド中の場合は待って実行する例
//
// 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