最近のジョブスケジューラは何がいいのか
仕事でJenkinsを使ってるのですが、Jenkinsをビルドツール以上に、「定期実行してくれるもの全て」を管理するジョブ管理ツールとして使うことに疑問を覚えたので、メモします。
Jenkinsは継続的インテグレーションツールであって、ジョブ管理ツールではないと思うのです。
巷の記事を見ると、大抵「Jenkinsはジョブ管理の代替になる」という論調ばかりなのですが、Jenkinsをジョブ管理ツールとして使うには、かなり無理があるのではないかと思います。
というのも、ジョブ管理ツールに求めるのは
- どのサーバで動いているか
- 同一時刻にどんな処理が動いてるか
- どのジョブとどのジョブが関連しているか
といった情報を設定でき、管理できることなのですが、1つ目はそもそもJenkins単体だとローカルでしか動かないので把握できない(sshなどでリモート実行は当然可能だが、それは処理を見ないと分からない)、2つ目は過去の実行履歴としては見られるが、定義としては俯瞰できない、3つ目はBuild Flow pluginやBuild Pipeline pluginとしては実現可能ですが、細かいところで微妙に使いづらいのです。(Build Flowは、ジョブ間の繋がりを1つの定義ビューからしか追えないことや、実行後でないとgraphとして見ることができない点。Build Pipelineは、同一ジョブを複数のpipelineで使いまわせない点や、ジョブの"合流"ができない点)
確かにcronよりは遥かにマシですが、ジョブ管理ツールとして比べるにはかなり無理があるような気がしてなりません。そもそもJenkinsは"Build"というように、ビルドに特化したツールだと思うので、上記のような機能が充実してなくても違和感はないのですが、むしろ世間の「Jenkinsはジョブ管理として使える」という風潮は本当にそうなのだろうか?と思ったりします…。
一応ジョブ管理のツールとしては以下のようなものがあるようなのですが、とはいえこのへんのツールが最近の勉強会で取りざたされることはないような気がします(知らないだけかもしれません)。
世の中の企業はどうやってジョブ管理してるんでしょうか?