僕とコードとブルーハワイ

omega (@equal_001) の日記

Rundeck 基礎編 インストールからジョブ実行までのメモ

最近触る機会があったので、その記録として導入方法から少しずつ使用方法をまとめていく。

Rundeckとは

とても雑にいうとcron機能の進化版みたいなもの。(とか言ったら各所から怒られそう)
時間毎にジョブを実行させるのはもちろん、複数サーバへのパラレル実行、WebUI操作、外部サービスへの通知連携など、多機能なサービスです。


インストール

環境:Ubuntu 14.04
Rundeckバージョン:2.6.2


公式サイト( Rundeck.org - Downloads )にOSごとのパッケージ取得方法が書かれているので、これを参考に取得する。

$ apt-get install openjdk-7-jdk 
$ dpkg -i rundeck-2.6.2-GA.deb


上記でローカルでRundeckを使う環境が整うので、早速Rundeckを起動。

$ service rundeckd start


localhost:8000にアクセスすると以下のページが表示される。この画面が表示されれば正常に起動している。
デフォルトはadmin:admin
ユーザとパスワードの設定は後述する設定ファイルで変更可能。

f:id:equal_001:20160326023136p:plain

プロジェクト作成

ログイン後、以下の画面に遷移するのでNew Project+を押す。
f:id:equal_001:20160326023132p:plain

New Project+を押すと、プロジェクトのConfig画面に遷移するので、Project Nameを入力する。秘密鍵を登録済みなら、Default Node Executor のSSH、 Default Node File CopierのSCP(画像では切れてるがSSHの下にある) を設定する。
f:id:equal_001:20160326023538p:plain

ジョブの作成

プロジェクトを作成したらプロジェクト一覧画面に遷移するので、New Jobを押す。
f:id:equal_001:20160326024317p:plain
ジョブの設定画面では最低限以下の項目を入力する。

  • Job Name: ジョブの名前。どういうコマンドを実行させるジョブかわかる名前をつける。
  • Description: このジョブの説明を書く。
  • Workflow: コマンドまたはスクリプト実行を設定する。Commandはワンラインコマンド、ScriptはShellスクリプトを登録できる。このプロジェクトではScriptを使用している。

今回はhelloといいう文字列を出力するhello.pyを実行するジョブを作成する。
f:id:equal_001:20160326025340p:plain


ローカルで実行するなら必要はないが、リモートサーバでジョブを実行させる場合は以下項目の設定が必要となる。

  • Nodes: 実行するリモート環境を選択する。リモート環境を選択するには、/var/rundeck/projects/${project.name}/etc/resources.xml を編集する必要がある。(Webからは設定できないので、Rundeckサーバに入って直接編集する)

f:id:equal_001:20160326030542p:plain

resources.xml の設定
  • node nage: ジョブ作成ページの Nodes のNode Filterで入力する名前。
  • hostname: リモート先のホスト名
  • username: リモート先に入るときのユーザ名

以下の例だと、ジョブ作成時にNode Filterでexampleと入力して設定しておくことで、プロジェクト作成時に設定した秘密鍵を使用してRundeckがSSHしてジョブを実行する。ssh -i id_rsa example-user@example.com というようにしているのと同じ。

<?xml version="1.0" encoding="UTF-8"?>

<project>
  <node name="OMEGA.local"
    description="Rundeck server node"
    tags=""
    hostname="OMEGA.local"
    osArch="amd64"
    osFamily="unix"
    osName="Linux"
    osVersion="3.13.0-76-generic"
    username="omega"/>
  <node name="example"
    description="example node"
    tags=""
    hostname="example.com"
    osArch="amd64"
    osFamily="unix"
    osName="Linux"
    osVersion="3.13.0-76-generic"
    username="example-user"/>
</project>

その他、オプションで細かな設定ができる。よく使用するものを挙げる。

  • Thread Count: 並列数の選択。
  • Send Notification: ジョブ結果の通知設定。通知するタイミングは成功・失敗・スタートの3種類選べる。通知方法はEmail、Webhook(Slackも可能)の方法を選べる。

Schedule to run repeatedly: ジョブの実行周期を設定する。

  • Log level: 実行結果のログレベルの設定。Nomalならコマンド結果の標準出力、Debugなら- - - Rundeckが実行しているより詳細なログを出力する。Debugにすると、実行終了までの時間が多少遅くなる。

ジョブの実行

Saveボタンを押してジョブを保存すると、登録したジョブの管理画面になる。
ジョブを実行するには、Run job Now を押す。

f:id:equal_001:20160326031116p:plain

実行状況を確認する管理画面に遷移する。Log Outputタブを押してみると、「hello.pyの実行」ジョブのタスクによりhelloという表示がされている。成功。
f:id:equal_001:20160326031438p:plain

秘密鍵の登録方法

2通りの登録方法がある。

WebUIからの秘密鍵を登録する

Rundeck全体の管理画面に遷移して、Key Storageを選択、Add or Upload a Key を押して鍵を登録する。

f:id:equal_001:20160326032010p:plain

任意の場所に鍵を置いてresources.xmlでPATH指定して読み込む

所定のディレクトリに設置した秘密鍵を、以下の例のようにresources.xml でPATH定義して読み込める。
鍵のパーミッションの設定を忘れずに。
パーミッション・・・.ssh 700、rundeck-key 600 chown rundeck:rundeck

例)秘密鍵が/etc/rundeck/.ssh/rundeck-keyにある場合
  <node name="example"
    description="example node"
    tags=""
    hostname="example.com"
    osArch="amd64"
    osFamily="unix"
    osName="Linux"
    osVersion="3.13.0-76-generic"
    ssh-authentication="privateKey"
    ssh-keypath="/etc/rundeck/.ssh/rundeck-key"
    username="example-user"/>

こっちの方法でやったほうが色々楽だと思う。
また別に書くけど、AnsibleでRundeck環境を諸々構築するときに鍵を配置できるので、基本WebUIからの登録はしない。

slackへ通知するプラグインの追加

デフォルトでは使用できないが便利なプラグインを公開してくれている方がいるので、それを利用させて頂く。
使用方法も以下のページに書いてるのでここを読めばOK。
github.com

rundeck-slack-incoming-webhook-plugin-0.5.jar をダウンロードしてきて、/var/lib/rundeck/libext/配下に設置するだけ。

$ sudo mv rundeck-slack-incoming-webhook-plugin-0.5.jar /var/lib/rundeck/libext/