dpl 1.8.17.travis.1402.4 → 1.8.17.travis.1416.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/dpl/provider/elastic_beanstalk.rb +38 -0
- data/spec/provider/elastic_beanstalk_spec.rb +24 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWJkNjc1NjczZGJhMTRjZDAwMDEyOTA4MjYzNzRiNjBlNTUxOThjYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWVlYjE4ZjNjNTFhNTQxNTFiZGU5ZmU1NzI0M2M4ZmE3ZTY1YmIxNA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDZlZDdiZmI0OTE0NzljNTkwZmQwZDZhNDY1ZDlkY2ZiNzA1MTdhMTVkNWYx
|
10
|
+
MDhlZjRkN2ZiMTJhMThlNmUxNjA0MTdiMDE0Zjc5YjU2MjFhMDA5MjljN2Nh
|
11
|
+
ZDhkMDE1MTVlMWZkZDM1NWJjZWZhN2MzNTQ3ZmYxMWY2ZjdhN2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDdkYjc0OWQ0ODkzNTE0N2FkZDZhMzQ3NGM4YzI1NzBkNWJiNWY2M2IzM2Y5
|
14
|
+
OWVlMmIyNTU0MDYyZjM3NWE3Y2Y0MDE5MjM2ODFkY2UxY2MxNzUyZTExYzZk
|
15
|
+
ZjA5MTIwNTlhNzNjYTM5ZTUzYTQ2MGVhZTIyZDA1OTAzYmI4YzU=
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
1
3
|
module DPL
|
2
4
|
class Provider
|
3
5
|
class ElasticBeanstalk < Provider
|
@@ -32,6 +34,7 @@ module DPL
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def push_app
|
37
|
+
@start_time = Time.now
|
35
38
|
create_bucket unless bucket_exists?
|
36
39
|
|
37
40
|
if options[:zip_file]
|
@@ -45,6 +48,7 @@ module DPL
|
|
45
48
|
version = create_app_version(s3_object)
|
46
49
|
if !only_create_app_version
|
47
50
|
update_app(version)
|
51
|
+
wait_until_deployed if options[:wait_until_deployed]
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -138,6 +142,40 @@ module DPL
|
|
138
142
|
eb.create_application_version(options)
|
139
143
|
end
|
140
144
|
|
145
|
+
# Wait until EB environment update finishes
|
146
|
+
def wait_until_deployed
|
147
|
+
errorEvents = 0 # errors counter, should remain 0 for successful deployment
|
148
|
+
events = []
|
149
|
+
|
150
|
+
loop do
|
151
|
+
environment = eb.describe_environments({
|
152
|
+
:application_name => app_name,
|
153
|
+
:environment_names => [env_name]
|
154
|
+
})[:environments].first
|
155
|
+
|
156
|
+
eb.describe_events({
|
157
|
+
:environment_name => env_name,
|
158
|
+
:start_time => @start_time.utc.iso8601,
|
159
|
+
})[:events].reverse.each do |event|
|
160
|
+
message = "#{event[:event_date]} [#{event[:severity]}] #{event[:message]}"
|
161
|
+
unless events.include?(message)
|
162
|
+
events.push(message)
|
163
|
+
if event[:severity] == "ERROR"
|
164
|
+
errorEvents += 1
|
165
|
+
warn(message)
|
166
|
+
else
|
167
|
+
log(message)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
break if environment[:status] == "Ready"
|
173
|
+
sleep 5
|
174
|
+
end
|
175
|
+
|
176
|
+
if errorEvents > 0 then error("Deployment failed.") end
|
177
|
+
end
|
178
|
+
|
141
179
|
def update_app(version)
|
142
180
|
options = {
|
143
181
|
:environment_name => env_name,
|
@@ -17,6 +17,7 @@ describe DPL::Provider::ElasticBeanstalk do
|
|
17
17
|
let(:bucket_name) { "travis-elasticbeanstalk-test-builds-#{region}" }
|
18
18
|
let(:bucket_path) { "some/app"}
|
19
19
|
let(:only_create_app_version) { nil }
|
20
|
+
let(:wait_until_deployed) { nil }
|
20
21
|
|
21
22
|
let(:bucket_mock) do
|
22
23
|
dbl = double("bucket mock", write: nil)
|
@@ -33,7 +34,8 @@ describe DPL::Provider::ElasticBeanstalk do
|
|
33
34
|
described_class.new(
|
34
35
|
DummyContext.new, :access_key_id => access_key_id, :secret_access_key => secret_access_key,
|
35
36
|
:region => region, :app => app, :env => env, :bucket_name => bucket_name, :bucket_path => bucket_path,
|
36
|
-
:only_create_app_version => only_create_app_version
|
37
|
+
:only_create_app_version => only_create_app_version,
|
38
|
+
:wait_until_deployed => wait_until_deployed
|
37
39
|
)
|
38
40
|
end
|
39
41
|
|
@@ -84,12 +86,12 @@ describe DPL::Provider::ElasticBeanstalk do
|
|
84
86
|
|
85
87
|
provider.push_app
|
86
88
|
end
|
87
|
-
|
89
|
+
|
88
90
|
context 'only creates app version' do
|
89
91
|
let(:only_create_app_version) { true }
|
90
|
-
|
92
|
+
|
91
93
|
example 'verify the app is not updated' do
|
92
|
-
|
94
|
+
|
93
95
|
expect(provider).to receive(:s3).and_return(s3_mock).twice
|
94
96
|
expect(provider).to receive(:create_bucket)
|
95
97
|
expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
|
@@ -121,5 +123,23 @@ describe DPL::Provider::ElasticBeanstalk do
|
|
121
123
|
provider_without_bucket_path.push_app
|
122
124
|
end
|
123
125
|
end
|
126
|
+
|
127
|
+
context 'When wait_until_deployed option is set' do
|
128
|
+
let(:wait_until_deployed) { true }
|
129
|
+
|
130
|
+
example 'Waits until deployment completes' do
|
131
|
+
expect(provider).to receive(:s3).and_return(s3_mock).twice
|
132
|
+
expect(provider).to receive(:create_bucket)
|
133
|
+
expect(provider).to receive(:create_zip).and_return('/path/to/file.zip')
|
134
|
+
expect(provider).to receive(:archive_name).and_return('file.zip')
|
135
|
+
expect(provider).to receive(:upload).with('file.zip', '/path/to/file.zip').and_call_original
|
136
|
+
expect(provider).to receive(:sleep).with(5)
|
137
|
+
expect(provider).to receive(:create_app_version).with(bucket_mock).and_return(app_version)
|
138
|
+
expect(provider).to receive(:update_app).with(app_version)
|
139
|
+
expect(provider).to receive(:wait_until_deployed)
|
140
|
+
|
141
|
+
provider.push_app
|
142
|
+
end
|
143
|
+
end
|
124
144
|
end
|
125
145
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dpl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.17.travis.
|
4
|
+
version: 1.8.17.travis.1416.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Konstantin Haase
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|