class Docman::Deployers::Deployer
Attributes
build_results[RW]
docroot_config[RW]
versions[RW]
Public Class Methods
create(params, context = nil, caller = nil)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 17 def self.create(params, context = nil, caller = nil) c = @@deployers[params['handler']] if c c.new(params, context, caller, 'deployer') else raise "Bad deployer type: #{type}" end end
new(params, context = nil, caller = nil, type = nil)
click to toggle source
Calls superclass method
Docman::Command::new
# File lib/docman/deployers/deployer.rb, line 30 def initialize(params, context = nil, caller = nil, type = nil) super(params, context, caller, type) @docroot_config = caller.docroot_config @builded = [] @build_results = {} @versions = {} end
register_deployer(name)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 26 def self.register_deployer(name) @@deployers[name] = self end
Public Instance Methods
build()
click to toggle source
# File lib/docman/deployers/deployer.rb, line 137 def build if self['name'].nil? build_recursive else build_dir_chain(@docroot_config.info_by(self['name'])) end end
build_dir(info)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 166 def build_dir(info) return if @builded.include? info['name'] info.state_name = self['state'] builder = Docman::Builders::Builder.create(self['builders'][info['type']], info, self) build_result = builder.perform logger.info '-------------------------------------------------------' @changed = true if build_result @build_results[info['name']] = build_result ? build_result : 'Not builded' @versions[info['name']] = builder.version @builded << info['name'] # if (build_result) info['children'].sort_by!{|a| a['order']} info['children'].each do |child| build_recursive(child) end # end end
build_dir_chain(info)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 145 def build_dir_chain(info) @docroot_config.chain(info).values.each do |item| item.state_name = self['state'] if item.need_rebuild? build_recursive(item) return else build_dir(item) end end end
build_recursive(info = nil)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 157 def build_recursive(info = nil) info = info ? info : @docroot_config.structure build_dir(info) info['children'].sort_by!{|a| a['order']} info['children'].each do |child| build_recursive(child) end end
config()
click to toggle source
# File lib/docman/deployers/deployer.rb, line 38 def config log 'Configuration started', 'info' unless self['name'].nil? @docroot_config.chain(@docroot_config.info_by(self['name'])).values.each do |info| add_actions(info, info) end else # If no name then "state_*" branch is deployed, e.g. "state_stable" # No actions (hooks) should be performed in this case. # add_actions() end path = @docroot_config.root['full_build_path'] if File.directory?(path) and GitUtil.repo?(path) Dir.chdir path if GitUtil.repo_changed? path GitUtil.reset_repo path end end stored_config_hash = read_version_file_param('config_hash') @config_hash = Docman::Application.instance.config.config_hash @config_yaml = Docman::Application.instance.config.unmutable_config.to_yaml #TODO: need to refactor #TODO: need to check changes in config repo too stored_docroot_config_hash = read_version_file_param('docroot_config_hash') @docroot_config_hash = @docroot_config.config_hash @docroot_config_yaml = @docroot_config.raw_infos.to_yaml if stored_config_hash != @config_hash log 'Forced rebuild as configuration was changed', 'info' filename = File.join(@docroot_config.root['full_build_path'], 'config.yaml') log Diffy::Diff.new(read_file(filename), @config_yaml) if File.file? filename Docman::Application.instance.force = true end if stored_docroot_config_hash != @docroot_config_hash log 'Forced rebuild as docroot configuration was changed', 'info' filename = File.join(@docroot_config.root['full_build_path'], 'docroot_config.yaml') log Diffy::Diff.new(read_file(filename), @docroot_config_yaml) if File.file? filename Docman::Application.instance.force = true end end
deploy()
click to toggle source
# File lib/docman/deployers/deployer.rb, line 91 def deploy filename = 'version.yaml' path = File.join(@docroot_config.root['full_build_path'], filename) version = SecureRandom.hex write_version_file version, path write_config_file @config_yaml, File.join(@docroot_config.root['full_build_path'], 'config.yaml') write_config_file @docroot_config_yaml, File.join(@docroot_config.root['full_build_path'], 'docroot_config.yaml') run_with_hooks('push') raise 'Files are not deployed' unless files_deployed? version, filename end
describe(type = 'short')
click to toggle source
TODO: need to refactor.
# File lib/docman/deployers/deployer.rb, line 185 def describe(type = 'short') properties_info(['handler']) end
execute()
click to toggle source
# File lib/docman/deployers/deployer.rb, line 81 def execute run_with_hooks('build') if @changed run_with_hooks('deploy') else log 'No changes in docroot', 'info' end log "Deploy results:\n" + @build_results.to_yaml, 'info' end
files_deployed?(version, filename)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 102 def files_deployed?(version, filename) return true unless self['environment'] && (self['environment'].has_key? 'target_checker') params = self['environment']['target_checker'] params['version'] = version params['filename'] = filename Docman::TargetChecker.create(params, self).perform end
read_file(path)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 110 def read_file(path) YAML::load_file(path) rescue log "Error in config file #{path}" return false end
read_version_file_param(param)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 117 def read_version_file_param(param) path = File.join(@docroot_config.root['full_build_path'], 'version.yaml') return false unless File.file?(path) content = read_file(path) content[param] if content.has_key? param end
write_config_file(config, path)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 133 def write_config_file(config, path) File.open(path, 'w') {|f| f.write config} end
write_version_file(version, path)
click to toggle source
# File lib/docman/deployers/deployer.rb, line 124 def write_version_file(version, path) to_write = Hash.new to_write['random'] = version to_write['config_hash'] = @config_hash to_write['docroot_config_hash'] = @docroot_config_hash to_write.deep_merge! @versions File.open(path, 'w') {|f| f.write to_write.to_yaml} end