ecs_deployer 2.2.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 44c5cee885a21a7246c87d44fb432810dac14ec21fe2c706d8d0a5d5d05c95a4
4
- data.tar.gz: 634d77479c637484e95a05a45fdabf838f57baa0c4933735aaf767d3f950a3a3
2
+ SHA1:
3
+ metadata.gz: bd00fa1ac3cc92c3a9a53e46415a3ce7d14786b9
4
+ data.tar.gz: 5829d3e3415defebd527a82e4a1e27dd375b6a57
5
5
  SHA512:
6
- metadata.gz: a3ff58103c942b69fdcc203a275aa1c097019dc20af226b9862858b64982123205a37fdbe011c0199c6664ebede7d1304e2ab45ab42968ea0f62f427f89ce2e0
7
- data.tar.gz: add7ad99bf8d8bdfd832d6f743bdf968cdb7802e0c53f4190dbe5e20d1237fc5b9266be40dc78b48663951a72a7918eddfba6f9adda9788620b332f9343662f8
6
+ metadata.gz: a0421a84b469e591fe1cb8e5041b5f1b834622a2ac46338cf3fef7b1399561d043e13800ac8095c943b4c4b9128e76419a1f3ee78bad7a237c3511688569395a
7
+ data.tar.gz: 352529a94b8724e550d5cb6e797bf88f33e8edd90ee609e85ed3248e058f04230dcd44e8e14fe10c58a08e473d5741ed957a0c2c4cd50963e98c39ecb5724219
@@ -0,0 +1,30 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: circleci/ruby:2.6.2
6
+ environment:
7
+ CC_TEST_REPORTER_ID: 1cb1989f71aaacc808297279555f70439ed7dcfe5fcf90248b8462c494d2cb1e
8
+ working_directory: ~/ecs_deployer
9
+ steps:
10
+ - checkout
11
+ - restore_cache:
12
+ key: bundle-{{ checksum "Gemfile.lock" }}
13
+ - run:
14
+ name: bundle install
15
+ command: bundle install --jobs=4
16
+ - save_cache:
17
+ key: bundle-{{ checksum "Gemfile.lock" }}
18
+ paths:
19
+ - vendor/bundle
20
+ - run:
21
+ name: Setup Code Climate
22
+ command: |
23
+ curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
24
+ chmod +x ./cc-test-reporter
25
+ - run:
26
+ name: rspec test
27
+ command: |
28
+ ./cc-test-reporter before-build
29
+ bundle exec rspec
30
+ ./cc-test-reporter after-build --coverage-input-type simplecov --exit-code $?
@@ -0,0 +1 @@
1
+ .git
@@ -0,0 +1,9 @@
1
+ AWS_ACCESS_KEY_ID=
2
+ AWS_SECRET_ACCESS_KEY=
3
+ AWS_REGION=ap-northeast-1
4
+ ECS_CLUSTER=
5
+ ECS_SERVICE=
6
+ ECS_TASK_PATH=./spec/fixtures/task.yml
7
+ ECS_SCHEDULED_TASK_TARGET_ID=
8
+ ECS_SCHEDULED_TASK_RULE_ID=
9
+ CLOUDWATCH_EVENT_ARN=
data/.gitignore CHANGED
@@ -1,13 +1,13 @@
1
- /.bundle/
2
1
  /.yardoc
3
2
  /Gemfile.lock
4
3
  /_yardoc/
5
4
  /doc/
6
5
  /pkg/
7
6
  /spec/reports/
8
- /tmp/
9
- /vendor/
10
- config.local.yml
11
7
 
12
8
  # rspec failure tracking
13
- .rspec_status
9
+ /.rspec_status
10
+
11
+ /coverage
12
+ .env
13
+ /example/conf/task.yml
@@ -2,7 +2,7 @@ AllCops:
2
2
  Exclude:
3
3
  - 'tmp/**/*'
4
4
  - 'vendor/**/*'
5
- Lint/RescueWithoutErrorClass:
5
+ Style/RescueStandardError:
6
6
  Enabled: false
7
7
  Style/BlockComments:
8
8
  Enabled: false
@@ -0,0 +1,7 @@
1
+ FROM ruby:2.6.3-alpine3.10
2
+
3
+ RUN apk add git build-base
4
+ WORKDIR /app
5
+
6
+ COPY . .
7
+ RUN bundle install
data/README.md CHANGED
@@ -73,40 +73,30 @@ Values are decrypted when task is created.
73
73
 
74
74
  ## Usage
75
75
 
76
- ### API
76
+ ### Register new task
77
77
 
