Rundeckがバージョンアップしたので、自分のwindows環境へインストールしてみます。
はじめに
Rundeckの説明は探せばいっぱい出てくるので省きます。簡単にいうとジョブスケジューラです。Windows環境でも動作するのでcronがないwindowsマシンでも動きます。退屈な仕事をやってもらうにの重宝しています。
現行の動作環境について
タイトルどおり、現状はRundeck2が動いています。現状の動作環境はこんな感じです
- Windows7
- Rundeck2.7.3 (open-source版) build-inサーバーで動作
- MySQL 10.1.25-MariaDB(Xampp)
Rundeckのマニュアルには、新規にインストールしプロジェクトやジョブをコピーしたほうがいいよ、って書いてあるので、2インスタンス構成にします。
Upgrading
For the most part, Rundeck 3.0 is drop-in compatible with existing Rundeck 2.11 installations.
We recommend doing a fresh install of 3.0.0 and copying your Jobs/projects into it for testing.
If you are upgrading in-place, Be sure to backup import data/configs before upgrading.
今回のゴールは
- Rundeck3を新規ディレクトリにインストールして、起動させる
- MySQLのデータベースも新しくセットアップする
- Rundeck3はRundeck2とポートのバッティングを避けるため、14440ポートで動かす
インストール完了後に、Rundeck2からのジョブの移行とか、権限設定とかやります。
やってみよう
Rundeck3を起動させるところまで、やってみます。
Rundeckのダウンロード
Windowsなので、普通にブラウザでアクセスしてバイナリ版をダウンロードします。
http://rundeck.org/downloads.html
2018/8/8時点の最新版 rundeck-3.0.1-20180803.war
をダウンロードしてきました。
Rundeckをインストール
インストールディレクトリは、C:/rundeck3にします。フォルダを作成してダウンロードしたファイルをコピーします。Javaが必要なのでインストールしておいてください。マニュアルによると1.8以上が必要で、JAVA_HOMEも設定しておけとのこと。
Java
Rundeck is a Java-Servlet based server and therefore requires the Java runtime.
The install process requires that the latest version of Java 8 be installed. Both the Open JDK and Sun/Oracle JVMs can be used. You must have the JAVA_HOME environment variable defined in your environment before running the launcher. The RPM will use the java found on your path. See Setting JAVA_HOME if you want to run a different version of java.
参照:http://rundeck.org/docs/administration/install/index.html
では、インストールします。コマンドプロンプトで実行可能です。
C:\rundeck3
λ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
C:\rundeck3
λ ls
rundeck-3.0.1-20180803.war
C:\rundeck3
λ java -Xmx1024m -jar rundeck-3.0.1-20180803.war --installonly
httpポートの設定
デフォルトの4440ポートから14440ポートに変更します。ここが一番ハマりました。
答えから言うと、rundeck-config.properties
にserver.port
を書き足すしかないらしいです。
#rss.enabled if set to true enables RSS feeds that are public (non-authenticated)
rss.enabled=false
server.address=HOSTNAME
#↓ここ追加
server.port=14440
grails.serverURL=http://HOSTNAME:14440
System Propertyを書き換えると動くとか、framework.properties
を変えるとか、preferences.properties
を変えるとか、いろいろ試しましたが、2018/8/8現在はどれもうまく動かないようです。4440で動かす人は全く気にしなくていいです。1
MySQLの設定
データベース作成
今回はRundeck3用にMySQLのデータベースも新規に作ることにしたので、rundeck3
というデータベースを作っておきます。ユーザとパスワードも一緒に作ります。
mysql -u root
CREATE DATABASE rundeck3 DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON rundeck3.* TO rundeckuser3@localhost IDENTIFIED BY 'password';
rootユーザでデータベースを作ります。rundeck3データベースにログインができることを確認しておきます。もちろんテーブルは何もないです。Rundeck2で使っているuserと同じuserを使ってRundeck3のDBに権限を与えると、Rundeck2側につながらなくなるので、気を付けてください。Rundeckの問題ではなくてMySQLの権限設定の問題です。2
mysql -u rundeckuser3 -p rundeck3
MariaDB [rundeck3]> show tables;
Empty set (0.00 sec)
JDBCドライバのインストール
Rundeck3をbuild-inサーバーで動かすので、$RDECK_BASE/server/lib にMySQLのJDBCドライバをコピーします。tomcatにwarをデプロイする場合には、置き場所が違うので注意です。MySQLのJDBCドライバはこの辺からダウンロードしてきてください。
参照:http://rundeck.org/2.10.6/administration/setting-up-an-rdb-datasource.html
データベースの設定
RundeckがMySQLを使うように設定を変更します。
ファイルはここにあります。C:\rundeck3\server\config\rundeck-config.properties
追記しましょう
dataSource.dbCreate = update
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url = jdbc:mysql://localhost/rundeck3?autoReconnect=true
dataSource.username=rundeckuser3
dataSource.password=***
#これ、忘れていました。(2019/7/14)
rundeck.projectsStorageType=db
Rundeck3.0のReadMeにMySQLを使うときは、ドライバ名を書くようにとありましたので、ドライバ名も追加してます。、
Must define JDBC driver class name
If using Mysql/other DBs which require a JDBC driver, be sure to specify it explicitly in the rundeck-config file, e.g. dataSource.driverClassName=com.mysql.jdbc.Driver
Configure project config in DBも合わせて設定します。これをやらないとプロジェクト情報はDBに保存されません。設定ファイルに1行追加するだけです。
https://docs.rundeck.com/2.10.6/administration/setting-up-an-rdb-datasource.html#configure-project-config-in-db
ここまででいったん準備は完了です。
Rundeck3 起動
設定が一通り終わったら、skipinstall指定で実行してみます。
C:\rundeck3
λ java -Xmx1024m -jar rundeck-3.0.1-20180803.war --skipinstall -d
しばらく待つとコマンドプロンプトにログがたくさん出てきます。最後にログが出ればうまくいっているはずです。
2018-08-09 00:07:51.236 INFO --- [ main] rundeckapp.BootStrap : Starting Rundeck 3.0.1-20180803 (2018-08-04) ...
2018-08-09 00:07:51.238 INFO --- [ main] rundeckapp.BootStrap : using rdeck.base config property: C:/rundeck3
2018-08-09 00:07:51.272 INFO --- [ main] rundeckapp.BootStrap : loaded configuration: C:\rundeck3\etc\framework.properties
2018-08-09 00:07:51.285 INFO --- [ main] rundeckapp.BootStrap : RSS feeds disabled
2018-08-09 00:07:51.286 INFO --- [ main] rundeckapp.BootStrap : Using builtin realm authentication
2018-08-09 00:07:51.286 INFO --- [ main] rundeckapp.BootStrap : Preauthentication is disabled
2018-08-09 00:07:51.362 INFO --- [ main] rundeckapp.BootStrap : Rundeck is ACTIVE: executions can be run.
2018-08-09 00:07:51.847 INFO --- [ main] rundeckapp.BootStrap : Rundeck startup finished in 2651ms
Grails application running at http://HOSTNAME:14440 in environment: production
気になるログ1
MySQLに繋ぐと、こんなログも出てくるかもしれません。何個かテーブルを作るのに失敗しているみたいです。なんだろ。。とりあえず、気にせず行きます。3
```
2018-08-08 22:25:59.370 WARN --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
(省略)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
```
MySQLのデータベースを見てみると、21個テーブルはできています。
MariaDB [rundeck3]> show tables;
+----------------------------+
| Tables_in_rundeck3 |
+----------------------------+
| auth_token |
| base_report |
| execution |
| job_file_record |
| log_file_storage_request |
| node_filter |
| notification |
| orchestrator |
| plugin_meta |
| project |
| rdoption |
| rdoption_values |
| rduser |
| referenced_execution |
| report_filter |
| scheduled_execution |
| scheduled_execution_filter |
| storage |
| workflow |
| workflow_step |
| workflow_workflow_step |
+----------------------------+
21 rows in set (0.00 sec)
ここで、Rundeckを一度停止します。
JVMプロパティなど設定の追加
Rundeckを1回実行すると、C:\rundeck3\etc
フォルダにファイルがいくつか作られます。
起動ファイル作成
マニュアルにあるとおり、C:\rundeck3\startrundeck.bat
に起動用のファイルを作っておきます。やってることはprofile.batを読み込んでwarを実行するだけです。
set CURDIR=%~dp0
call %CURDIR%etc\profile.bat
java %RDECK_CLI_OPTS% %RDECK_SSL_OPTS% -jar rundeck-3.0.1-20180803.war --skipinstall -d
profile.batの編集
C:\rundeck3\etc\profile.bat
ファイルにJVMオプションをいくつか書きます。
set RDECK_BASE=C:\rundeck3
set JAVA_HOME=C:\java8
rem :: Unsetting JRE_HOME to ensure there is no conflict with JAVA_HOME
rem (set JRE_HOME=)
set Path=%JAVA_HOME%\bin;%RDECK_BASE%\tools\bin;%Path%
set RDECK_SSL_OPTS="-Djavax.net.ssl.trustStore=%RDECK_BASE%\etc\truststore -Djavax.net.ssl.trustStoreType=jks -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol"
set RDECK_CLI_OPTS=-Xmx1024m ^
-Dserver.http.port=14440 ^
-Dserver.https.port=14443 ^
-Dfile.encoding=UTF-8
set RD_LIBDIR=%RDECK_BASE%\tools\lib
RDECK_CLI_OPTSにメモリーオプション、http/httpsのポート、ファイルエンコーディングを指定しました。port指定は今のバージョンでは意味なさそうですが、未来のために。
再起動
startrundeck.batで起動してみます
C:\rundeck3
startrundeck.bat
ログがで終わったら、ブラウザでアクセスしてみます。HOSTNAME部分は自分のマシン名になっていると思いますので、書き換えてください。
見慣れた画面が出てきます。デフォルトでは、admin/adminでログインです。
ログイン成功です。
ユーザ設定
Rundeck2と同じく、realm.properties で設定可能です。
タスクの移行
Rundeck2のタスクをYAMLでダウンロードして、Rundeck3にインポートはできました。比較的簡単なジョブしか組んでいないので、問題はおきませんでした。
プラグイン
slackのプラグインは、Rundeck2と同じもので動きました。C:\rundeck3\libext
のフォルダにプラグインのjarを置くだけで動きました。
slackに通知するところでエラーになっていたので、以下の設定を空白にして再起動したら動きました。
set RDECK_SSL_OPTS=
このあとは
プロジェクトの設定、ユーザの設定、Rundeck2からのジョブの移行して動作確認をしたら、Rundeck2の停止するところまで進めます。3.x系でslackのプラグインが動くかどうかの確認ですね。
ハマりどころメモ
ログイン画面に戻ってしまう
同じマシンで2つのRundeckのインスタンスが上がっている状態で、同じブラウザで複数のRundeckにログインすると、ジョブ登録などのアクションが完了せずにログイン画面に戻されることが何度かありました。おそらく、ログイン情報が新旧と共有されてしまっていて動かないの状態なのかと。ChromeとFirefoxでブラウザ自体を分けて使うとうまくいきました。
-
ISSUEが上がってました。https://github.com/rundeck/rundeck/issues/3786 ↩
-
milestone 3.0.2 が設定されているので、近いうちに直りそう。https://github.com/rundeck/rundeck/issues/3785 ↩