GradleによるTomcatサーバへのデプロイ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

本日は、JavaのWebアプリケーションをTomcatの動くEC2インスタンスへGradleを利用してデプロイする小ネタを紹介します。

EC2インスタンスの準備

はじめにTomcat(Tomcat8)が動作するEC2インスタンスを準備します。 Amazon Linuxを起動し、以下のスクリプトを流すか、UserDataに指定して起動してください。

#!/bin/bash -v
yum -y update
yum -y install java-1.8.0-openjdk-devel tomcat8
yum -y remove  java-1.7.0-openjdk
chkconfig tomcat8 on
service tomat8 start

※現在のAmazon LinuxではデフォルトでJava7のJREのみがインストールされています(Amazon LinuxでJava8/Tomcat8の環境を構築する

なお、今回はEIPを持つサーバとします。

Gradle

Gradle SSH pluginを使い、次のようにタスクを設定しましょう。

// build.gradle から抜粋 apply plugin: 'org.hidetake.ssh'

buildscript { repositories { mavenCentral() jcenter() } dependencies { classpath 'org.hidetake:gradle-ssh-plugin:0.4.5' } }

// Deploy to web server // https://gradle-ssh-plugin.github.io/ remotes { prd01 { host = 'X.X.X.X' user = 'ec2-user' knownHosts = allowAnyHosts identity = file('key.pem') } prd02 { host = 'X.X.X.X' user = 'ec2-user' knownHosts = allowAnyHosts identity = file('key.pem') } }

task deployPrd(dependsOn: 'war') << { ssh.run { settings { pty = true } session([remotes.prd01, remotes.prd02]) { put war.archivePath.path, '/tmp/' executeSudo 'service tomcat8 stop' executeSudo "rm -rf /usr/share/tomcat8/webapps/ROOT" executeSudo "mv /tmp/${war.archiveName} /usr/share/tomcat8/webapps/ROOT.war" executeSudo 'service tomcat8 start' } } } [/groovy]

特に難しい点はないかと思います。 ここではコンテキストパスをルートにするため、warファイルの名前をROOT.warに変更していますが、サーバにWARを転送し、tomcatのwebappにwarファイルを配置し、再起動するだけです。 ステージング環境がある場合でも大きく変わらないでしょう。

まとめ

デプロイは可能な限り自動化しましょう。

2014.12.01追記

コメント欄で指摘があったので編集しました!ありがとうございます。