78
- Refer to [sample code](https://github.com/naomichi-y/ecs_deployer/tree/master/example).
79
-
80
- ```ruby
81
- deployer.register_task('development.yml', tag: 'latest')
82
78
  ```
83
-
84
- ### CLI
85
-
86
- #### Register new task
87
-
88
- ```bash
89
79
  $ bundle exec ecs_deployer task-register --path=spec/fixtures/task.yml --replace-variables=tag:latest
90
80
  Registered task: arn:aws:ecs:ap-northeast-1:xxx:task-definition/nginx:latest
91
81
  ```
92
82
 
93
- #### Encrypt environment value
83
+ ### Encrypt environment value
94
84
 
95
- ```bash
85
+ ```
96
86
  $ bundle exec ecs_deployer encrypt --master-key=master --value='test'
97
87
  Encrypted value: ${xxx}
98
88
  ```
99
89
 
100
- #### Decrypt environment value
90
+ ### Decrypt environment value
101
91
 
102
- ```bash
92
+ ```
103
93
  $ bundle exec ecs_deployer decrypt --value='${xxx}'
104
94
  Decrypted value: xxx
105
95
  ```
106
96
 
107
- #### Update service
97
+ ### Update service
108
98
 
109
- ```bash
99
+ ```
110
100
  $ bundle exec ecs_deployer update-service --cluster=xxx --service=xxx --wait --wait-timeout=600
111
101
  Start deploying...
112
102
  Deploying... [0/1] (20 seconds elapsed)
@@ -129,6 +119,18 @@ New task definition: arn:aws:ecs:ap-northeast-1:xxxx:task-definition/sandbox-dev
129
119
  Update service: arn:aws:ecs:ap-northeast-1:xxxx:service/development
130
120
  ```
131
121
 
122
+ ## SDK
123
+
124
+ ### Example
125
+ ```
126
+ $ cp .env.default .env
127
+ $ docker-compose-build
128
+
129
+ $ docker-compose run --rm ruby bundle exec ruby example/register_task.rb
130
+ $ docker-compose run --rm ruby bundle exec ruby example/update_service.rb
131
+ $ docker-compose run --rm ruby bundle exec ruby example/update_scheduled_task.rb
132
+ ```
133
+
132
134
  ## License
133
135
 
134
136
  MIT
@@ -0,0 +1,10 @@
1
+ version: '3'
2
+ services:
3
+ ruby:
4
+ container_name: ecs_deployer_ruby
5
+ build:
6
+ context: .
7
+ volumes:
8
+ - .:/app
9
+ - ${ECS_TASK_PATH}:/app/example/conf/task.yml
10
+ env_file: .env
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'ecs_deployer/version'
4
4
 
@@ -29,15 +29,13 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ['lib']
31
31
 
32
- spec.add_dependency 'aws-sdk', '>= 2.9.0'
33
- spec.add_dependency 'aws_config', '~> 0.1'
34
- spec.add_dependency 'oj', '~> 3.0'
35
- spec.add_dependency 'thor', '~> 0.19'
36
- spec.add_development_dependency 'bundler', '~> 1.13'
32
+ spec.add_dependency 'aws-sdk', '>= 3.0.1'
33
+ spec.add_dependency 'oj', '~> 3.8.1'
34
+ spec.add_dependency 'thor', '~> 0.20.3'
35
+ spec.add_development_dependency 'bundler', '~> 1.17.2'
37
36
  spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
38
- spec.add_development_dependency 'config', '~> 1.5.1'
39
- spec.add_development_dependency 'rake', '~> 10.0'
40
- spec.add_development_dependency 'rspec', '~> 3.0'
41
- spec.add_development_dependency 'rubocop', '~> 0.48'
42
- spec.add_development_dependency 'simplecov', '~> 0.14'
37
+ spec.add_development_dependency 'rake', '~> 12.3.3'
38
+ spec.add_development_dependency 'rspec', '~> 3.8.0'
39
+ spec.add_development_dependency 'rubocop', '~> 0.74.0'
40
+ spec.add_development_dependency 'simplecov', '~> 0.17.0'
43
41
  end
@@ -1,11 +1,5 @@
1
1
  require 'bundler/setup'
2
2
  require 'ecs_deployer'
3
- require 'config'
4
-
5
- Config.load_and_set_settings('config.yml', 'config.local.yml')
6
-
7
- task_path = File.expand_path(Settings.task_path)
8
- deployer = EcsDeployer::Client.new(Settings.cluster)
9
- task_definition = deployer.task.register(task_path, tag: 'latest')
10
3
 
4
+ task_definition = EcsDeployer::Task::Client.new.register(File.expand_path('example/conf/task.yml'), tag: 'latest')
11
5
  puts task_definition.task_definition_arn
@@ -1,20 +1,16 @@
1
1
  require 'bundler/setup'
2
2
  require 'ecs_deployer'
3
- require 'config'
4
3
 
5
- Config.load_and_set_settings('config.yml', 'config.local.yml')
6
- task_path = File.expand_path(Settings.scheduled_task_path)
4
+ task_definition = EcsDeployer::Task::Client.new.register(File.expand_path('example/conf/task.yml'), tag: 'latest')
7
5
 
8
- deployer = EcsDeployer::Client.new(Settings.cluster)
9
- task_definition = deployer.task.register(task_path, tag: 'latest')
10
-
11
- scheduled_task = deployer.scheduled_task
12
- target_builder = scheduled_task.target_builder(Settings.scheduled_task_target_id)
6
+ scheduled_task = EcsDeployer::Client.new(ENV['ECS_CLUSTER']).scheduled_task
7
+ target_builder = scheduled_task.target_builder(ENV['ECS_SCHEDULED_TASK_TARGET_ID'])
13
8
  target_builder.task_definition_arn = task_definition.task_definition_arn
14
9
  target_builder.override_container('rails', ['curl', 'http://153.122.13.159/'])
10
+ target_builder.cloudwatch_event_role_arn = ENV['CLOUDWATCH_EVENT_ARN']
15
11
 
16
12
  task_definition = scheduled_task.update(
17
- Settings.scheduled_task_rule,
13
+ ENV['ECS_SCHEDULED_TASK_RULE_ID'],
18
14
  'cron(* * * * ? *)',
19
15
  [target_builder.to_hash],
20
16
  description: 'Test task'
@@ -1,13 +1,8 @@
1
1
  require 'bundler/setup'
2
2
  require 'ecs_deployer'
3
- require 'config'
4
3
 
5
- Config.load_and_set_settings('config.yml', 'config.local.yml')
6
-
7
- task_path = File.expand_path(Settings.task_path)
8
-
9
- deployer = EcsDeployer::Client.new(Settings.cluster)
10
- task_definition = deployer.task.register(task_path, tag: 'latest')
11
- service = deployer.service.update(Settings.service, task_definition)
4
+ client = EcsDeployer::Client.new(ENV['ECS_CLUSTER'])
5
+ task_definition = EcsDeployer::Task::Client.new.register(File.expand_path('example/conf/task.yml'), tag: 'latest')
6
+ service = client.service.update(ENV['ECS_SERVICE'], task_definition)
12
7
 
13
8
  puts service.service_arn
@@ -8,7 +8,7 @@ module EcsDeployer
8
8
  # @return [EcsDeployer::Client]
9
9
  def initialize(cluster, logger = nil, aws_options = {})
10
10
  @cluster = cluster
11
- @logger = logger.nil? ? Logger.new(nil) : logger
11
+ @logger = logger.nil? ? Logger.new(STDOUT) : logger
12
12
  @aws_options = aws_options
13
13
  end
14
14
 
@@ -37,7 +37,7 @@ module EcsDeployer
37
37
  name: name,
38
38
  command: command
39
39
  }
40
- container_override[:environment] = override_environments if override_environments.count > 0
40
+ container_override[:environment] = override_environments if override_environments.count.positive?
41
41
 
42
42
  @container_overrides << container_override
43
43
  end
@@ -47,6 +47,7 @@ module EcsDeployer
47
47
  )
48
48
  result[:services].each do |svc|
49
49
  next unless svc[:service_name] == service && svc[:status] == 'ACTIVE'
50
+
50
51
  status = svc
51
52
  break
52
53
  end
@@ -148,7 +149,7 @@ module EcsDeployer
148
149
  @logger.info LOG_SEPARATOR
149
150
  end
150
151
 
151
- if result[:new_registerd_task_count] == desired_count && result[:current_task_count] == 0
152
+ if result[:new_registerd_task_count] == desired_count && result[:current_task_count].zero?
152
153
  @logger.info "Service update succeeded. [#{result[:new_registerd_task_count]}/#{desired_count}]"
153
154
  @logger.info "New task definition: #{task_definition_arn}"
154
155
 
@@ -52,7 +52,7 @@ module EcsDeployer
52
52
 
53
53
  task_definition = result[:task_definition].to_hash
54
54
 
55
- delete_keys = [:task_definition_arn, :revision, :status, :requires_attributes, :compatibilities]
55
+ delete_keys = %i[task_definition_arn revision status requires_attributes compatibilities]
56
56
  delete_keys.each do |delete_key|
57
57
  task_definition.delete(delete_key)
58
58
  end
@@ -68,7 +68,7 @@ module EcsDeployer
68
68
  # @param [Array, Hash] variables
69
69
  # @param [Hash] replace_variables
70
70
  def replace_parameter_variables!(variables, replace_variables = {})
71
- for variable in variables do
71
+ variables.each do |variable|
72
72
  if variable.class == Array || variable.class == Hash
73
73
  replace_parameter_variables!(variable, replace_variables)
74
74
  elsif variable.class == String
@@ -82,6 +82,7 @@ module EcsDeployer
82
82
  # @param [Hash] task_definition
83
83
  def decrypt_environment_variables!(task_definition)
84
84
  raise TaskDefinitionValidateError, '\'container_definition\' is undefined.' unless task_definition.key?(:container_definitions)
85
+
85
86
  task_definition[:container_definitions].each do |container_definition|
86
87
  next unless container_definition.key?(:environment)
87
88
 
@@ -3,7 +3,7 @@ require 'base64'
3
3
  module EcsDeployer
4
4
  module Util
5
5
  class Cipher
6
- ENCRYPT_VARIABLE_PATTERN = /^\${(.+)}$/
6
+ ENCRYPT_VARIABLE_PATTERN = /^\${(.+)}$/.freeze
7
7
 
8
8
  # @param [Hash] aws_options
9
9
  # @return [EcsDeployer::Util::Cipher]
@@ -1,3 +1,3 @@
1
1
  module EcsDeployer
2
- VERSION = '2.2.2'.freeze
2
+ VERSION = '2.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_deployer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - naomichi-y
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-13 00:00:00.000000000 Z
11
+ date: 2019-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -16,70 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.9.0
19
+ version: 3.0.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.9.0
27
- - !ruby/object:Gem::Dependency
28
- name: aws_config
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.1'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.1'
26
+ version: 3.0.1
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: oj
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '3.0'
33
+ version: 3.8.1
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '3.0'
40
+ version: 3.8.1
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: thor
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '0.19'
47
+ version: 0.20.3
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '0.19'
54
+ version: 0.20.3
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '1.13'
61
+ version: 1.17.2
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '1.13'
68
+ version: 1.17.2
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: codeclimate-test-reporter
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,76 +80,62 @@ dependencies:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: '1.0'
97
- - !ruby/object:Gem::Dependency
98
- name: config
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 1.5.1
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 1.5.1
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rake
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - "~>"
116
88
  - !ruby/object:Gem::Version
117
- version: '10.0'
89
+ version: 12.3.3
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
94
  - - "~>"
123
95
  - !ruby/object:Gem::Version
124
- version: '10.0'
96
+ version: 12.3.3
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rspec
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
101
  - - "~>"
130
102
  - !ruby/object:Gem::Version
131
- version: '3.0'
103
+ version: 3.8.0
132
104
  type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
108
  - - "~>"
137
109
  - !ruby/object:Gem::Version
138
- version: '3.0'
110
+ version: 3.8.0
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: rubocop
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
115
  - - "~>"
144
116
  - !ruby/object:Gem::Version
145
- version: '0.48'
117
+ version: 0.74.0
146
118
  type: :development
147
119
  prerelease: false
148
120
  version_requirements: !ruby/object:Gem::Requirement
149
121
  requirements:
150
122
  - - "~>"
151
123
  - !ruby/object:Gem::Version
152
- version: '0.48'
124
+ version: 0.74.0
153
125
  - !ruby/object:Gem::Dependency
154
126
  name: simplecov
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
129
  - - "~>"
158
130
  - !ruby/object:Gem::Version
159
- version: '0.14'
131
+ version: 0.17.0
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
136
  - - "~>"
165
137
  - !ruby/object:Gem::Version
166
- version: '0.14'
138
+ version: 0.17.0
167
139
  description: Deploy Docker container on AWS ECS.
168
140
  email:
169
141
  - n.yamakita@gmail.com
@@ -172,17 +144,21 @@ executables:
172
144
  extensions: []
173
145
  extra_rdoc_files: []
174
146
  files:
147
+ - ".circleci/config.yml"
148
+ - ".dockerignore"
149
+ - ".env.default"
175
150
  - ".gitignore"
176
151
  - ".rspec"
177
152
  - ".rubocop.yml"
153
+ - Dockerfile
178
154
  - Gemfile
179
155
  - LICENSE.txt
180
156
  - README.md
181
157
  - Rakefile
182
158
  - bin/console
183
159
  - bin/setup
184
- - circle.yml
185
160
  - config.yml
161
+ - docker-compose.yml
186
162
  - ecs_deployer.gemspec
187
163
  - example/register_task.rb
188
164
  - example/update_scheduled_task.rb
@@ -218,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
194
  version: '0'
219
195
  requirements: []
220
196
  rubyforge_project:
221
- rubygems_version: 2.7.6
197
+ rubygems_version: 2.5.2.3
222
198
  signing_key:
223
199
  specification_version: 4
224
200
  summary: Deploy application to ECS.
data/circle.yml DELETED
@@ -1,7 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.4.0
4
- test:
5
- override:
6
- - bundle exec rspec
7
- - bundle exec codeclimate-test-reporter tmp/coverage/.resultset.json