class Percheron::Actions::Build
Attributes
exec_scripts[R]
exec_scripts?[R]
forcerm[R]
forcerm?[R]
unit[R]
usecache[R]
usecache?[R]
Public Class Methods
new(unit, usecache: true, forcerm: false, exec_scripts: true)
click to toggle source
# File lib/percheron/actions/build.rb, line 6 def initialize(unit, usecache: true, forcerm: false, exec_scripts: true) @unit = unit @usecache = usecache @forcerm = forcerm @exec_scripts = exec_scripts end
Public Instance Methods
execute!()
click to toggle source
# File lib/percheron/actions/build.rb, line 13 def execute! results = [] if unit.buildable? results << write_out_temp_dockerfile! results << build! end results.compact.empty? ? nil : unit end
Private Instance Methods
build!()
click to toggle source
# File lib/percheron/actions/build.rb, line 66 def build! in_working_directory(base_dir) do execute_pre_build_scripts! $logger.info "Building '#{unit.image_name}' image" Connection.perform(Docker::Image, :build_from_dir, base_dir, options) do |out| $logger.info '%s' % [ extract_content(out) ] end end ensure remove_temp_dockerfile! end
dockerfile()
click to toggle source
# File lib/percheron/actions/build.rb, line 38 def dockerfile temp_dockerfile.basename.to_s end
execute_pre_build_scripts!()
click to toggle source
# File lib/percheron/actions/build.rb, line 84 def execute_pre_build_scripts! return nil if !exec_scripts? && unit.pre_build_scripts.empty? ExecLocal.new(unit, unit.pre_build_scripts, 'PRE build').execute! end
extract_content(out)
click to toggle source
# File lib/percheron/actions/build.rb, line 78 def extract_content(out) json = JSON.parse(out) return '' unless json['stream'] json['stream'].strip end
options()
click to toggle source
# File lib/percheron/actions/build.rb, line 29 def options { 'dockerfile' => dockerfile, 't' => unit.image_name, 'forcerm' => forcerm?, 'nocache' => !usecache? } end
remove_temp_dockerfile!()
click to toggle source
# File lib/percheron/actions/build.rb, line 62 def remove_temp_dockerfile! temp_dockerfile.delete end
temp_dockerfile()
click to toggle source
# File lib/percheron/actions/build.rb, line 42 def temp_dockerfile @temp_dockerfile ||= Pathname.new(temp_dockerfile_name) end
temp_dockerfile_name()
click to toggle source
# File lib/percheron/actions/build.rb, line 46 def temp_dockerfile_name @temp_dockerfile_name ||= begin '%s/%s.%s' % [ unit.dockerfile.expand_path.dirname.to_s, unit.dockerfile.basename.to_s, SecureRandom.urlsafe_base64 ] end end
write_out_temp_dockerfile!()
click to toggle source
# File lib/percheron/actions/build.rb, line 56 def write_out_temp_dockerfile! options = { 'secrets' => Config.secrets, 'userdata' => Config.userdata } content = Liquid::Template.parse(unit.dockerfile.read).render(options) File.open(temp_dockerfile, 'w') { |f| f.write(content) } end