Rundeckでとりあえずjobを起動するとこまでのまとめ

# はじめに
Rundeckのエントリーはいくつかあると思いますがちょいちょいハマりつつ色んな記事の色んな箇所を参考にさせていただいたので個人的なメモ用に。
とりあえず環境作ってジョブを実行するところまで。

# 環境
Vagrant / centOS7

## Vagrantfile
動作環境に使ったVagrantfileです

```
Vagrant.configure(2) do |config|

  config.vm.box = "bento/centos-7.5"

  config.vm.define "rundeck" do |c|
    c.vm.hostname = "rundeck"
    c.vm.network "private_network", ip: "192.168.33.10"
    c.vm.network "forwarded_port", guest: 4440, host: 4440
    c.vm.synced_folder "./job", "/home/rundeck/job", create:true
  end
end

```

Vagrantfileが置いてあるディレクトリにjobディレクトリを作成し、起動したいjobを入れておく。　　
これらを叩くように後でrundeckで設定。

## サンプル
https://github.com/ohanamisan/Rundeck_on_Vagrant/tree/master
下記の動作一連を`vagrant up`時にまとめてやってくれるよう上記のVagrantfileを少し編集してます。


# 手順

## Vagrantに入る
表現あってますかね？Vagrantに入ります。

```
$ vagrant up
$ vagrant ssh
```

### Vagrantで困ったこと
起動時にマウントのエラーが出てました。

```
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

さっぱりわからなかったのですが[こちら](http://yinm.hatenadiary.jp/entry/2017/01/14/000935)を参考にさせていただき以下のコマンドをvagrant内で叩きました。

```
$ sudo yum -y update kernel
$ sudo yum -y install kernel-devel kernel-headers dkms gcc gcc-c++
```

ホスト側で ```vagrant reload``` をするとちゃんとマウントされました。
今回はRundeckメインに取り上げるのでこれ以上はとりあえず深堀せず先に行きます。

#### Javaを入れておく
```
$ sudo yum install -y java-1.8.0-openjdk
```

## yumでインストール

```
$ sudo yum install -y https://repo.rundeck.org/latest.rpm
$ sudo yum install -y rundeck
```

## 起動

```
$ sudo service rundeckd start
```

### ステータス確認
```
$ sudo service rundeckd status
```

```
● rundeckd.service - SYSV: rundeckd, providing rundeckd
   Loaded: loaded (/etc/rc.d/init.d/rundeckd; bad; vendor preset: disabled)
   Active: active (running) since Thu 2018-12-27 09:28:57 JST; 2min 48s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 734 ExecStart=/etc/rc.d/init.d/rundeckd start (code=exited, status=0/SUCCESS)
 Main PID: 748 (runuser)
   CGroup: /system.slice/rundeckd.service
           ‣ 748 runuser -s /bin/bash -l rundeck -c java -Drundeck.jaaslogin=true            -Djava.security.auth.log...
```

こんなのが出てればおけーです。

## 接続

4440ポートで接続ができる
http://localhost:4440/

接続するとログインページにつながります。
初回はユーザ:admin, パスワード:adminで入れます。
![初回ログイン.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/73c8d086-dcdf-651a-72b8-41c7d1305c2c.png)


## プロジェクト設定
ログインすると以下のページが出てくるので[新しいプロジェクト]をクリックします。  
![初回起動時.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/35cec144-0314-8012-68e9-3fcb8a7a985c.png)
今回はプロジェクトの細かい設定は行わず、ProjectsNameだけ入力して完了します。
![プロジェクト設定.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/2e8ace52-c2b3-ad13-f0bf-db033dcdcfdb.png)

## Job設定
ジョブ欄から[新しいジョブを作成]をクリック。
![ジョブ作成.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/b7978b96-cc49-f942-3d89-5c08441d9a4b.png)
ジョブ名を入力し下に進むとステップの追加があるのでジョブの実行内容を記述します。
ステップはいろいろできますが今回はシンプルにコマンドを叩きます。
![ステップの設定.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/52a43944-cbb8-4660-e331-366d2bbab692.png)

### 手動ですぐに実行
![今すぐジョブを実行.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/77b5d605-45df-58ae-7464-03396361d712.png)
怒られた

```
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified　# <- 怪しい
Result: 1
Failed: NonZeroResultCode: Result code was 1
```

#### 実行ユーザーを確認
whoamiをjobに追加して再度実行してみた
![whoamiをjobに追加.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/219f368c-fabf-80f8-eec7-0c8c0d62ba5f.png)
![job実行ユーザ確認.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/1756c00a-2a43-d411-f196-abf0be202c56.png)
rundeckというユーザになってました。

[こちら](https://qiita.com/gozuqi/items/6ebb2e6a4d49dfeb080f)参考にさせていただき以下を実行し、
rundeckユーザでsudoを使えるようにしてあげます。

```
$ sudo visudo
```

```
# Defaults !visiblepw
Defaults visiblepw

root    ALL=(ALL:ALL) ALL
rundeck ALL=(ALL) NOPASSWD:ALL
```

再度実行
![成功.PNG](https://qiita-image-store.s3.amazonaws.com/0/227898/09d84918-244c-6a92-642b-28df36675242.png)
実行成功しました。

## ジョブオプション
### 重複実行
**Multiple Executions**
Yesにすると重複実行が可能になる。
デフォルトはNoになっており、重複実行しようとすると実行されない。

### 定期実行・スケジュール設定
**Schedule to run repeatedly?**
デフォルトはNoになっており、定期実行の設定がされていない。
Yesにチェックすると時間の設定をSimpleとCrontabの2種類から選べる。

**Simple**
セレクターで時間を選んで毎日か毎月かのチェックをつける

**Crontab**
ほぼcron書式で書くことができる。
秒と年が指定できるように拡張されている。

```
秒 分 時 日 月 曜 年
0  30 7  *  *  ?  *
```
必ず1つは[?]指定が必要。

**Timeout**
実行時間の制限を登録できる。
実行時間が設定時間を超えると失敗とみなされる

**Retry**
ジョブが失敗した場合や、タイムアウトした場合に発生。
その後の再試行する回数を設定できる。

**Retry delay**
失敗したジョブと再試行の間の時間。
秒単位の時間、もしくは時間単位を指定する。

時間単位の指定
120m, 2h, 3d

# おわりに
上記のオプションなどでスケジューリングやタイムアウトの設定を行っていけばとりあえずはcronと同じように定期実行できそうです。
Rundeckは他にもたくさん機能があるそうなので少しずつキャッチアップする。

# 参考にさせて頂いたページ
* [Rundeck 使ってみた]
(https://qiita.com/ngyuki/items/d0d593fc89ad440d6d88)

* [Rundeck - cronから移行しやすいジョブスケジューラを使ってみよう]
(https://heartbeats.jp/hbblog/2015/01/rundeck.html)

* [cron から Rundeck に乗り換えると決めた話]
(https://tech-blog.monotaro.com/entry/2018/03/02/183551)

* [脱cron!Rundeckでジョブスケジューラを構築]
(https://qiita.com/snoguchi/items/a3eb59c1c4b57e558e33)