LoginSignup
3
6

More than 3 years have passed since last update.

Rundeckによるジョブスケジューリング

Posted at

Rundeckとは

image.png

RundeckはOSSのジョブスケジューラーです。
ノード間で簡単に自動化されたタスクを実行できます。

なぜRundeck??

世間では、 ジョブスケジューリングに関してcrondをつかったり
Kubernetesを使っている際はCronJob使いますよね?

ただ、これらを用いる際、

  • Slack通知は⾃分で作り込む必要がある
  • ジョブの並列実⾏がぎこちない。。。

などがあります。

Rundeckでは、

上記のことが、簡単にでできるうえに

ジョブの成功/失敗をメールやSlackに通知できる
ログをWebUI上で⾒られるようできる

これは使うしかないでよね!

hands-on

今回は簡単にさわれるように、dockerにデプロイして、実際に時間に合わせて、ジョブを打ってみます。

インストール

まず作業用ディレクトリを作成して、その中で作業しましょう。

# mkdir rundeck

以下のファイルを作ります。

docker-compose.yml
version: '3'

services:
    rundeck:
        image: rundeck/rundeck:SNAPSHOT
        hostname: rundeck
        links:
          - mysql
        environment:
            RUNDECK_DATABASE_DRIVER: com.mysql.jdbc.Driver
            RUNDECK_DATABASE_USERNAME: rundeck
            RUNDECK_DATABASE_PASSWORD: password
            RUNDECK_DATABASE_URL: jdbc:mysql://mysql/rundeck?autoReconnect=true&useSSL=false
            RUNDECK_GRAILS_URL: http://<サーバのIP>:4440
        volumes:
          - ${RUNDECK_LICENSE_FILE:-/project/null}:/home/rundeck/etc/rundeckpro-license.key
          - /root/project/rundeck/projects/:/home/rundeck/projects/
          - /root/project/rundeck/scripts:/home/rundeck/scripts/
          - /root/.ssh:/home/rundeck/.ssh/
          - /etc/hosts:/etc/hosts
        ports:
          - 4440:4440
    mysql:
        image: mysql:5.7
        environment:
          - MYSQL_ROOT_PASSWORD=password
          - MYSQL_DATABASE=rundeck
          - MYSQL_USER=rundeck
          - MYSQL_PASSWORD=password
        volumes:
          - dbdata:/var/lib/mysql

volumes:
    dbdata:

RUNDECK_GRAILS_URLには気を付けてください。

自分の環境ではNAT越しにアクセスをしているので、[NATのIP]:[フォワーディングしたport]を設定しました。
例えば、ここで間違えてdocker serverののprivate IPを書いた場合、最初のログイン画面で「login」を押すと、docker serverのprivate IPにリダイレクトされて見れなくなります。

その後、

# mkdir projects 
# mkdir scripts

確認します。

# ls rundeck
docker-compose.yml  projects  scripts

コンテナの立ち上げ

# docker-compose up -d

Rundeckの操作

ログイン

では、ログインしていきましょう。

01.PNG

projectの作成

新しいプロジェクトよりプロジェクトを作ります。
今回は、ここのdefaultのみ埋めるだけで大丈夫です。

そしたら、作成を押します。

02.PNG

jobの作成

左のジョブタブを選択します。
そしたら、新しいジョブの作成を選択します。

03.PNG

1. default

まず、job名を入力します。
説明は必要に応じて埋めてください。

04.PNG

2. workflow

複数のステップを用意する場合は、ワークフローで

  • 失敗したステップで停止する。
  • 残りのステップを実行する。

を選択してあげてください。(defaultは「失敗したステップで停止する。」)

05-a.PNG

ここでは、jobを実行する際の基盤を選択し、そのうえで実行するjobを定義します。

  • command
  • sctipt

等のような、簡易的なものだけでなく

  • Ansible playbook

なども用意されています。

05-b.PNG

05-c.PNG

Nodes

今回はlocalで行うのでそのままです。
リモートのサーバを登録していて、そちらを用いる場合は、ノードに割り当てるを選択します。

06.PNG

Schedule

ここで、スケジューリングの設定を行います。

07.PNG

時間の記述タイプは、

  • simple

07-b.PNG

  • crontab

07-c.PNG

の2つが用意されています。

Notificatoin

こちらは、必要に応じて設定してください。

作成したjobの確認

こんな感じに表示されます。

08.PNG

jobの実行後

jobが実行された後は、このようにアクティビティが増えていきます。
日付にカーソルを当て、選択しましょう。

09.PNG

このように今回実施されたjobの詳細情報が記述されています。

10.PNG

ログ出力を選択すると、以下のように今回打ったlsの結果が表示されています。

11.PNG

うまく、ジョブスケジューリングが働きました。

3
6
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
3
6