読者です 読者をやめる 読者になる 読者になる

ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

Gradleを使ってTomcatサーバーへのデプロイ作業を自動化

Gradle

antやmavenを使い倒した人には何でもないことなんだろうけれども便利だと思ったのでメモ。
あえてTomcat7を使用した。

まずは対象のTomcatサーバーに以下のURLでログインできるようにしておく。
($TOMCAT_HOME/conf/tomcat-users.xmlを編集して、適当なロールとユーザーを追加する。)

以下のような設定を追記した。

  • ロール:manager
  • ユーザー名・パスワード:manager-script

tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <user username="manager-script" password="manager-script" roles="manager"/>
</tomcat-users>

設定後はTomcatサーバーを起動して以下のURLでログインできることを確認する。
Tomcatサーバーのホスト名は "testserver" とする。)

http://testserver:8080/manager


次にbuild.gradleの編集。
以下のような設定を追記する。
xxxxxxの部分には、デプロイ対象のアプリケーション名を指定する。

build.gradle

apply plugin: "groovy"
apply plugin: "war"

version = "1.0.0"

configurations {
    catalinaAnt
}

dependencies {
	catalinaAnt "org.apache.tomcat:tomcat-catalina-ant:7.0.0"

	// 以下省略
}

def url = "http://testserver:8080/manager"
def path = "/xxxxxx"
def user = project.properties['user']
def password = project.properties['password']
task tomcatStop << {
	ant.taskdef(
		'name':"stop", 'classname':"org.apache.catalina.ant.StopTask", 'classpath':configurations.catalinaAnt.asPath 
	)
	ant.stop( 'username':user, 'path':path, 'password':password, 'url':url )
}
task tomcatStart << {
	ant.taskdef(
		'name':"start", 'classname':"org.apache.catalina.ant.StartTask", 'classpath':configurations.catalinaAnt.asPath 
	)
	ant.start( 'username':user, 'path':path, 'password':password, 'url':url )
}
task tomcatReload(dependsOn:[clean, war]) << {
	ant.taskdef(
		'name':"reload", 'classname':"org.apache.catalina.ant.ReloadTask", 'classpath':configurations.catalinaAnt.asPath 
	)
	ant.reload( 'username':user, 'path':path, 'password':password, 'url':url )
}
task tomcatList << {
	ant.taskdef(
		'name':"list", 'classname':"org.apache.catalina.ant.ListTask", 'classpath':configurations.catalinaAnt.asPath 
	)
	ant.list( 'username':user, 'password':password, 'url':url )
}
task tomcatDeploy(dependsOn:[clean, war]) << {
	ant.taskdef(
		'name':"deploy", 'classname':"org.apache.catalina.ant.DeployTask", 'classpath':configurations.catalinaAnt.asPath 
	)
	ant.deploy( 'username':user, 'path':path, 'password':password, 'url':url, 'war':"$rootDir/build/libs/xxxxxx-1.0.0.war" )
}
task tomcatUndeploy << {
	ant.taskdef(
		'name':"undeploy", 'classname':"org.apache.catalina.ant.UndeployTask", 'classpath':configurations.catalinaAnt.asPath
	)
	ant.undeploy( 'username':user, 'path':path, 'password':password, 'url':url )
}

build.gradleが用意できたらデプロイを試してみる。

$ gradle war

これでxxxxxx-1.0.0.warがbild/libsフォルダ以下に作成される。
その後以下のコマンドを実行すれば、Tomcatサーバーにwarファイルがデプロイされる。
user、passwordプロパティにはtomcat-users.xmlに設定したユーザー名、パスワードを入力する。

$ gradle -Puser=manager-script -Ppassword=manager-script tomcatDeploy

上記コマンドを一度で実行してもいける。

$ gradle -Puser=manager-script -Ppassword=manager-script war tomcatDeploy

以下のURLにアクセスし、正しくデプロイされていることを確認する。

http://testserver/xxxxxx/

課題

xxxxxxの部分は、Gradle実行中のプロジェクト名と同じため、Gradleのプロパティから取得できそう。1.0.0というバージョン部分もbuild.gradleの上部に記述しているのでこれを参照するようにしたい。