class Kontena::Cli::Stacks::BuildCommand
Public Instance Methods
build_docker_image(service)
click to toggle source
@param [Hash] service @return [Integer]
# File lib/kontena/cli/stacks/build_command.rb, line 73 def build_docker_image(service) dockerfile = dockerfile = service['build']['dockerfile'] || 'Dockerfile' build_context = service['build']['context'] cmd = ['docker', 'build', '-t', service['image']] cmd << ['-f', File.join(File.expand_path(build_context), dockerfile)] if dockerfile != "Dockerfile" cmd << '--no-cache' if no_cache? cmd << '--pull' unless no_pull? cmd.unshift('sudo') if sudo? args = service['build']['args'] || {} args.each do |k, v| cmd << "--build-arg=#{k}=#{v}" end cmd << build_context ret = system(*cmd.flatten) raise ("Failed to build image #{pastel.cyan(service['image'])}") unless ret ret end
build_docker_images(services)
click to toggle source
@param [Hash] services
# File lib/kontena/cli/stacks/build_command.rb, line 45 def build_docker_images(services) services.each do |service| if service['build'] dockerfile = service['build']['dockerfile'] || 'Dockerfile' abort("'#{service['image']}' is not valid Docker image name") unless valid_image_name?(service['image']) abort("'#{service['build']['context']}' does not have #{dockerfile}") unless dockerfile_exist?(service['build']['context'], dockerfile) if service['hooks'] && service['hooks']['pre_build'] puts pastel.cyan("Running pre_build hook") run_pre_build_hook(service['hooks']['pre_build']) end puts "Building image #{pastel.cyan(service['image'])}" build_docker_image(service) end end end
dockerfile_exist?(path, dockerfile)
click to toggle source
@param [String] path @param [String] dockerfile @return [Boolean]
# File lib/kontena/cli/stacks/build_command.rb, line 111 def dockerfile_exist?(path, dockerfile) file = File.join(File.expand_path(path), dockerfile) File.exist?(file) end
execute()
click to toggle source
# File lib/kontena/cli/stacks/build_command.rb, line 28 def execute set_env_variables(stack_name, current_grid) services = stack['services'] unless service_list.empty? services.select! { |service| service_list.include?(service['name']) } end if services.none?{ |service| service['build'] } abort pastel.red('Not found any service with a build option') end build_docker_images(services) push_docker_images(services) unless no_push? end
push_docker_image(image)
click to toggle source
@param [String] image @return [Integer]
# File lib/kontena/cli/stacks/build_command.rb, line 94 def push_docker_image(image) cmd = ['docker', 'push', image] cmd.unshift('sudo') if sudo? ret = system(*cmd) raise ("Failed to push image #{pastel.cyan(image)}") unless ret ret end
push_docker_images(services)
click to toggle source
@param [Hash] services
# File lib/kontena/cli/stacks/build_command.rb, line 62 def push_docker_images(services) services.each do |service| if service['build'] puts "Pushing image #{pastel.cyan(service['image'])}" push_docker_image(service['image']) end end end
run_pre_build_hook(hook)
click to toggle source
@param [Hash] hook
# File lib/kontena/cli/stacks/build_command.rb, line 117 def run_pre_build_hook(hook) hook.each do |h| ret = system(h['cmd']) raise ("Failed to run pre_build hook: #{h['name']}!") unless ret end end
valid_image_name?(name)
click to toggle source
@param [String] name @return [Boolean]
# File lib/kontena/cli/stacks/build_command.rb, line 104 def valid_image_name?(name) !(/\A[\w.\/\-:]+:?+[\w+.]+\z/ =~ name).nil? end