ジョブ管理ツールについて調べていた時にJenkins以外にRundeckというものをみつけたので調べたり使ってみました。
Rundeckとは
ひと言で
使い勝手のよいOSSのジョブ管理ツール
もう少し詳しく
- ホームページ
https://www.rundeck.com/ - RundeckはOSS(Community版)として公開(Apache2.0 License)しています
- PagerDuty社が主なメンテナー?であり、Community版のほかにEnterprise版やCloud版と展開しています
プロダクトの種類について
以下のラインナップを展開しているようです。
- Rundeck(Community版, OSS)
- PagerDuty Process Automation On Prem Software(Enterprise版)
- PagerDuty Runbook Automation(Cloud版)
- PagerDuty Automation Actions(セルフヒーリング用のAdd-onらしい)
Community版とEnterprise版の違い
以下のページに比較内容があるのでこちらをみてください。
https://www.rundeck.com/community-vs-enterprise
ここでは個人的に気になった違いをいくつかピックアップします。
- RASIS観点
- HA構成が可能
- スケーラブルな構成が可能
- SSO
- 失敗したジョブの再開
- ユーザビリティ
- ワークフローの可視化
- システム設定をGUIで実施。HA構成サーバ間の同期
- 連携
- Webhook(CommunityではRundeck自身かログくらい。GitHubやSNSが無い)
RASIS観点について詳しく調べたわけではありませんが、そこそこシビアなジョブ連携が必要なプロジェクトでは初めからEnterprise版のほうがよさそうです。
ワークフローの可視化はCommunity版でもほしいです・・。図で見えてジャンプできるのはほしい。
サンプルイメージがあまりないのですがおそらく以下のイメージだと思います。
Jenkinsとの違い
Jenkinsは開発用でありRundeckは運用用というユースケースの違いがあるということ。
Jenkins vs Rundeckではなく、Jenkins and Rundeckの使い方を提案していてお互いに連携するためのPluginが存在している。
GitHubのRundeckリポジトリにあるFAQにそのような記載がある
https://github.com/rundeck/rundeck/wiki/FAQ#how-is-it-different-from-jenkins
とはいえ、具体例を出さないとわかりづらい。Jenkinsと比較した結果はいずれそのうちまた今度整理したい。
Rundeckの良いところ
- 操作がわかりやすい
- スケジュール設定が簡単、crontabライクに設定することも可能
- ジョブ定義の設定をテキスト(XML,YAML)で出力可能
- 追記1. ジョブ実行時に引数指定が可能かつ手順を書ける
Rundeckのインストール
環境
- VirtualBox
- Ubuntu20.04.4 Server
インストール手順
公式の手順 をみるのがベストですが、
お試しでやるので、手順のタブはCommunity
を選択してください。
何点か変更しているので以下に記載します。
# 初期状態のVMにインストールする場合は、事前に実施
sudo apt-get update
# 公式手順どおり、インストール
sudo apt-get install openjdk-11-jre-headless
curl https://raw.githubusercontent.com/rundeck/packaging/main/scripts/deb-setup.sh 2> /dev/null | sudo bash -s rundeck
curl -L https://packages.rundeck.com/pagerduty/rundeck/gpgkey | sudo apt-key add -
sudo apt-get update
sudo apt-get install rundeck
# serviceコマンドの代わりにsystemctlコマンドで起動、VM起動時に自動起動するように設定
sudo systemctl start rundeckd
sudo systemctl enable rundeckd
# 公式手順通り、起動確認
# 以下が出力されていること
# Grails application running at http://localhost:4440 in environment: production
tail -f /var/log/rundeck/service.log
- 手順を実行すると以下がインストールされる
- openjdk-11-jre-headless
- Rundeck 4.4.0.20220714
Rundeckを使ってみる
ログイン
- 手順通り、
http://localhost:4440
に、admin/adminでログインする- Ubuntu Serverを使用しているので、ポートフォワードして自端末のChromeでログイン
- ポートフォワード設定は、localも4440にしてください
- リダイレクト時に4440ポートをRundeckが指定するため別のポート番号だとログインできません
操作をお試し
- プロジェクトを作成する
- ジョブを作成する
- ジョブを作成するには、Workflowが1つ以上必要。ということでステップを追加
Command
を選択して、テキトウに入力する
- テキトウに2つステップを作成する
- 今すぐジョブを実行
- 実行結果
- ログ出力をクリックするとログが表示される
スケジュールを設定してみる
ジョブなどはコード管理できる
- XMLかYAML形式で出力できるため、Gitなどでコード管理が可能です
- YAMLの例
- defaultTab: nodes description: |- job description ## ジョブ1 ### ジョブの説明 - あああ - いいい - ううう executionEnabled: true id: f909cbc1-445a-441b-aa11-37bd4001e35e loglevel: INFO name: job1 nodeFilterEditable: false plugins: ExecutionLifecycle: null schedule: dayofmonth: day: '*' month: '*' time: hour: '*' minute: '*' seconds: '*/1' year: '*' scheduleEnabled: false sequence: commands: - description: step-label1 exec: echo this is a test.; uname -a - description: step-label2 exec: date keepgoing: false strategy: node-first timeZone: JST uuid: f909cbc1-445a-441b-aa11-37bd4001e35e
- YAMLの例
追記1. ジョブ実行時に引数指定が可能かつ手順を書ける
引数が指定できるのはJenkinsでも同じですが、Rundeckでは条件を指定したり手順のように書くこともできる
追記2. ユーザーの追加
Rundeckを利用するユーザーを追加します。デフォルトではadminしかありません
Enterprise版では、GUIで追加設定が可能です(マニュアル該当ページ)
Community版では以下の手順でユーザーを追加します
- パスワードのハッシュ値を生成する(任意)
- realm.propertiesにユーザー・パスワードを追記する
- Rundeckを再起動することで変更が反映されます
ユーザー追加手順
-
パスワードのハッシュ値を生成する(任意)
sudo java -jar /var/lib/rundeck/bootstrap/rundeck-4.4.0-20220714.war --encryptpwd Jetty
- 対話形式でユーザー名とパスワードを入力します
- 出力されたbcryptの値を使用します
- 実行例
sudo java -jar /var/lib/rundeck/bootstrap/rundeck-4.4.0-20220714.war --encryptpwd Jetty Required values are marked with: * Username (Optional, but necessary for Crypt encoding): aki-nasu-admin *Value To Encrypt (The text you want to encrypt): aki-nasu ==ENCRYPTED OUTPUT== bcrypt: BCRYPT:aaabbbccc.aaabbbccc.aaabbbccc. obfuscate: OBF:aaabbbccc md5: MD5:aaabbbccc crypt: CRYPT:aaabbbccc
- 同じことがGUIでも可能です。右上のギアアイコンから
Password Utility
を選択して出てくる以下の画面を使います
-
/etc/rundeck/realm.properties
にユーザー・パスワードを追記する- admin自身も早めに変更しておいたほうがよいでしょう
- 追記例(admin行はデフォルトで存在する)
admin:admin,user,admin,architect,deploy,build aki-nasu-admin:BCRYPT:aaabbbccc.aaabbbccc.aaabbbccc.
-
参考ページ
-
Rundeckを再起動することで変更が反映されます
sudo systemctl reload rundeckd
ホットリロード設定をおこなう
デフォルトではユーザー追加後にRundeckの再起動が必要なため、ホットリロード設定をおこないます
# バックアップを取っておく
sudo cp -p /etc/rundeck/jaas-loginmodule.conf /etc/rundeck/jaas-loginmodule.conf.original
# 修正する
sudo vi /etc/rundeck/jaas-loginmodule.conf
# 修正箇所は以下の通り
sudo diff /etc/rundeck/jaas-loginmodule.conf /etc/rundeck/jaas-loginmodule.conf.original
2c2
< org.rundeck.jaas.jetty.ReloadablePropertyFileLoginModule required
---
> org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
実際に追加できたことは、右上のギアアイコンからUser Summary
画面を表示することで確認できます
さいごに
導入の手軽さはcrontabには敵わないが、比較的簡単にできた
実践的な使い方ができたら、つづく。