LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

gradleをつかってtomcatに楽々デプロイ

Last updated at Posted at 2015-12-21

はじめに

せっかくgradleちゃんを使っているので、ワンクリックでデプロイまでやっていきたいよねってことでbuild.gradleをちょっと手を加えます

プラグインの設定

準備としてdependencies にorg.hidetake:gradle-ssh-pluginと
apply pluginにはorg.hidetake.sshを追加してください

build.gradle
    dependencies {
        //リモートサーバ操作
        classpath('org.hidetake:gradle-ssh-plugin:0.4.5')
    }

②  apply plugin: 'org.hidetake.ssh' //リモートサーバ操作

リモート接続方法

ほとんどの場合、デプロイ先はどっかのAPサーバだと思うのでSSHでのログインの設定。

build.gradle
// Deploy to web server
remotes {
    web01 {
        host = 'XX.XXX.XXX.XX'
        user = 'ec2-user'
        knownHosts = allowAnyHosts
        identity = file('src/main/resources/jointv-dev.pem')
    }
}

今回はec2上に置いたのでfileにpemさんを指定しておきます。
knownHosts は コンソールで初めてログインするときに聞かれるあれ。今回はなんでもありにします。

デプロイタスク

SSHでログイン後、
1.WARをアップロードして
2.tomcatを停止して
3.元のファイルファイルを消して
4.アップロードしたファイルを移動させて
5.tomcatをスタートして
6.履歴管理

build.gradle
task deployWar(dependsOn: 'war')<<{
    def tomcatHome = '/var/lib/tomcat8/webapps'
    def localHome = '/home/ec2-user'
    def warName = 'ROOT'
    def historyDeloyName ="${localHome}/${warName}.war"+getDate()
    ssh.run {
        settings {
            pty = true
        }
        session(remotes.web01) {
            //アップロード
            println "Uploading  ${localHome}/${warName}.war"
            //日付で履歴管理
            put(war.archivePath.absolutePath,"${localHome}/${warName}.war")
            //所有者の変更
            println "chenge ownner"
            executeSudo("chown tomcat:tomcat ${localHome}/${warName}.war")
            println "tomcat service stop"
            executeSudo("sudo service tomcat8 stop")
            println "delete deployed war"
            executeSudo("rm -fr ${tomcatHome}/${warName}")
            executeSudo("rm -fr ${tomcatHome}/${warName}.war")
            //転送したwarをコピーする
            executeSudo("cp ${localHome}/${warName}.war ${tomcatHome}/")
            println "tomcat service start"
            executeSudo("sudo service tomcat8 start")
            //履歴を作成
            executeSudo("mv ${localHome}/${warName}.war ${historyDeloyName}")
        }
    }
}

履歴管理

ただ日付を付けているだけです。S3におくのはまた今度

build.gradle
//date
def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmmss')
    return formattedDate
}

今日のひとこと

gradle。。なんでいままで使わなかったのだろ。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up