背景
Rundeckを使う機会というか調べる機会があったので記事としてまとめる。Jenkinsのジョブ機能の対抗馬として前に調べたことある程度でがっつり使ったことはない。
OSSのジョブスケジューラなのでGitHubでソースが読める。現在もめちゃめちゃ草が生えてて開発は活発な印象。最新版は6日前にリリースされていたりする。(3.4.1-20210715になっているがバージョニングに日付が入るのか)
一応無償版と有償版というのがあって今回対象にしてるのは無償版の話です。有償のエンタープライズ版の「Rundeck Enterprise」ではサポート体制に加えてパラレル実行とかリアルタイム可視化やユーザーインターフェイスの改良など機能面でも差があるらしいです。
最新は3系っぽいので3系だけとりあえずみていく。
Rundeckとは
Webアプリ上で操作できるJava製のスケジューラ。
特徴としては以下。いろいろなブログ見た感じの羅列だけど他にもたくさん機能はあるっぽい。エージェントレスSSH接続できればジョブを実行できるのも特徴の一つ。
* 処理の実行ログが保存されリアルタイムで閲覧できる * 処理の実行履歴を閲覧できる * 直近の実行予定時刻がわかる * 処理の再実行 * 処理の開始・終了に対して通知設定できる
ジョブAが正常に終わらないとジョブBを実行したくないと言った所謂、依存関係を設定できたりとジョブスケジューラとしての機能は思いつく限りは実装されていそうでした。cronと全く同じ記述が可能だったりと学習コストが低そうという印象も持ちました。
www.slideshare.net
Jenkinsとの比較
Jenkinsは4年くらい利用経験があるがRundeckは数十分触った程度での比較です。
Jenkinsは継続的インテグレーションツールであって、ジョブ管理ツールではないと言った意見はちらほら見られるがJenkins自体をリッチなcronくらいで長く使っていたためその手の視点で何か見えることはなかった。依存関係を書けたりシェルスクリプトで書けば複数サーバで実行を制御したりすることもできた。ただシェルスクリプトで若干メンテナンスがしづらい点もあった。その辺はうまくRundeckが吸収して
- どのサーバで動いているか
- 同一時刻にどんな処理が動いてるか
- どのジョブとどのジョブが関連しているか
あたりは綺麗に書けそうかなと言った印象を持った。(実際やったことないからあくまでも感想)。あとはJenkinsだとpluginとか管理が大変な印象もあったりしたがRundeckはデフォルトで結構機能があってメンテ自体は楽そうな感じもしました。
使ってみる
$ docker run -p 4440:4440 -e SERVER_URL=http://localhost:4440 --name rundeck -t jordan/rundeck:latest
とかやってlocalhost:4440に繋げば使える。第一印象としてはすごい直感的でわかりやすいと言った感じ。
strategyとか
ワークフローの実行は、ステップの失敗の処理をstragegyとかで処理することができる。ジョブが失敗した場合に何かしらの処理を入れるだったり先へ進めて復旧処理を書くなりとと言ったことができる。