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_current_symlink_folder()
click to toggle source
Create the current symlink to the deploy version folder
# File lib/deployer/deployer.rb, line 48 def create_current_symlink_folder FileUtils.rm_f(@config.current_deploy_folder) if File.symlink?(@config.current_deploy_folder) FileUtils.ln_s @config.env_time_folder, @config.current_deploy_folder self 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_symlink( folder, target_folder )
click to toggle source
Execute creation of symlinked folder
# File lib/deployer/deployer.rb, line 83 def create_symlink( folder, target_folder ) raise ArgumentError , "Origin folder #{folder} is not a valid folder" unless File.directory?(folder) FileUtils.ln_s folder, target_folder 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