なにか作る

なにかを作るブログです。

Gradle から Cargo を使用して Wildfly への Java EE アプリケーションのデプロイを自動化する

目的

前に書いた記事とかぶってるけど、プラグインのバージョンが上がっていたのもあってもう一度。

Jenkins を使って継続的ビルドを行うのはいいけど、ビルドだけでは物足りない。やはりビルドしたからにはデプロイまで行いたい。Jenkins には Deploy Plugin があるけれど、WildFly には対応していない。というわけで、Deploy Plugin のベースともなっている Cargo を使用してデプロイの自動化を行おうと思う。

まあ、継続的インテグレーションとか考えないまでも、コマンド一発でデプロイが行えるのは魅力的なはず。

動作環境

ビルドスクリプト

build.gradle

apply plugin: war

apply {
  from 'gradle/cargo.gradle'
}

def javaVersion = 1.8
def defaultEncoding = 'UTF-8'

sourceCompatibility = javaVersion
targetCompatibility = javaVersion
tasks.withType(AbstractCompile) each { it.options.encoding = defaultEncoding }

webAppDirName = 'WebContent'

repositories {
  mavenCentral()
}

dependencies {
  providedCompile 'javax:javaee-api:7.0'
}

buildscript {
  repositories {
    jcenter()
  }

  dependencies {
    classpath 'com.bmuschko:gradle-cargo-plugin:2.0.3'
  }
}
  • これ自体は割と最小限な設定。一応、cargo の設定は別ファイルに分けてみた。
  • buildscript に gradle-cargo-plugin を指定しておく。

gradle/caro.gradle

apply plugin: 'com.bmuschko.cargo-base'

dependencies {
  def cargoVersion = '1.4.5'
  cargo "org.codehaus.cargo:cargo-core-uberjar:$cargoVersion",
        "org.codehaus.cargo:cargo-ant:$cargoVersion"
  cargo "org.wildfly:wildfly-controller-client:8.2.0.Final"
}

cargo {
  containerId = 'wildfly8x'

  remote {
    hostname = 'localhost'
    username = 'admin'
    password = 'password'
  }
}
  • 今回は既に起動済みのリモートの WildFly にデプロイする設定を行った。
  • 理由はわからないけれど、Cargo のバージョンを指定する必要あり。外すとエラーになってしまった。
  • リモートで接続するには wildfly-controller-client を依存性に追加する必要あり。

Jenkins

あとは Gradle Cargo plugin で規定されたタスクを呼び出すだけ。

remote で設定を行ったので使えるのは以下の 3 つ。

  • cargoDeployRemote : デプロイする。
  • cargoUndeployRemote : デプロイやめる。
  • cargoRedeployRemote : 再デプロイする。

f:id:ptiringo:20150216234651p:plain

※画像は Gradle plugin を使用。

参考リンク