LoginSignup
6
4

More than 5 years have passed since last update.

GCEにRUNDECKをインストールして、Jobの結果をslackに通知する。私はCronをやめる。

Last updated at Posted at 2018-11-29

はじめに

GCLB配下のGCEにRUNDECKをインストールしましたが、GCLB配下に置いたときにhttpにリダイレクトされるようになって地味にハマった。。。

  • 今回作成した環境は全てGCP(GCE)のCentOS7で作成しています。
  • ロードバランサはGCLBを使用してます
  • RUNDECKのバージョンは3.0.8の場合で記載してます。

RUNDECKってそもそも何?

  • OSSのジョブ管理ツール。
  • WebのGUIでもAPIでも使える。
  • 定期実行やワークフローによる制御も可能。
  • コマンドやshellをRUNDECKから実行することが出来る。
  • Ansibleと同じで、sshで接続するだけなので、エージェントのインストールが不要。
  • Apache-2.0ライセンスのため、商用利用可。
  • Githubで2500以上のスターがついている。(スターの数は信頼の数w)
  • Community版と有料版(Enterprise)がある
  • Pluginが豊富で、Slack通知のプラグインや、Kubernetesプラグイン、vaultプラグイン、Ansibleプラグインなど、様々なプラグインがある。
  • Javaで出来ている
  • デフォルトはH2Databaseにデータを保存しているが、冗長構成をとるためにMySQL、SQLServer,Oracle,Postgresとかにすることも可能
  • アカウント・権限(ACL)の管理も可能

期待出来ること

  • CronJobピタゴラスイッチが無くなる
    • Job内でスクリプトやコマンドを直列、並列、シーケンシャルで実施するか等のワークフローを定義できる。
  • どこで何のCronが動いてるか分からない問題が無くなる
    • 一元管理出来るので、呼び元がよく分からないCronとかが無くなり、見通しが非常に良くなる。
  • いつの間にかにバックアップ止まってるやん・・・が無くなる
    • Jobのスタート時、完了時、エラー発生時などそれぞれ任意のタイミングでメールやSlackに通知することが出来る。

インストール

以下のドキュメントを参照。
https://rundeck.org/docs/administration/install/centosredhat.html

Rundeck本体のインストール

$ sudo yum install -y java
$ sudo rpm -Uvh http://repo.rundeck.org/latest.rpm
$ sudo yum install -y rundeck
$ sudo systemctl start rundeckd

以下の設定を入れないと、ログイン後にlocalhostにリダイレクトされる洗礼をうける。

$ sudo vi /etc/rundeck/rundeck-config.properties

#grails.serverURL=http://localhost:4440
grails.serverURL=http://YOUR_IP:4440

$ sudo systemctl restart rundeckd

GCLB配下におくための設定

今どき平文で通信とか無いと思うので、https対応を行う。
今回はGCPのGCLBを使用して作成。

以下の設定を入れないと、ログイン後にhttpにリダイレクトされる洗礼をうける。

詳細は、https://rundeck.org/docs/administration/security/configuring-ssl.html を参照。

$ vi /etc/rundeck/rundeck-config.properties
server.useForwardHeaders=true #←これを追加する

$ sudo systemctl restart rundeckd

Slack通知プラグインの導入

https://api.slack.com/apps にてAppを作っておく必要がある

$ curl -O https://github.com/rundeck-plugins/slack-incoming-webhook-plugin/releases/download/v1.2.2/slack-incoming-webhook-plugin-1.2.2.jar

$ cp ./slack-incoming-webhook-plugin-1.2.2.jar /var/lib/rundeck/libext/

ここで非常に重要なのが、Fork元に記載されている↓をやること。
プロジェクト作成後にこれをやらなかったら、Slackの項目が出てこなかった。
そもそもList Pluginsに出てこなかったので、読み込みすらされてなさそうだった。

WebHook URL: Slack incoming-webhook URL. Must be set at the project (or global rundeck level) by editing the project properties file, either by going to YOUR PROJECT > Project Settings > Edit Configuration > Edit Configuration File and adding the webhook URL as show below:

RUNDECKのログイン

デフォルトは admin/admin
後述するが、/etc/rundeck/realm.propertiesにアカウントの設定が記載されている

スクリーンショット 2018-11-29 8.32.40.png

PROJECTの作成

左ペインのPROJECTSから + New Project
Project Nameだけ入力して、あとはデフォルト。

デフォルトで使用されるsshキーは /var/lib/rundeck/.ssh/id_rsaにあるキーが使用される

スクリーンショット 2018-11-29 8.37.48.png

NODES追加

プロジェクトを作っただけだと、以下の様にlocalhostしかない。
そのため、リモートのNodeを操作したい場合はNodeを追加する必要がある。
スクリーンショット 2018-11-29 8.40.57.png

このNode追加がなぜかGUIじゃ出来ない。
意味が分からない。

rundeckの設定ファイルをゴニョゴニョしないといけない。

project.propertiesの設定

詳しくは以下に載っている
https://rundeck.org/docs/administration/configuration/configuration-file-reference.html#project.properties

