class Revup::DeployTask
Constants
- DEFAULT_TO_CLASS_ATTRS
Attributes
app_dir[RW]
files[RW]
files_root[RW]
host[RW]
local_tmp_dir[RW]
logger[RW]
remote_setup[RW]
remote_tmp_dir[RW]
revision[RW]
task_name_and_prerequisites[RW]
user[RW]
versioned_asset_name[RW]
Public Class Methods
new(task_name_and_prerequisites) { |self| ... }
click to toggle source
# File lib/revup/deploy_task.rb, line 41 def initialize(task_name_and_prerequisites) DEFAULT_TO_CLASS_ATTRS.each do |attr| send("#{attr}=", self.class.send(attr)) end @task_name_and_prerequisites = task_name_and_prerequisites @versioned_asset_name = task_name @revision ||= begin result = sh("git rev-parse --short HEAD 2>&1") result unless result.empty? end yield self if block_given? define end
Public Instance Methods
archive_basename()
click to toggle source
# File lib/revup/deploy_task.rb, line 58 def archive_basename "#{versioned_asset_name}-#{revision}" end
cleanup!()
click to toggle source
# File lib/revup/deploy_task.rb, line 122 def cleanup! sh "rm -f '#{local_archive_path}'" ssh "rm -f '#{remote_archive_path}'" ssh "rm -rf '#{remote_archive_dir}'" end
create_archive()
click to toggle source
# File lib/revup/deploy_task.rb, line 99 def create_archive sh "mkdir -p '#{local_tmp_dir}'" sh "tar -C '#{files_root}' -zcf '#{local_archive_path}' '#{files.sort.join("' '")}'" end
define()
click to toggle source
Actual task definition
# File lib/revup/deploy_task.rb, line 76 def define task(task_name_and_prerequisites) do deploy end Rake::Task[task_name].add_description("Deploy build of the `#{versioned_asset_name}' versioned_asset") end
deploy()
click to toggle source
# File lib/revup/deploy_task.rb, line 83 def deploy validate files_root, "Please specify the location of the root of the files that should be deployed." validate files, "Please specify a list of files that should be deployed." validate host, "Please specify the host of the machine to deploy to." validate user, "Please specify the user of the machine to deploy to." validate app_dir, "Please specify the path to the application." validate revision, "Please specify the Git revision hash." create_archive upload_and_register rescue Object => e logger.error("#{e.message}\n\t#{e.backtrace.join("\n\t")}") raise e end
local_archive_path()
click to toggle source
# File lib/revup/deploy_task.rb, line 62 def local_archive_path File.join(local_tmp_dir, "#{archive_basename}.tgz") end
remote_archive_dir()
click to toggle source
# File lib/revup/deploy_task.rb, line 70 def remote_archive_dir File.join(remote_tmp_dir, archive_basename) end
remote_archive_path()
click to toggle source
# File lib/revup/deploy_task.rb, line 66 def remote_archive_path File.join(remote_tmp_dir, "#{archive_basename}.tgz") end
upload_and_register()
click to toggle source
# File lib/revup/deploy_task.rb, line 104 def upload_and_register Net::SSH.start(host, user) do |connection| @ssh = connection ssh "mkdir -p '#{remote_archive_dir}'" # Upload archive logger.info("Transferring `#{local_archive_path}' to `#{host}:#{remote_archive_path}'") @ssh.scp.upload!(local_archive_path, remote_archive_path) # Unpack archive ssh "tar -C '#{remote_archive_dir}' -zxf '#{remote_archive_path}'" # Register revision ssh "cd '#{app_dir}' && /usr/local/rbenv/shims/bundle exec ./script/register_versioned_asset_revision '#{remote_archive_dir}' '#{versioned_asset_name}' '#{revision}'" cleanup! end @ssh = nil end
Private Instance Methods
sh(cmd)
click to toggle source
# File lib/revup/deploy_task.rb, line 139 def sh(cmd) logger.info("[local] executing: #{cmd}") result = `#{cmd} 2>&1`.strip raise "Failed to execute: #{result}" unless $?.success? logger.info("[local] output: #{result}") unless result.empty? result end
ssh(cmd)
click to toggle source
# File lib/revup/deploy_task.rb, line 147 def ssh(cmd) cmd = "#{remote_setup}; #{cmd}" if remote_setup logger.info("[remote] executing: #{cmd}") if result = @ssh.exec!(cmd) logger.info("[remote] output: #{result}") end end
task_name()
click to toggle source
# File lib/revup/deploy_task.rb, line 130 def task_name task_name_and_prerequisites.is_a?(Hash) ? task_name_and_prerequisites.keys.first : task_name_and_prerequisites end
validate(value, message)
click to toggle source
# File lib/revup/deploy_task.rb, line 135 def validate(value, message) raise message if value.nil? || value.empty? end