Class: EcrDeploy::Task
- Inherits:
-
Object
- Object
- EcrDeploy::Task
- Defined in:
- lib/ecr_deploy/task.rb
Instance Method Summary collapse
- #deploy!(image_tag_name) ⇒ Object
-
#initialize(config, environment) ⇒ Task
constructor
A new instance of Task.
- #register_task_definition(name, image_tag_name) ⇒ Object
- #wait_until_stable(wait_time = 600) ⇒ Object
Constructor Details
#initialize(config, environment) ⇒ Task
Returns a new instance of Task.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/ecr_deploy/task.rb', line 4 def initialize(config, environment) fail ArgumentError, "#{environment} does not exist in the configuration." \ if !config.environments.include?(environment) @ecs = Aws::ECS::Client.new s3 = Aws::S3::Resource.new @cluster_name = config.base_config["cluster"] @service_names = config.services(environment) @run_task_names = config.run_tasks(environment) @register_task_names = config.register_tasks(environment) @bucket = s3.bucket(config.base_config["template_bucket"]) @bucket_prefix = config.base_config["template_bucket_prefix"] || "" @environment = environment @env_vars = @bucket. object(build_path("#{environment}-env.json")).get.body.string end |
Instance Method Details
#deploy!(image_tag_name) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/ecr_deploy/task.rb', line 25 def deploy!(image_tag_name) task_def_names = (@service_names + @run_task_names + @register_task_names).uniq task_def_arns = task_def_names.map { |name| register_task_definition(name, image_tag_name) } task_def = Hash[task_def_names.zip(task_def_arns)] @service_names.each do |name| service_name = "#{@environment}-#{name}" $stderr.puts "==> Updating service \"#{service_name}\"" @ecs.update_service( cluster: @cluster_name, service: service_name, task_definition: task_def[name]) end @run_task_names.each do |name| $stderr.puts "==> Running task \"#{name}\" in \"#{@environment}\"" @ecs.run_task( cluster: @cluster_name, task_definition: task_def[name], count: 1) end end |
#register_task_definition(name, image_tag_name) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/ecr_deploy/task.rb', line 63 def register_task_definition(name, image_tag_name) template = @bucket.object(build_path("#{@environment}-#{name}.json")). get.body.string template.gsub!("[CURRENT_IMAGE_TAG]", image_tag_name) template.gsub!("[ENVIRONMENT]", @env_vars) template_obj = JSON.parse(template, symbolize_names: true) task = @ecs.register_task_definition(template_obj) task.task_definition.task_definition_arn end |
#wait_until_stable(wait_time = 600) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/ecr_deploy/task.rb', line 48 def wait_until_stable(wait_time = 600) services = @service_names.map { |name| "#{@environment}-#{name}" } $stderr.puts "==> Waiting for #{services.join ", "} to stabilize..." started_at = Time.now @ecs.wait_until(:services_stable, cluster: @cluster, services: services) do |w| w.max_attempts = nil w.before_wait do |attempts, response| throw :failure if Time.now - started_at > wait_time end end rescue Aws::Waiters::Errors::WaiterFailed => e $stderr.puts "!!> An error occurred while waiting for services to stabilize. #{e}" end |