class Kikubari::Deploy::Deployer

Attributes

config[RW]

Public Class Methods

new(config) click to toggle source
# File lib/deployer/deployer.rb, line 19
def initialize(config)
  @config = config
  @logger = Logger.new
end

Public Instance Methods

after_deploy_run() click to toggle source

Run comand line script after deploy

# File lib/deployer/deployer.rb, line 120
def after_deploy_run
  return unless has_after_deploy_run_commands
  out = Array.new
  @logger.head "Executing After Deploy"
  @config.after.run.each do |run_task|
    out.push(execute_shell(run_task) )
  end
  out
end
before_deploy_run() click to toggle source
# File lib/deployer/deployer.rb, line 134
def before_deploy_run
  return unless has_before_deploy_run_commands
  out = Array.new
  @logger.head "Executing Before Deploy"
  @config.before.run.each do |run_task|
    out.push(execute_shell(run_task) )
  end
  out
end
capture_stderr( command ) click to toggle source
# File lib/deployer/deployer.rb, line 153
def capture_stderr ( command )
 stdin, stdout, stderr = Open3.popen3( command )
 ({ :stdout => stdout.readlines.join(""), :stderr => stderr.readlines.join("") })
end
create_deploy_structure() click to toggle source

Create deployment structure

# File lib/deployer/deployer.rb, line 100
def create_deploy_structure
  create_structure if @config.do.folder_structure
  self
end
create_release_folder() click to toggle source

Create the folder where you will deploy the actual version of the code based on the configuration

# File lib/deployer/deployer.rb, line 40
def create_release_folder
  FileUtils.mkdir_p(@config.env_time_folder) unless File.directory? @config.env_time_folder
  self
end
create_structure() click to toggle source

Create te the folder structure as is in the YAML

# File lib/deployer/deployer.rb, line 27
def create_structure
  @config.do.folder_structure.each_pair do |folder, target_folder|
    unless !target_folder.empty? && File.directory?(@config.deploy_folder.join(folder.to_s))
      @logger.print "Creating Structure folder: #{folder}"
      FileUtils.mkdir_p @config.deploy_folder.join(folder.to_s)
    end
  end
  self
end
create_sylinked_folders() click to toggle source

Create the Symlinked folders

# File lib/deployer/deployer.rb, line 70
def create_sylinked_folders
  @config.do.folder_structure.each_pair do |folder, target_folder|
    next if target_folder.empty?
    @logger.print "- linking: #{@config.env_time_folder}/#{target_folder}"
    raise "Folder: #{@config.env_time_folder.join(target_folder.to_s)} already exists and the symlink can't be created" if File.directory?(@config.env_time_folder.join(target_folder.to_s))
    create_symlink( @config.deploy_folder.join(folder.to_s), @config.env_time_folder.join(target_folder.to_s) )
  end
  self
end
create_symlinked_files() click to toggle source
# File lib/deployer/deployer.rb, line 89
def create_symlinked_files
  @config.do.link_files.each_pair do |source, target|
    @logger.print "- linking: #{@config.env_time_folder.join(target.to_s)}"
    FileUtils.ln_s(@config.deploy_folder.join(source.to_s), @config.env_time_folder.join(target.to_s))
  end
end
deploy() click to toggle source

Execute the deploy

# File lib/deployer/deployer.rb, line 161
def deploy
    before_deploy_run
  @logger.head "Executing Deploy"
  test_files  if @config.do.test_files
    do_deploy
  create_sylinked_folders
  create_symlinked_files if @config.do.link_files
  create_current_symlink_folder
  rotate_folders
    after_deploy_run
  self
end
execute_shell(command) click to toggle source
# File lib/deployer/deployer.rb, line 144
def execute_shell(command)
  @logger.run(command, @config.env_time_folder)
  temp = capture_stderr "cd #{@config.env_time_folder.to_s.strip} && #{command} "
  @logger.result(temp[:stdout]) if temp[:stdout] != ""
  @logger.error(temp[:stderr]) if temp[:stderr] != ""
  temp
end
has_after_deploy_run_commands() click to toggle source
# File lib/deployer/deployer.rb, line 113
def has_after_deploy_run_commands
  @config.after && @config.after.run && !@config.after.run.empty?
end
has_before_deploy_run_commands() click to toggle source
# File lib/deployer/deployer.rb, line 130
def has_before_deploy_run_commands
  @config.before && @config.before.run && !@config.before.run.empty?
end
rotate_folders() click to toggle source

Rotate old version folders

# File lib/deployer/deployer.rb, line 108
def rotate_folders
  DeployDir.rotate_folders( @config.environment_folder , @config.config.history_limit )
end
test_files() click to toggle source

Test if selected file already exist

# File lib/deployer/deployer.rb, line 58
def test_files
  @config.do.link_files.each_pair do |source, target|
    unless File.exist? @config.deploy_folder.join(source.to_s)
      raise ArgumentError, "Please verify this file exist: #{@config.deploy_folder.join(source.to_s)}"
    end
  end
  self
end

Private Instance Methods

do_deploy() click to toggle source
# File lib/deployer/deployer.rb, line 176
def do_deploy
  raise "This is an abstract method, implement this method in your deployer"
end