Rundeck導入（ジョブ登録 / 引数設定 / ジョブ実行 / ノード登録 / スケジュール登録）

# 概要
少し前に導入したことあったけど、若干手順が変わっていたのでメモ

**環境**
- MIRACLE LINUX release 9.0
- Rundeck 4.16.0

# 手順
## インストール
公式サイトに登録してインストールが必要。
下記から登録すると導入手順も教えてくれます。

https://www.rundeck.com/downloads

## 管理ページへのアクセス
インストールとRundeckの起動ができたらブラウザから管理ページにアクセスする。

**http://[サーバーのIPアドレス]:4440**

以下のようなページが表示されればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/8a2b4b22-673f-25fd-14a7-f60066f54118.png)

## ログインができないので･･･
初期パスワードで何故かログインができないので確認してたら
Rundeckの初期ホストがlocalhostになっているのでこれを変えてやらないといけない？

```
# vi /etc/rundeck/rundeck-config.properties
```
```diff_conf:/etc/rundeck/rundeck-config.properties
- grails.serverURL=http://localhost:4440
+ grails.serverURL=http://[サーバードメイン]:4440
```

:::note warn
このあたりは各自の環境によって調整するのが良いと思います。
:::

rundeckを再起動する
```
# systemctl restart rundeckd.service 
```

**再起動後、しばらくはブラウザからRundeckに繋がらないので暫く待つこと。**

ログインできることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/673bc426-29b8-8cc0-c023-38932526e379.png)

## プロジェクトとジョブの作成
管理画面にログインできたらプロジェクトとジョブを作成します。
プロジェクトはトップ画面の「新しいプロジェクト」から作成できます。

### ジョブの作成
今回は適当なコマンドをローカルで実行するログを作成します。
以下のジョブ作成の画面で、ステップを追加から「Command」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/2aeea353-f946-f3ae-a001-635a53e31239.png)

なにか適当にコマンドを入力して保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/d17dd876-1bd5-2008-1245-81cc3e2171fe.png)

これでジョブを作成する。他の項目はとりあえず初期値で良い。

## ジョブ実行のテスト
先程作成したジョブを実行し、問題なく実行できるかを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/7aab2acf-f886-1222-bb05-238d62c3d6e4.png)

## 引数付きのジョブを作成する
コマンドへの引数は直接指定することもできるが、ジョブ自体に引数の設定項目を持たせることも可能です。
ジョブ設定の「Workflow > Options」からオプションを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/a51d14fc-322c-583b-a720-354686b75f08.png)

作成したオプションは以下のような方法でコマンドライン引数やスクリプト内に変数的に利用することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/1ba73642-b3e9-32e5-dcb0-444236130392.png)

今回は引数を設定したいので、```${option.arg1}```、```${option.arg2}```を使います。（名前はオプション名で変わります）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/3768bb24-31fa-ff1b-eedf-8cd166a66eda.png)

オプションを設定することで、ジョブ実行画面で任意の引数値を指定して実行することが可能になります。設定によって、初期値を持たせたり日付を設定したりすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/4fe0eedc-cecb-736d-0013-85b2dfb7d558.png)


## 他のサーバーでコマンドを実行する場合
他のサーバーで任意のジョブを実行させる場合は **「ノード」** を作成する必要がある。
いろいろやり方はあるが、今回は以下のような条件で作成する

- ファイルベースのノード追加を行う
- RunDeckサーバーの任意のディレクトリにノード定義ファイルを作成
- ノード定義ファイルはYAML形式
- 他サーバーへの接続はパスワード認証のSSHを使う
- パスワードはRunDeckのKeyContainerに持たせる

### RunDeckサーバーにノード定義ファイルを作成
```/rundeck/node/file``` ディレクトリにノード定義ファイルを作成する。
ノード定義ファイルは以下のようなYAMLを作成

```yaml:/rundeck/node/file/sv1.yml
sv1:
  nodename: sv1
  hostname: sv1.example.com
  username: user1
  ssh-authentication: password
  ssh-password-storage-path: keys/user1
```
※ 各値は環境毎に変えること

### SSH認証用のキーコンテナをRundeckに作成
Rundeck管理画面の右上の歯車マークから**Key Storage**を選択して開き、キーを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/1812bd09-61f5-496e-95dc-5f8dfc9d580f.png)

|項目|値|
-|-
| Key Type |Password|
| Name |ノード定義yamlに記載した ```ssh-password-storage-path``` に対応する値を入力|


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/a541dab1-c0f4-570a-a46f-89e024bb4cb8.png)

### ノードを登録
プロジェクトを開き、左下の**PROJECT SETTING**から**Edit Nodes**を開き、ノードを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/40a3e891-f6e0-3b61-1eda-9f280b45dec1.png)

今回はファイルベースでノードを追加するため、**File**を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/5f247f2e-8c12-ca36-96ef-32186c596a79.png)

|項目|値|
-|-
| Formnat |resourceyaml|
| File Path |作成したノード定義ファイルのパス|


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/b505d54d-aaca-f52c-c933-058b36974498.png)

### ジョブに実行ノードを設定
ジョブの設定画面から**Nodes**を開き、実行ノードを設定する。

|項目|値|
-|-
| Nodes |Dispatch to Nodes|
| ノードフィルタ |作成したノード定義名|
| マッチしたノード |作成したノードが表示されていることを確認|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/d444f7c4-078d-aae4-bba7-77337054dab1.png)

これで保存すれば準備OKです。
ジョブを実行して設定した他サーバーで実行されるっこおを確認してください。

:::note warn
SSH接続は環境に応じてファイアウォールやフィルタリングの解除などが必要になる場合があります。
:::

## スケジュール登録
cronのようにスケジュールを登録してジョブを定期実行するようにする。
ジョブの設定画面から**Schedule**を開き設定をする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/2c00b880-4115-6235-3dd3-b7223d76c83b.png)

cron形式でも登録可能です。

# やっていて気になったこと
解決方法とかがあれば記事にするかも

- ジョブ実行のエラーキャッチやログ出力を調整する場合はバッチ側の調整が必要？
    - 標準出力をログをして表示するので、別途ログファイルに出力している場合はRundeck側はなにもログが出ない
- 中途半端に日本語化されているから設定を理解するのにちょっと時間がかかる
- 証明書認証によるSSHの設定

# おわり
かなりシンプルにセットアップできるので導入ハードルは低いのだけど、シンプルすぎてちょっと物足りないと感じる場合もあるかも。ワークフローが可視化されないのでその点はちょっと困る･･･

Enterprise版でこの辺は解消されるんだろうけどもー。