Rundeckのインストールと簡易設定


# Rundeckを利用してバッチ管理してみる

## 環境情報

CentOS 6.6
Rundeck 2.6.2
Java 8 (1.8.0_51)

## Rundeckとは

[Rundeck](http://rundeck.org/index.html) http://rundeck.org/index.html

### オープンソースのJob管理ツール

Rundeckは、オープンソースのJob管理ツール。
SCMとの連携もできるようになっているため、Jenkinsのように
CIツールとして利用することもできるようですが、
プラグインの数がJenkinsの方が圧倒的に多いらしく、CIツール
としては、さほど利用されていないらしい。

Cronのようにシェルスクリプトなどを定時実行することができるだけでなく、
結果に応じて、通知や別スクリプトを実行するなどCronだけでは実施が難しい
フロー制御が可能。

商用だと、SystemWalker、千手、JP1のようなJob実行基盤があるが
そこまで機能も豊富ではないが、手軽にJob管理ができるツール。

・Jobの実行制御
・複数ノードの管理
・並列実行、フロー制御
・失敗時の通知、別フローの実行
・GUIによる上記設定編集

※軽く触った限りでは、GUIでのグラフィカルにジョブネットを組み替えるなどはできない模様

### ライセンス

Apache Software License 2.0

商用利用が可能なライセンス。
基本的には、内部運用用途で利用することが多いため
よほど大きなバグを掴まない限りは、特にサポート契約も
不要と思われる。（最悪ソースを見て直すことも可）

### 日本語化について

日本語化は、行われておらずpropertiesファイルを
_jpとしてコピーし、編集することで可能とのこと。
マニュアルは、日本語化されている。

[マニュアル（日本語）](http://rundeck.org/docs/jp/index.html) http://rundeck.org/docs/jp/index.html

## 他にどのようなOSSツールがあるの？

Airflow　：Pythonでコードをゴニョゴニョ系
Luigi　　：同じくPythonで設定などをゴニョゴニョ系
Azkaban　：Java製　プロパティファイル形式でジョブを記載、設定、日本では人気あり？

参考：http://qiita.com/toyama0919/items/9c9e3fd5c8a92a7b7686

今回は、運用の方が利用しやすいようにGUIで操作、閲覧できてJava製の
Rundeckをピックアップ

# Rundeckをインストールする

インストールは、RPMパッケージ、Launchar.jarやtarballなどがあるが
今回は、yumでインストールする。敢えて手順を細かく書くまでもないが
あちこちサイトを飛びながら実施すると面倒だと思うの以下記載する。

## インストール手順

Javaをインストールする。
Javaのインストールが不要な場合は、後ほど記載しているJAVA_HOME設定
について記載対応する必要がある。

~~~
# yum install java-1.7.0

~~~

~~~
# rpm -Uvh http://repo.rundeck.org/latest.rpm
# yum install rundeck
# service rundeckd start

~~~

基本的にyesでインストールするとさくっとインストールまでは完了する。（はず）

## インストール後の環境設定

インストールが終わると以下の状態になっている。

* rundeckユーザーが追加されている
* /etc/rundeck/に各種設定ファイルが置かれている
* /etc/rc.d/rundeckd　という起動スクリプトが置かれている

サービスの実行は以下

~~~
# service rundeckd start
~~~

OKと表示される。

JAVA_HOMEが適切に設定されている場合は、ここでブラウザから以下の
URLでログイン画面が表示されるはず。

http://localhost:4440/

実際は、Javaのパスが通って
いなかったため自分の環境では、動いていなかった。
ちなみにログは以下に出力されているため、原因はそれで判明。

/var/log/rundeck/server.log

### はまりどころ１:JAVA_HOME

JAVA_HOMEの設定が、rundeckユーザーに対して設定できていれば、問題なかったのですが
自分の環境では上手いことbashのJAVA_HOME設定がrundeckユーザーに適用できていなかったため
以下のファイル内でJAVA_HOMEを設定してとりあえず解決させてみた。

/etc/rundeck/profile

~~~
# If JAVA_HOME is set, then add it to home and set JAVA_CMD to use the version s
pecified in that
# path.  JAVA_HOME can be set in the rundeck profile.  Or set in this file.
#JAVA_HOME=<path/to/JDK or JRE/install>

export JAVA_HOME=/var/java/jdk1.8.0_51 ←追加
echo $JAVA_HOME                          ←追加

if [ ! -z $JAVA_HOME ]; then
        PATH=$PATH:$JAVA_HOME/bin
        export PATH
        JAVA_CMD=$JAVA_HOME/bin/java
fi

~~~

上記を設定して、再び service rundeckd start を実行しブラウザから
アクセスしたところログイン画面が表示された。

### はまりどころ２：URL設定（リダイレクト？）

Linuxは、ランレベル３で起動しているためリモートのWindowsマシンから
ブラウザで以下のようにアクセス。

http://サーバーIDアドレス:4440/

![スクリーンショット_010516_110827_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/93861/f36cd518-3255-2ba6-59a3-2947c964cd5b.jpeg)


ログイン画面が表示されて、admin/adminでログインを実施したところ
（adminユーザーのデフォルトパスワードは、admin)
リダイレクトでページが見つからないと表示された。
どうやら、URLが設定ファイルに記載されているらしい。
（正直、微妙。。）

以下のファイルを編集する。

/etc/rundeck/rundeck-config.properties

~~~
# change hostname here
grails.serverURL=http://ホスト名:4440 ←localhostからホスト名に変更（自分は諸事情あるためIPアドレスを指定）
~~~

もう１か所

/etc/rundeck/framework.properties

~~~
framework.server.name = ホスト名 ← localhostからホスト名へ
framework.server.hostname = ホスト名 ← localhostからホスト名へ
framework.server.port = 4440
framework.server.url = http://ホスト名:4440  ← localhostからホスト名へ（上記と同様に自分はIPアドレスを指定）
~~~

上記を実施してserviceの再起動を実施

service rundeck restart

# Rundeckの設定

上記にすでに設定ファイルについて登場しているが
Rundeckの設定ファイルは、以下となる。

/etc/rundeck/rundeck-property.properties

このファイルは、Javaのプロパティファイル形式となっている。

# メールサーバー設定

Jobの実行時にメールを飛ばす際に、外部のメールサーバーを
利用する場合（自分はGmailを利用）は、propertiesファイルでは対応ができないらしい。
Groovy形式の設定ファイルを自分で用意し、そちらを読ませる必要があるとのこと、、
 （最初からそっちにしといてーな）

~~~
# cd /etc/rundeck/
# mv ./rundeck-property.properties ./rundeck-property.properties.back
# vi ./rundeck-property.groovy

~~~

ファイルの内容は以下
設定の内容は、rundeck-property.propertiesと同じ。メールの設定部分に関しては、各自の環境に合わせて変更する。

参考：http://soymsk.hatenablog.com/entry/2015/09/17/222110

~~~
loglevel.default="INFO"
rdeck.base="/var/lib/rundeck"
rss.enabled=false
dataSource {
        dbCreate="update"
        url="jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;MVCC=true;TRACE_LEVEL_FILE=4"
}

grails {
        serverURL="http://ホスト名:4440"　←ここは前回編集したホスト名とポート
        mail {
                host="smtp.gmail.com"
                port = 465
                username="XXXXXX@gmail.com"
                password="XXXXXXX"
                props = ["mail.smtp.auth":"true",
                      "mail.smtp.socketFactory.port":"465",
                      "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
                      "mail.smtp.socketFactory.fallback":"false"]
        }
}
~~~

上記の設定を実施した上で、起動時にpropertiesファイルではなく、groovyファイルを
読み込ませる必要がある。

/etc/rundeck/profile

~~~
# Add to load custom config
RDECK_JVM="$RDECK_JVM -Drundeck.config.location=/etc/rundeck/rundeck-config.groovy"
~~~

上記設定の反映のためサービスを再起動する。

service rundeckd restart


以上で、GmailなどSSL/TLSのメール通知が可能となる。

その他、参考となったURL
http://dev.classmethod.jp/server-side/server/try-rundeck-job/
http://note.crohaco.net/2015/rundeck-basic/