JenkinsからWildFlyへのリモートデプロイ(pom.xmlの更新)
前回は、Jenkinsサーバーが乗っているDockerコンテナから、WildFlyが動作しているアプリケーションサーバー用Dockerコンテナへのコンテナ間接続をやりました。 begirama.hatenablog.com
JenkinsからWildFlyへのリモートデプロイはWildFly Maven Pluginというのがあって、MavenからWildFlyへのデプロイ、アンデプロイ、インスタンスの起動停止が行えるようです。
WildFly Maven Plugin - Plugin Documentation
deployに関する詳細なリファレンスは下記。 WildFly Maven Plugin - wildfly:deploy
公式サイトではないですが、リモートサーバーへデプロイする際のpom.xmlの例はこちら。 Configuring Maven WildFly plugin
実際のpom.xmlのデプロイ部分はこんな感じ。
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>1.1.0.Alpha1</version> <executions> <execution> <id>deploy</id> <phase>install</phase> <goals> <goal>deploy</goal> </goals> <configuration> <hostname>apppot_runtime1.7</hostname> <port>9990</port> <name>apppot-1.7-ci-jenkins.war</name> <username>{username}</username> <password>{password}</password> <filename>apppot-1.7-ci-jenkins.war</filename> </configuration> </execution> </executions> </plugin>
deployタスクのconfigurationとして、次を指定しています。
- hostname: Docker Linkした結果、hostsに定義されたホスト名を指定します。
apppot_runtime1.7
- port: WildFlyの管理ポートを指定。アプリケーションサーバーコンテナで、管理ポートをexposeしています
- name: デプロイする名前。warの拡張子を付けてないとだめ。付けてない場合、デプロイタスク自体は成功するけど、WildFly側でいろいろ認識されていなくて動かなかった。特にエラーもでないから調査に時間かかった。
- username: WildFlyにログインするためのアカウント
- password: WildFlyにログインするためのパスワード
- filename: デプロイするwarファイルを指定しています
すごくはまったのは、[ERROR] JBREM000200: Remote connection failed: javax.security.sasl.SaslException: Authentication failed: the server presented no authentication mechanisms
のエラー。
いろなサイトを参考にして、nameだけ指定して、usernameは使っていませんでした。この時に、上のエラーが発生していました。逆にusernameのみを指定しても同じエラーが発生しました。結局、usernameとnameの両方を指定することで、解消しました。参考にしたサイトの人たちはなんで成功していたんだろう・・・。
認証で、こけると何でもこのエラーになるみたいです。
2015/08/21追記
WildFlyの古いバージョンだと、ネイティブ用のポートを使ってデプロイしていて、それだとusernameが不要のようです。 最新のWildFlyだと管理ポートのプロトコルはHTTPで、その場合、usernameが必要なようです。 それで古い記事を参考にしていると駄目だったんだな。