from time import sleep
from fabric.api import run,env,execute
from fabric.operations import local
from fabric.context_managers import shell_env,cd
env.catalina_home="/Users/javajigi/my-workspace/apache-tomcat-7.0.34"
env.releases_path="/Users/javajigi/python-workspace/fabric/releases"
env.hosts=['localhost']
env.git_clone="https://github.com/javajigi/slipp-user.git"
env.java_opts="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms128m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+DisableExplicitGC"
def hostname():
local('uname -a')
def pid_by_name():
run('ps -ef | grep tomcat | grep -v \'grep\' | awk \'{print $2}\'')
def releases():
"""List a releases made"""
env.releases = sorted(run('ls -x %(releases_path)s' % { 'releases_path':env.releases_path }).split())
if len(env.releases) >= 1:
env.current_revision = env.releases[-1]
env.current_release = "%(releases_path)s/%(current_revision)s" % { 'releases_path':env.releases_path, 'current_revision':env.current_revision }
if len(env.releases) > 1:
env.previous_revision = env.releases[-2]
env.previous_release = "%(releases_path)s/%(previous_revision)s" % { 'releases_path':env.releases_path, 'previous_revision':env.previous_revision }
def checkout():
local("git pull")
# run("cd %(releases_path)s; git clone -q -o deploy --depth 1 %(git_clone)s %(current_release)s" % { 'releases_path':env.releases_path, 'git_clone':env.git_clone, 'current_release':env.current_release })
def build():
execute(checkout)
local('mvn clean package')
def start():
with shell_env(
CATALINA_HOME=env.catalina_home,
JAVA_OPTS=env.java_opts
):
run('%(catalina_home)s/bin/startup.sh' % {'catalina_home':env.catalina_home}) # tomcat instance start
def stop():
run('%(catalina_home)s/bin/shutdown.sh' % {'catalina_home':env.catalina_home}) # tomcat instance stop
print('Wait until die')
trial = 0
max_trial = 10
pid_commands = 'ps -ef | grep tomcat | grep -v \'grep\' | awk \'{print $2}\''
while trial < max_trial:
print('%(remain_seconds)s seconds remained' % {'remain_seconds':(max_trial - trial)})
if not run(pid_commands):
break
trial += 1
sleep(1)
if trial == max_trial:
print('killing catalina')
run('kill -9 %(running_catalina_pid)s' % {'running_catalina_pid':run(pid_commands)})
def restart():
execute(stop)
execute(start)
def mkreleasedir():
"""Checkout code to the remote servers"""
from time import time
env.current_release = "%(releases_path)s/%(time).0f" % { 'releases_path':env.releases_path, 'time':time() }
run("mkdir %(current_release)s" % {'current_release':env.current_release})
def copy():
execute(mkreleasedir)
local('scp ./target/slipp-user-1.0.0.war javajigi@localhost:%(current_release)s/ROOT.war' % {'current_release':env.current_release}) # file copy
def unwar():
if not env.has_key('current_release'):
releases()
with cd (env.current_release):
run('jar -xvf ROOT.war; rm -rf ROOT.war')
def symboliclink():
if not env.has_key('current_release'):
releases()
run("ln -nfs %(current_release)s %(catalina_home)s/webapps/ROOT" % { 'current_release':env.current_release, 'catalina_home':env.catalina_home })
def deploy():
execute(build)
execute(copy)
execute(unwar)
execute(stop)
execute(symboliclink)
execute(start)