project.properties
vi /var/rundeck/projects/test-project/etc/project.properties


# 以下を追加
resources.source.1.type=file
resources.source.1.config.file=/var/rundeck/projects/test-project/etc/resources.xml # ← `test-project`は適宜変更
resources.source.1.config.generateFileAutomatically=true
resources.source.1.config.includeServerNode=true

resources.xmlの設定

上記で定義したresource.xmlファイルを新規で作成する
https://rundeck.org/docs/man5/resource-xml.html

resources.xml
vi /var/rundeck/projects/test-project/etc/resources.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <node name="rundeck-test" type="Node"
     description="test"
     hostname="130.211.XXX.XXX"
     username="rundeck" tags="test,nginx"
     />
  <!-- 複数ある場合は上記のnodeを追加していく -->
</project>

再起動する必要なく、動的に以下が追加されている

スクリーンショット 2018-11-29 10.48.34.png

ユーザー追加

このユーザー追加もなぜかGUIじゃ出来ない。
意味が分からない。

Node追加同様、rundeckの設定ファイルをゴニョゴニョしないといけない。

https://rundeck.org/docs/administration/configuration/configuration-file-reference.html#realm.properties
https://rundeck.org/docs/administration/security/authenticating-users.html#propertyfileloginmodule

特定のプロジェクトをいじれるユーザーを作成する

今回は test-projectの全権限があるユーザーを作成する


vi /etc/rundeck/realm.properties

testadmin:testadmin,user # ←これを追加

ACLを設定する
https://rundeck.org/docs/man5/aclpolicy.html

contextには以下の2つがある。

  1. project :ポリシーが適用されるプロジェクトの名前を宣言。その値は文字列であり、正規表現にすることができる。この正規表現には、プロジェクト名が一致する必要がある。
  2. application : アプリケーションセクションを宣言。サポートされる唯一の値はrundeck。
vi /etc/rundeck/testadmin.aclpolicy


description: Project settings for testadmin
context:
  project: 'test-project'
for:
  resource:
    - allow: '*'
  adhoc:
    - allow: '*'
  job:
    - allow: '*'
  node:
    - allow: '*'
by:
    username: testadmin

---

description: Application level access for testadmin
context:
  application: 'rundeck'
for:
  resource:
    - equals:
        kind: project
      deny: [create] # deny create of projects
    - equals:
        kind: system
      deny: [read,enable_executions,disable_executions,admin]  #deny read of system info, enable/disable all executions
    - equals:
        kind: system_acl
      deny: [read,create,update,delete,admin] # deny modifying system ACL files
    - equals:
        kind: user
      deny: [admin] # deny modify user profiles
  project:
    - match:
        name: 'test-project'
      allow: [read] # test-projectだけが見られるようにする

by:
  username: testadmin

jobの作成

jobの名前などをつける

Descriptionはmarkdownで書ける。

スクリーンショット 2018-11-29 13.10.17.png

workflowを作成する

今回はScriptを選択した。
スクリーンショット 2018-11-29 13.11.41.png

スクリーンショット 2018-11-29 13.12.07.png

Nodeを選択する

Remoteに実行するので、 Dispatch to Nodesを選択。
Node Filterで Show all nodesで出すと、先程登録したNodeが表示されるので、それを選択する。

スクリーンショット 2018-11-29 13.14.22.png

Notificationを設定する

よしなにSlackの通知を設定する

以下の単位で通知の On/Offが切り替えられる。

  • On Success
  • On Failure
  • On Start
  • Average Duration Exceeded
  • On Retryable Failure

スクリーンショット 2018-11-29 13.16.43.png

Scheduleを設定する

以下の2タイプから選択可能

  • Simple
  • Cron

Timezoneとかの指定も親切なUI

Simple

スクリーンショット 2018-11-29 13.24.29.png

Cron

スクリーンショット 2018-11-29 13.26.25.png

Timeoutを設定する

Timeoutを設定してないと延々とやってしまう・・・
スクリーンショット 2018-11-29 13.23.08.png

タスク登録完了

以下のように設定される。
スクリーンショット 2018-11-29 13.28.36.png

いざ実施

登録したタスクを Run Job Nowで実施する

FireWallRule、メタデータ(GCPのsshキーを登録するところ)追加するの忘れてた・・・

スクリーンショット 2018-11-29 13.30.33.png
スクリーンショット 2018-11-29 13.31.15.png

ちなみに、rundeckのsshキーは以下に登録されている。

# ls -lhA /var/lib/rundeck/.ssh/
total 12K
-rw-------. 1 rundeck rundeck  407 Nov 27 00:03 authorized_keys
-rw-------. 1 rundeck rundeck 1.7K Nov 25 12:46 id_rsa
-rw-r--r--. 1 rundeck rundeck  390 Nov 26 00:07 id_rsa.pub

気を取り直して、いざ実施

スクリーンショット 2018-11-29 14.04.18.png

スクリーンショット 2018-11-29 14.04.57.png

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