SVNコミット時、JenkinsでWildFlyに自動デプロイ


SVNコミット時、ビルド、デプロイタスクを自動化したい

特に目新しい話ではありませんが、掲題の内容を実現する記事が見当たらなかったので、その方法をメモします。
実行環境には、Java、Maven、Jenkins、Subversion、WildFlyが適切にインストールされているものとします。

環境

以下の環境で試しています。
CentOS 7.3
Java 1.8
WildFly 10.0.0.Final
Maven 3.3.9(WildFly Maven Plugin 1.1.0.Finalを使うには、Maven 3.1.1以上が必要です)
WildFly Maven Plugin 1.1.0.Final
Jenkins 2.46.3
Subversion 1.7.14

WildFly Maven Pluginの導入

mavenからWildFlyへデプロイするために「WildFly Maven Plugin」を導入します。
以下は、pomの記述例です。

pom.xml
<build>
  <plugins>
    <plugin>
      <groupId>org.wildfly.plugins</groupId>
      <artifactId>wildfly-maven-plugin</artifactId>
      <version>1.1.0.Final</version>
      <configuration>
        <hostname>WildFlyが稼動しているサーバのホスト名</hostname>
        <port>WildFlyの管理コンソールのポート番号</port>
        <username>管理コンソールにログインするためのユーザ名</username>
        <password>管理コンソールにログインするためのパスワード</password>
      </configuration>
    </plugin>
  </plugins>
</build>

hostnameのデフォルトは「localhost」なので、同じサーバ上でJenkinsとWildfFlyを動作させている場合、指定する必要はないと思います。また、portのデフォルトは「9990」なので、こちらも変更していなければ指定は不要です。
Configの詳細はここで確認できます

Jenkinsでジョブを作成

SVNコミット時に実行するジョブを作成します。
ジョブで行うことは、SVNからソースをチェックアウト、mavenでビルド、デプロイです。
以下は、ジョブの設定例です。

ソースコード管理

ビルド・トリガ

SVNからジョブを呼び出すために必要な認証トークンを設定します。
トークンは[Jenkins]>[ユーザ名]>[設定]>[APIトークン]から確認できます。

ビルド

まず、「clean install」でビルドして、「wildfly:deploy」でデプロイしています。

SVNのフックスクリプトを作成

SVNコミット時に、上記のジョブを実行するために「post-commit」スクリプトを作成します。
作成したスクリプトに実行権限がないと、
post-commit hook failed (exit code 255) with no output.
みたいなエラーが出るのでご注意を。

$ cd [リポジトリのルートディレクトリ]/hooks/
$ vi post-commit

#!/bin/sh
api_token=TOKEN_NAME

curl https://[ビルドトリガで確認したURL]?token=$api_token

$ chmod 774 post-commit

完了

以上で、SVNにコミットすると、JenkinsでビルドとWildFlyへのデプロイが自動的に行われるようになりました。