set :stages, %w(dev_eventmgr_env2)
set :default_stage, "dev_eventmgr_env2"
require 'capistrano/ext/multistage'
require 'warbler'
dir = Dir.pwd
end_position = dir.reverse.index("/") - 1
directory_name = (dir.reverse[0..end_position]).reverse
set :sudo_user, 'tcserver'
set :tcserver_home, '/opt/tcserver262'
set :deploy_to, "/webapps/apps"
set :deploy_config, "/webapps/config"
set :project, "eventmgr"
set :deploy_via, :copy
set :use_sudo, false
set :releases_directory, "./tmp/releases"
set :individual_release, "release_#{release_name}"
set :checkout_directory, "./tmp/checkout"
set :scm, :none
set :repository, "#{releases_directory}/#{individual_release}"
#deployment tasks
before "tcserver:stop", "log:time"
before "jruby:deploy", "tcserver:stop"
before "deploy:checkout", "jruby:create_release_directory"
before "jruby:move_war", "deploy:checkout"
before "jruby:deploy", "jruby:move_war"
after "jruby:deploy", "tcserver:start"
after "tcserver:start", "log:time"
namespace :log do
desc 'log time'
task :time do
now = Time.now
puts " [info :: #{now}]"
end
end
namespace :deploy do
desc 'checkout from SVN repository'
task :checkout do
system("rm -rf #{checkout_directory}")
end
end
namespace :jruby do
desc 'copy code from local to remote server'
task :deploy do
servers = roles[:web].servers
servers.each do |server|
puts " [info :: deleting war - #{deploy_to}/#{project_target}.war]"
run "rm -f #{deploy_to}/#{project_target}.war"
puts " [info :: deleting deployed app directory - #{deploy_to}/#{project_target}]"
run "rm -rf #{deploy_to}/#{project_target}"
puts " [info :: scp war from-to #{repository}/#{project}.war #{user}@#{server}:#{deploy_to}/#{project_target}.war]"
system "scp #{repository}/#{project}.war #{user}@#{server}:#{deploy_to}/#{project_target}.war"
run "chmod 775 #{deploy_to}/#{project_target}.war"
puts "info :: create #{project_target} directories"
run "mkdir #{deploy_to}/#{project_target}"
run "chmod 775 #{deploy_to}/#{project_target}"
run "mv #{deploy_to}/#{project_target}.war #{deploy_to}/#{project_target}/#{project_target}.war"
puts "info :: explode war file to #{deploy_to}/#{project_target} directory"
run "cd #{deploy_to}/#{project_target} ; /usr/bin/jar xf #{deploy_to}/#{project_target}/#{project_target}.war"
puts "info :: create version.txt in #{deploy_to}/#{project_target} directory"
run "echo Label: #{label} Date: `date` > #{deploy_to}/#{project_target}/version.txt"
run "chmod 775 -R #{deploy_to}/#{project_target}"
run "rm #{deploy_to}/#{project_target}/#{project_target}.war"
puts " [info :: scp completed"
end
end
desc 'builds a project and checks into svn'
task :build do
puts " [info :: Cleaning assets]"
system "jruby -S rake assets:clean"
puts " [info :: Precompiling assets - this may take a while...]"
system "jruby -S rake assets:precompile"
puts " [info :: creating war]"
system "jruby -S warble"
puts " [info :: removing old checkout directory]"
system("rm -rf #{checkout_directory}")
puts " [info :: creating checkout directory]"
system("mkdir #{checkout_directory}")
puts " [info :: checking out #{project}/trunk/#{project}.war]"
puts " [info :: deleting old #{project}.war]"
system("rm -f ./#{checkout_directory}/#{project}.war")
puts " [info :: moving new #{project}.war to checkout directory]"
system "mv ./#{project}.war #{checkout_directory}/#{project}.war"
puts " [info :: committing new #{project}.war]"
system("svn commit ./#{checkout_directory}/#{project}.war -m 'committing new #{project}.war file'")
puts " [info :: creating release tag directory]"
puts " [info :: tagging #{project}.war with label: #{label}]"
puts " [info :: cleaning up]"
puts " [info :: removing checkout dir and contents]"
system("rm -rf #{checkout_directory}")
puts " [info :: Cleaning up assets]"
system "jruby -S rake assets:clean"
puts " [info :: build complete - #{project}.war with label #{label}]"
end
desc 'create war'
task :create_war do
puts " [info :: creating war]"
system "jruby -S bundle exec warble"
end
desc 'precompile assets'
task :precompile_assets do
puts " [info :: Cleaning assets]"
system "jruby -S rake assets:clean"
puts " [info :: Precompiling assets]"
system "jruby -S rake assets:precompile"
end
desc 'move war to release directory'
task :move_war do
puts " [info :: moving war to #{releases_directory}#{individual_release}]"
system "mv ./tmp/checkout/#{project}.war #{releases_directory}/#{individual_release}/#{project}.war"
end
desc 'create release directory'
task :create_release_directory do
puts " [info :: creating releases directory - #{releases_directory}]"
system("mkdir ./tmp")
system("rm -rf #{releases_directory}")
system("mkdir #{releases_directory}")
puts " [info :: creating individual release directory - #{releases_directory}/#{individual_release}]"
system("mkdir #{releases_directory}/#{individual_release}")
end
end
namespace :tcserver do
desc "start tcserver"
task :start do
#run "#{tcserver_home}/bin/tcruntime-ctl.sh start"
run "sudo -u #{sudo_user} #{tcserver_home}/tcruntime-ctl.sh #{tcserver_instance} start -n /lclapps/tcserver"
end
desc "stop tcserver"
task :stop do
begin
#run "#{tcserver_home}/bin/tcruntime-ctl.sh stop"
run "sudo -u #{sudo_user} #{tcserver_home}/tcruntime-ctl.sh #{tcserver_instance} stop -n /lclapps/tcserver"
rescue Exception => e
puts " [info :: couldn't stop tcserver - but that's ok, it probably wasn't running]"
end
end
desc "stop and start tcserver"
task :restart do
tcserver.stop
puts " [info :: sleeping before starting tcserver]"
sleep 5
tcserver.start
end
desc "tail :tcserver_home/logs/*.log and logs/catalina.out"
task :tail do
stream "tail -f #{tcserver_home}/logs/*.log #{tcserver_home}/logs/catalina.out"
end
end
namespace :tomcat do
desc "start tomcat"
task :start do
run "#{tomcat_home}/bin/startup.sh"
end
desc "stop tomcat"
task :stop do
run "#{tomcat_home}/bin/shutdown.sh"
end
desc "stop and start tomcat"
task :restart do
tomcat.stop
puts " [info :: sleeping before starting tomcat]"
sleep 5
tomcat.start
end
desc "tail :tomcat_home/logs/*.log and logs/catalina.out"
task :tail do
stream "tail -f #{tomcat_home}/logs/*.log #{tomcat_home}/logs/catalina.out"
end
end