gantree 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +4 -0
- data/gantree.gemspec +2 -1
- data/lib/gantree/cli.rb +1 -0
- data/lib/gantree/deploy.rb +95 -30
- data/lib/gantree/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c9066e820c79531b4b14df1d934894fcd6cdf9e
|
4
|
+
data.tar.gz: 5bc51c84e948f50f16491ad538982184eca0d5de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80ac061c5af38cb83f8bcaa18be4839dc63b84ba9ea1bf7de7b332b83980c664cc0451b7bf02b70c1a0c2f1b4c23b875561111d708c07395ff5b0a3c797d7025
|
7
|
+
data.tar.gz: b1fbed05adec9846cbc4d3653cc23d3239733db7b5cca379874ea458ba98959bbbaa49ce09d9cf38d8fe67b3c5b1e3b4b3448e1f7797f498e1931fbefeb12890
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,6 +2,8 @@ GEM
|
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
4
|
addressable (2.3.6)
|
5
|
+
archive-zip (0.7.0)
|
6
|
+
io-like (~> 0.3.0)
|
5
7
|
aws-sdk (1.52.0)
|
6
8
|
aws-sdk-v1 (= 1.52.0)
|
7
9
|
aws-sdk-v1 (1.52.0)
|
@@ -30,6 +32,7 @@ GEM
|
|
30
32
|
guard-rspec (4.3.1)
|
31
33
|
guard (~> 2.1)
|
32
34
|
rspec (>= 2.14, < 4.0)
|
35
|
+
io-like (0.3.0)
|
33
36
|
json (1.8.1)
|
34
37
|
listen (2.7.9)
|
35
38
|
celluloid (>= 0.15.2)
|
@@ -78,6 +81,7 @@ PLATFORMS
|
|
78
81
|
ruby
|
79
82
|
|
80
83
|
DEPENDENCIES
|
84
|
+
archive-zip
|
81
85
|
aws-sdk
|
82
86
|
cloudformation-ruby-dsl
|
83
87
|
codeclimate-test-reporter
|
data/gantree.gemspec
CHANGED
@@ -24,10 +24,11 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency "colorize"
|
25
25
|
spec.add_dependency "rubyzip"
|
26
26
|
spec.add_dependency "cloudformation-ruby-dsl"
|
27
|
+
spec.add_dependency "archive-zip"
|
27
28
|
|
28
29
|
spec.add_development_dependency "bundler", "~> 1.3"
|
29
30
|
spec.add_development_dependency "rake"
|
30
31
|
spec.add_development_dependency "guard"
|
31
32
|
spec.add_development_dependency "guard-bundler"
|
32
33
|
spec.add_development_dependency "guard-rspec"
|
33
|
-
end
|
34
|
+
end
|
data/lib/gantree/cli.rb
CHANGED
@@ -9,6 +9,7 @@ module Gantree
|
|
9
9
|
option :branch, :desc => 'branch to deploy'
|
10
10
|
method_option :tag, :aliases => "-t", :desc => "set docker tag to deploy"
|
11
11
|
method_option :env, :aliases => "-e", :desc => "elastic beanstalk environment"
|
12
|
+
method_option :ext, :aliases => "-x", :desc => "ebextensions folder/repo"
|
12
13
|
def deploy app
|
13
14
|
Gantree::Deploy.new(app, options).run
|
14
15
|
end
|
data/lib/gantree/deploy.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
require 'archive/zip'
|
2
|
+
|
1
3
|
module Gantree
|
2
4
|
class Deploy
|
3
5
|
|
4
6
|
def initialize app,options
|
5
7
|
@options = options
|
8
|
+
@ext = @options[:ext]
|
6
9
|
AWS.config(
|
7
10
|
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
|
8
11
|
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
|
9
12
|
@app = @options[:env] || app.match(/^[a-zA-Z]*\-([a-zA-Z]*)\-[a-zA-Z]*\-([a-zA-Z]*\d*)/)[1] + "-" + app.match(/^([a-zA-Z]*)\-([a-zA-Z]*)\-[a-zA-Z]*\-([a-zA-Z]*\d*)/)[1] + '-' + app.match(/^([a-zA-Z]*)\-([a-zA-Z]*)\-[a-zA-Z]*\-([a-zA-Z]*\d*)/)[3]
|
10
13
|
@env = app
|
11
|
-
@version_label = set_version_label
|
12
14
|
@eb = AWS::ElasticBeanstalk::Client.new
|
13
15
|
@s3 = AWS::S3.new
|
14
16
|
@tag = options.tag
|
@@ -16,42 +18,31 @@ module Gantree
|
|
16
18
|
|
17
19
|
def run
|
18
20
|
puts "Deploying #{@app}"
|
21
|
+
@packeged_version = create_version_files
|
19
22
|
upload_to_s3
|
20
|
-
|
23
|
+
clean_up
|
24
|
+
create_eb_version
|
21
25
|
update_application
|
22
26
|
end
|
23
27
|
|
24
28
|
private
|
25
29
|
|
26
30
|
def upload_to_s3
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
begin
|
33
|
-
puts "uploading dockerrun to #{@app}-versions"
|
34
|
-
@s3.buckets["#{@app}-versions"].objects[key].write(:file => filename)
|
35
|
-
rescue AWS::S3::Errors::NoSuchBucket
|
36
|
-
puts "bucket didn't exist...creating"
|
37
|
-
bucket = @s3.buckets.create("#{@app}-versions")
|
38
|
-
retry
|
39
|
-
rescue AWS::S3::Errors::AccessDenied
|
40
|
-
puts "Your key is not configured for s3 access, please let your operations team know"
|
41
|
-
FileUtils.rm(filename)
|
42
|
-
exit
|
43
|
-
end
|
44
|
-
FileUtils.rm(filename)
|
31
|
+
key = File.basename(@packeged_version)
|
32
|
+
check_version_bucket
|
33
|
+
puts "uploading #{@packeged_version} to #{@app}-versions"
|
34
|
+
@s3.buckets["#{@app}-versions"].objects[key].write(:file => @packeged_version)
|
35
|
+
FileUtils.rm(@packeged_version)
|
45
36
|
end
|
46
37
|
|
47
|
-
def
|
38
|
+
def create_eb_version
|
48
39
|
begin
|
49
40
|
@eb.create_application_version({
|
50
41
|
:application_name => @app,
|
51
|
-
:version_label => @
|
42
|
+
:version_label => @packeged_version,
|
52
43
|
:source_bundle => {
|
53
44
|
:s3_bucket => "#{@app}-versions",
|
54
|
-
:s3_key => @
|
45
|
+
:s3_key => @packeged_version
|
55
46
|
}
|
56
47
|
})
|
57
48
|
rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue
|
@@ -59,7 +50,7 @@ module Gantree
|
|
59
50
|
begin
|
60
51
|
@eb.delete_application_version({
|
61
52
|
:application_name => @app,
|
62
|
-
:version_label => @
|
53
|
+
:version_label => @packeged_version,
|
63
54
|
:delete_source_bundle => false
|
64
55
|
})
|
65
56
|
retry
|
@@ -73,23 +64,97 @@ module Gantree
|
|
73
64
|
begin
|
74
65
|
@eb.update_environment({
|
75
66
|
:environment_name => @env,
|
76
|
-
:version_label => @
|
67
|
+
:version_label => @packeged_version
|
77
68
|
})
|
78
69
|
rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue
|
79
70
|
puts "#{@env} doesn't exist"
|
80
71
|
end
|
81
72
|
end
|
82
73
|
|
83
|
-
def
|
74
|
+
def create_version_files
|
84
75
|
branch = `git rev-parse --abbrev-ref HEAD`
|
76
|
+
puts "branch: #{branch}"
|
85
77
|
hash = `git rev-parse --verify --short #{branch}`.strip
|
86
|
-
"#{
|
78
|
+
puts "hash #{hash}"
|
79
|
+
version = "#{@env}-#{hash}"
|
80
|
+
puts "version: #{version}"
|
81
|
+
dockerrun = "Dockerrun.aws.json"
|
82
|
+
set_tag_to_deploy(dockerrun) if @tag
|
83
|
+
unless ext?
|
84
|
+
new_dockerrun = "#{version}-Dockerrun.aws.json"
|
85
|
+
FileUtils.cp("Dockerrun.aws.json", new_dockerrun)
|
86
|
+
new_dockerrun
|
87
|
+
else
|
88
|
+
zip = "#{version}.zip"
|
89
|
+
clone_repo if repo?
|
90
|
+
Archive::Zip.archive(zip, ['.ebextensions/', dockerrun])
|
91
|
+
zip
|
92
|
+
end
|
87
93
|
end
|
88
94
|
|
89
|
-
def set_tag_to_deploy
|
90
|
-
docker =JSON.parse(IO.read(
|
95
|
+
def set_tag_to_deploy file
|
96
|
+
docker = JSON.parse(IO.read(file))
|
91
97
|
docker["Image"]["Name"].gsub!(/:(.*)$/, ":#{@tag}")
|
92
|
-
IO.write(
|
98
|
+
IO.write(file,JSON.pretty_generate(docker))
|
99
|
+
end
|
100
|
+
|
101
|
+
def ext?
|
102
|
+
if @ext
|
103
|
+
true
|
104
|
+
else
|
105
|
+
false
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def repo?
|
110
|
+
if @ext.include? "github"
|
111
|
+
true
|
112
|
+
else
|
113
|
+
false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def local?
|
118
|
+
File.directory?(@ext)
|
119
|
+
end
|
120
|
+
|
121
|
+
def get_ext_repo
|
122
|
+
if ext_branch?
|
123
|
+
repo = @ext.sub.(get_ext_branch)
|
124
|
+
else
|
125
|
+
@ext
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def ext_branch?
|
130
|
+
if @ext.count(":") == 2
|
131
|
+
true
|
132
|
+
else
|
133
|
+
false
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def get_ext_branch
|
138
|
+
branch = @ext.match(/:.*(:.*)$/)[0]
|
139
|
+
end
|
140
|
+
|
141
|
+
def clone_repo
|
142
|
+
if ext_branch?
|
143
|
+
`git clone -b #{get_ext_branch} #{get_ext_repo}`
|
144
|
+
else
|
145
|
+
`git clone #{get_ext_repo}`
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def check_version_bucket
|
150
|
+
name = "#{@app}-versions"
|
151
|
+
bucket = @s3.buckets[name] # makes no request
|
152
|
+
@s3.buckets.create(name) unless bucket.exists?
|
153
|
+
end
|
154
|
+
|
155
|
+
def clean_up
|
156
|
+
`git checkout Dockerrun.aws.json` # reverts back to original Dockerrun.aws.json
|
157
|
+
`git checkout .ebextensions/` if ext?
|
93
158
|
end
|
94
159
|
end
|
95
160
|
end
|
data/lib/gantree/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gantree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: archive-zip
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|