class Gantree::Deploy

Attributes

name[R]

Public Class Methods

new(name, options) click to toggle source
# File lib/gantree/deploy.rb, line 12
def initialize name, options
  check_credentials
  set_aws_keys
  @name = name
  @options = options
  @ext = @options[:ext]
  @dockerrun_file = "Dockerrun.aws.json"
  print_options
end

Public Instance Methods

application?() click to toggle source
# File lib/gantree/deploy.rb, line 44
def application?
  results = eb.describe_applications({ application_names: ["#{@name}"]})
  results[:applications].length == 1 ? true : false
end
check_dir_name(envs) click to toggle source
# File lib/gantree/deploy.rb, line 126
def check_dir_name envs
  dir_name = File.basename(Dir.getwd)
  msg = "WARN: You are deploying from a repo that doesn't match #{@app}"
  puts msg.yellow if envs.any? { |env| env.include?(dir_name) } == false
end
check_eb_bucket() click to toggle source
# File lib/gantree/deploy.rb, line 132
def check_eb_bucket
  bucket = set_bucket
  puts "S3 Bucket: #{bucket}".light_blue
  s3.buckets.create(bucket) unless s3.buckets[bucket].exists?
end
create_eb_version() click to toggle source
# File lib/gantree/deploy.rb, line 96
def create_eb_version
  begin
    eb.create_application_version({
      :application_name => "#{@app}",
      :version_label => "#{@packaged_version}",
      :source_bundle => {
        :s3_bucket => "#{set_bucket}",
        :s3_key => "#{@app}-#{@packaged_version}"
      }
    })
  rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue => e
    puts "No Application named #{@app} found #{e}"
  end
end
deploy(envs) click to toggle source
# File lib/gantree/deploy.rb, line 61
def deploy(envs)
  @envs = envs
  check_dir_name(envs) unless @options[:force]
  return if @options[:dry_run]
  version = DeployVersion.new(@options, envs[0])
  @packaged_version = version.run
  puts "packaged_version: #{@packaged_version}"
  upload_to_s3 
  create_eb_version
  update_application(envs)
  if @options[:slack]
    msg = "#{ENV['USER']} is deploying #{@packaged_version} to #{@app} #{@envs.inspect} gantree version #{Gantree::VERSION} "
    msg += "Tag: #{@options[:tag]}" if @options[:tag]
    Notification.new(@options[:slack]).say(msg) unless @options[:silent]
  end
  if @options[:librato]
    puts "Found Librato Key"
    Librato::Metrics.authenticate @options[:librato]["email"], @options[:librato]["token"]
    Librato::Metrics.annotate :deploys, "deploys",:source => "#{@app}", :start_time => Time.now.to_i
    puts "Librato metric submitted" 
  end
  env = @envs.find {|e| e =~ /-app/ }
  if env && @options[:release_notes_wiki] && (prod_deploy? || @options[:release_notes_staging])
    ReleaseNotes.new(@options[:release_notes_wiki], env, @packaged_version).create
    `git tag #{tag}`
    `git push --tags`
  end
  version.clean_up
end
deploy_to_one() click to toggle source
# File lib/gantree/deploy.rb, line 38
def deploy_to_one
  env = @environments.first[:environment_name]
  puts "Found Environment: #{env}".green
  deploy([env])
end
environment?() click to toggle source
# File lib/gantree/deploy.rb, line 50
def environment?
  results = eb.describe_environments({ environment_names: ["#{@name}"]})[:environments]
  if results.length == 0
    puts "ERROR: Environment '#{name}' not found"
    exit 1
  else
    @app = results[0][:application_name]
    return true
  end
end
environment_found?() click to toggle source
# File lib/gantree/deploy.rb, line 34
def environment_found?
  @environments.length >=1 ? true : false
end
generate_eb_bucket() click to toggle source
# File lib/gantree/deploy.rb, line 146
def generate_eb_bucket 
  unique_hash = Digest::SHA1.hexdigest ENV['AWS_ACCESS_KEY_ID']
  "eb-bucket-#{unique_hash}"
end
prod_deploy?() click to toggle source
# File lib/gantree/deploy.rb, line 151
def prod_deploy?
  @envs.first.split("-").first == "prod" 
end
run() click to toggle source
# File lib/gantree/deploy.rb, line 22
def run
  check_eb_bucket
  if application?
    DeployApplication.new(@name,@options).run
  elsif environment?
    puts "Found Environment: #{name}".green
    deploy([name])
  else
    error_msg "You leave me with nothing to deploy".red
  end
end
set_bucket() click to toggle source
# File lib/gantree/deploy.rb, line 138
def set_bucket
  if @options[:eb_bucket]
    bucket = @options[:eb_bucket]
  else
    bucket = generate_eb_bucket
  end
end
update_application(envs) click to toggle source
# File lib/gantree/deploy.rb, line 111
def update_application(envs)
  envs.each do |env|
    begin
      eb.update_environment({
        :environment_name => env,
        :version_label => @packaged_version
      })
      puts "Deployed #{@packaged_version} to #{env} on #{@app}".green
    rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue => e
      puts "Error: Something went wrong during the deploy to #{env}".red
      puts "#{e.message}"
    end
  end
end
upload_to_s3() click to toggle source
# File lib/gantree/deploy.rb, line 91
def upload_to_s3
  puts "uploading #{@packaged_version} to #{set_bucket}"
  s3.buckets["#{set_bucket}"].objects["#{@app}-#{@packaged_version}"].write(:file => @packaged_version)
end