LoginSignup
1
2

More than 3 years have passed since last update.

Rundeck(v3.x)を紐解く

Last updated at Posted at 2020-10-28

基本知識

インストール方法とかは公式ドキュメントを参照してください。

起動・停止

$ sudo service rundeckd [start, stop, restart, condrestart, status]

ディレクトリ構成

ディレクトリの設定は/etc/rundeck/framework.propertiesで変更できる。
デフォルトでは以下のようになっている。

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とか。
  • workflow_workflow_step
    • workflow(ジョブ)とworkflow_step(実行コマンド)の関連テーブル
    • 2系だとインデックスが張られていなく、CPU不可を高める原因になっていたらしい
      • 3系ではデフォルトでインデックスが張られていた。

Docker

そんなRundeckだが、実は公式がDockerイメージを提供してくれている。
https://hub.docker.com/r/rundeck/rundeck/

結論からいうと業務で使うには厳しい完成度だが、一応検証したので記録として残しておく。

ディレクトリ構成

Linux版と大きく異るのがディレクトリ構成。
公式Rundeckイメージではrootユーザーが公開されていないので、足りない権限でうまくやりくりしなければいけない。

framework.properties
# ----------------------------------------------------------------
# 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を焼き直すしかない。

Dockerfile
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も動かすならこんな感じになる。

docker-compose.yml
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版を本番運用するのは厳しいという結論に至った。

1
2
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
1
2