基本知識
インストール方法とかは公式ドキュメントを参照してください。
起動・停止
$ sudo service rundeckd [start, stop, restart, condrestart, status]
ディレクトリ構成
ディレクトリの設定は/etc/rundeck/framework.propertiesで変更できる。
デフォルトでは以下のようになっている。
# ----------------------------------------------------------------
# Installation locations
# ----------------------------------------------------------------
rdeck.base=/var/lib/rundeck
framework.projects.dir=/var/lib/rundeck/projects
framework.etc.dir=/etc/rundeck
framework.var.dir=/var/lib/rundeck/var
framework.tmp.dir=/var/lib/rundeck/var/tmp
framework.logs.dir=/var/lib/rundeck/logs
framework.libext.dir=/var/lib/rundeck/libext
etc/
├ rundeck/
│ ├ framework.properties …Rundeckコアの設定を定義(URL、使用ポート、ディレクトリパスなど)
│ ├ rundeck-config.properties …Rundeck WebAppの設定を定義
│ ├ realm.properties …Rundeckログインユーザーを定義
│ └ {username}.aclpolicy …アクセス権限の設定を定義 Rundeckは/etc/rundeck配下の*.aclpolicyを全て読み込むので、設定したいユーザー名でファイルを作る
└ default/
└ rundeckd …起動オプションの設定 /etc/rundeck/profileをオーバーライドする
var/
└ lib
└ rundeck
├ data …Rundeckシステムデータ バックエンドをRDBに変更していれば空になる
├ projects …各プロジェクトの設定
└ var …varディレクトリ ここにkey storageを配置したりする
Projects
ジョブをまとめるプロジェクト。
Job
そのままだが、ジョブ。
1つのジョブに複数のStepを指定できる。
rd
RundeckのCLIコマンドツール。公式はこちら
java8が動く環境ならすぐに使える。
$ wget https://github.com/rundeck/rundeck-cli/releases/download/v1.3.1/rundeck-cli-1.3.1-all.jar
// Rundeck GUIのURL
$ export RD_URL=http://localhost:4440
// Rundeck GUIのログイン情報
$ export RD_USER=example
$ export RD_PASSWORD=example
$ java -jar rundeck-cli-x.y-all.jar
Plugin
Storage
rundeck-config.properties
ファイルで定義されるデータの保管先。
keyとprojectの2つについて定義できる。
- dbストレージを使用するには:
[prefix].1.type=db
[prefix].1.path=/
- fileストレージを使用するには:
[prefix].1.type=file
[prefix].1.path=/
[prefix].1.config.baseDir=${framework.var.dir}/storage
prefixは以下の通り。
- key storage
rundeck.storage.provider
- project storage
rundeck.config.storage.provider
ちなみにdbとfileの両方に保管することもできる。
rundeck.storage.provider.1.type=db
rundeck.storage.provider.1.path=/keys
rundeck.storage.provider.2.type=file
rundeck.storage.provider.2.path=/keys/local
rundeck.storage.provider.2.config.baseDir=/var/local/rundeck
Data
デフォルトではH2データベースをシステムバックエンドとして利用する。
物理パスは/var/lib/rundeck/data
。
Jobが増えていくとH2では力不足になるためMySQLやMariaDBをバックエンドに使用するのがおすすめ。
Tables(要所だけ)
- execution
- base_report
- ジョブ実行履歴
- storage
- Storage pluginの保管先(?)
- project
- プロジェクト
- workflow
- job
- workflow_step
- jobで実行するシェルコマンドが1レコードに入っている。
cd hoge
とか。
- jobで実行するシェルコマンドが1レコードに入っている。
- workflow_workflow_step
- workflow(ジョブ)とworkflow_step(実行コマンド)の関連テーブル
- 2系だとインデックスが張られていなく、CPU不可を高める原因になっていたらしい
- 3系ではデフォルトでインデックスが張られていた。
Docker
そんなRundeckだが、実は公式がDockerイメージを提供してくれている。
https://hub.docker.com/r/rundeck/rundeck/
結論からいうと業務で使うには厳しい完成度だが、一応検証したので記録として残しておく。
ディレクトリ構成
Linux版と大きく異るのがディレクトリ構成。
公式Rundeckイメージではrootユーザーが公開されていないので、足りない権限でうまくやりくりしなければいけない。
# ----------------------------------------------------------------
# Installation locations
# ----------------------------------------------------------------
rdeck.base=/home/rundeck
framework.projects.dir=/home/rundeck/projects
framework.etc.dir=/home/rundeck/etc
framework.var.dir=/home/rundeck/var
framework.tmp.dir=/home/rundeck/var/tmp
framework.logs.dir=/home/rundeck/var/logs
framework.libext.dir=/home/rundeck/libext
home/
└ rundeck/
├ etc …Rundeckコアの設定ファイルなど
├ server/config …Rundeck WebAppの設定ファイルなど rundeck-config.propertiesはこっちに移植されてる
└ var …var。ログが入ったりする
rd
公式イメージには入っていないので、別コンテナで動かすか、自分でImageを焼き直すしかない。
FROM rundeck/rundeck:SNAPSHOT
WORKDIR /home/rundeck
RUN wget https://github.com/rundeck/rundeck-cli/releases/download/v1.3.1/rundeck-cli-1.3.1-all.jar
compose
同一ホストでmysqlも動かすならこんな感じになる。
version: '3'
services:
rundeck:
image: rundeck:latest
links:
- mysql
environment:
# 公式が定義している環境変数 詳しくはdockerhubへ
# だいたいrundeck-config.propertiesに記載される
- RUNDECK_DATABASE_DRIVER=com.mysql.jdbc.Driver
- RUNDECK_DATABASE_USERNAME=rundeck
- RUNDECK_DATABASE_PASSWORD=rundeck
- RUNDECK_DATABASE_URL=jdbc:mysql://mysql/rundeck?autoReconnect=true&useSSL=false
- RUNDECK_GRAILS_URL=http://localhost:4440
- RUNDECK_STORAGE_PROVIDER_1_TYPE=file
- RUNDECK_MAIL_SMTP_HOST=x.x.x.x
- RUNDECK_MAIL_SMTP_PORT=25
- RUNDECK_MAIL_FROM=rundeck@example.com
# rd用の環境変数
- RD_URL=http://localhost:4440
- RD_USER=admin
- RD_PASSWORD=admin
volumes:
- ${RUNDECK_LICENSE_FILE:-/dev/null}:/home/rundeck/etc/rundeckpro-license.key
- ./backup/jobs:/backup/jobs
- ./backup/projects:/home/rundeck/projects
ports:
- 4440:4440
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=rundeck
- MYSQL_USER=rundeck
- MYSQL_PASSWORD=rundeck
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
環境変数はdockerhubで公開されているが、明らかに足りない。(例えばカスタムメールテンプレートなど)
自分でrundeck-config.propertiesをマウントする方法も試したが、どうやらコンテナ作成時に環境変数を元にファイルを作り直してしまう模様。
そうなると起動後にsedで書き加えるくらいしか思いつかなかったので、結局Docker版を本番運用するのは厳しいという結論に至った。