LoginSignup
14
18

More than 5 years have passed since last update.

Jenkinsでジョブを予約実行する

Posted at

Jenkinsでジョブを遅れて実行させる - Qiita
の応用でジョブを予約実行できそうだったのでやってみたら出来る感じだったのでメモしておく。

実行手順

以下のようなスクリプトで実行する(ビルドパラメータありの場合の例)。
Rubyを使っているが実行させたい時刻と現在時刻の差分(秒数)が計算できてJenkinsのジョブをリモート実行できれば何でも良い。

  • Gemfile
# A sample Gemfile                                                                                  
source "https://rubygems.org"

gem 'rest-client'
gem 'http_proxy_from_env' # http proxy環境下でないなら不要
  • スクリプト本体
require 'http_proxy_from_env'  # http proxy環境下でないなら不要
require 'rest-client'
require 'time'

target = Time.parse("2014/11/16 12:00") # 実行させたい時刻
# to_iしてるので小数点以下切り捨てで最大1秒ほど誤差が出ると思われる。
sec = (target - Time.now).to_i # 実行させたい時刻と現在時刻の差分計算(秒数)

# JenkinsのリモートAPIでジョブ実行
RestClinet.get("[Jenkins URL]/job/[Job Name]/buildWithParameters?delay=#{sec}sec&[Parameters]")

ジョブのビルドパラメータありなしの挙動の違い

実際に確認した範囲なので間違ってる可能性あり。
とにかくジョブを予約実行するときは不要でもビルドパラメータ付けた方が良さそう。

ちなみに設定の「ビルドを並行実行」は挙動に影響しないようである。

ジョブのビルドパラメータあり

  • ジョブにビルドパラメータが設定できるようになっていくと実行した結果はどんどんキューにためられていく。
  • ただし、同じ実行予定時刻で同じパラメータの場合はキューは追加されない。
  • キューがたまっている状態でブラウザから直接ジョブを実行してもキューは残る。

ジョブのビルドパラメータなし

  • ジョブにビルドパラメータがない場合はいくらリクエストしても1つのキューしかたまらない。
  • キューがある状態でさらに後のジョブを予約するとキューが後の時刻で実行するように更新される。
  • ブラウザから直接ビルドするとたまっていたキューは無くなる。

精度

確認した範囲だと予約したジョブの実行は数秒早かったり遅かったりすることがある(確認した中では3秒遅い場合があった)。
実行回数が少ないので実際にどの程度ズレるのか正確なところはわからないが、指定したちょうどその時に実行されることは期待しない方が良さそう。

14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18