eb-docker-deploy 0.5.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/ebd +1 -1
- data/eb-docker-deploy.gemspec +2 -2
- data/lib/deploy.rb +6 -3
- data/lib/deploy/checks.rb +26 -0
- data/lib/deploy/commands.rb +44 -0
- data/lib/deploy/output.rb +18 -2
- data/lib/deploy/runner.rb +109 -0
- data/lib/deploy/utility.rb +9 -0
- data/lib/deploy/version.rb +1 -1
- data/lib/deploy/versions.rb +24 -0
- metadata +12 -11
- data/bin/eb-deploy +0 -5
- data/lib/deploy/deployer.rb +0 -187
- data/lib/deploy/docker_hub_api.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a649466f0fba47202a94d74a12a1e596445b8e7c
|
4
|
+
data.tar.gz: 29623779df7dc7e7566c998e856d00fec769646e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ede7b3dd3c2e814653a1b9f5021674cb52aae02728aedfe993352e90310be400d90ef10fa4c8e4ee1da5b7e472ffde799c5a8d41337e678dd641c6131c6c1c9
|
7
|
+
data.tar.gz: 0eea490ea341e7858bf897a17033fa63c9e96f74dd63e2e177dcd0d963e3d5db279c6d7a2c653f6564179386913e5224411afb505e23881c4ce6f28994053447
|
data/bin/ebd
CHANGED
data/eb-docker-deploy.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = ['
|
17
|
+
spec.executables = ['ebd']
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency 'thor'
|
25
25
|
spec.add_dependency 'highline'
|
26
26
|
|
27
|
-
spec.add_dependency '
|
27
|
+
spec.add_dependency 'aws-sdk', '~> 2'
|
28
28
|
|
29
29
|
spec.add_dependency 'slack-notifier'
|
30
30
|
end
|
data/lib/deploy.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'highline/import'
|
3
3
|
require 'slack-notifier'
|
4
|
-
require '
|
4
|
+
require 'aws-sdk'
|
5
5
|
|
6
6
|
require 'deploy/output'
|
7
|
-
require 'deploy/
|
7
|
+
require 'deploy/commands'
|
8
|
+
require 'deploy/checks'
|
9
|
+
require 'deploy/versions'
|
10
|
+
require 'deploy/utility'
|
8
11
|
|
9
|
-
require 'deploy/
|
12
|
+
require 'deploy/runner'
|
10
13
|
|
11
14
|
module Deploy
|
12
15
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'deploy/utility'
|
2
|
+
|
3
|
+
module Deploy
|
4
|
+
module Checks
|
5
|
+
include Deploy::Utility
|
6
|
+
|
7
|
+
def check_setup
|
8
|
+
(shout('docker not installed'); exit(1)) unless command?('docker')
|
9
|
+
(shout('eb command not installed'); exit(1)) unless command?('eb')
|
10
|
+
(shout('elasticbeanstalk not configured for this project. run "eb init".'); exit(1)) unless File.exist?('.elasticbeanstalk')
|
11
|
+
(shout('AWS credentials not configured.'); exit(1)) unless ENV['AWS_ACCESS_KEY_ID'] && ENV['AWS_SECRET_ACCESS_KEY'] && ENV['AWS_REGION']
|
12
|
+
(shout('ENV DOCKER_REPO not set'); exit(1)) unless ENV['DOCKER_REPO']
|
13
|
+
end
|
14
|
+
|
15
|
+
def check_rollback_version(version, environment)
|
16
|
+
check_version(version, environment)
|
17
|
+
(shout('You can only rollback to a previous version'); exit(1)) unless application_versions_array.include?(version)
|
18
|
+
end
|
19
|
+
|
20
|
+
def check_version(version, environment)
|
21
|
+
(shout('You must pass a version with -v'); exit(1)) unless version
|
22
|
+
(shout('You are currently on that version'); exit(1)) if current_version_for_environment(environment) == version
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'deploy/utility'
|
2
|
+
|
3
|
+
module Deploy
|
4
|
+
module Commands
|
5
|
+
include Deploy::Utility
|
6
|
+
|
7
|
+
def build_image(repo, tag)
|
8
|
+
shout "Building Docker Image: #{repo}:#{tag}"
|
9
|
+
command = "docker build -t #{repo}:#{tag} ."
|
10
|
+
exit(1) unless system(command)
|
11
|
+
end
|
12
|
+
|
13
|
+
def tag_image_as_latest(repo, tag)
|
14
|
+
shout "Tagging #{tag} Docker Image as Latest"
|
15
|
+
command = "docker tag -f #{repo}:#{tag} #{repo}:latest"
|
16
|
+
exit(1) unless system(command)
|
17
|
+
end
|
18
|
+
|
19
|
+
def push_image(repo, tag)
|
20
|
+
shout "Pushing Docker Image: #{repo}:#{tag}"
|
21
|
+
command = "docker push #{repo}:#{tag}"
|
22
|
+
exit(1) unless system(command)
|
23
|
+
end
|
24
|
+
|
25
|
+
def pull_image(repo, tag)
|
26
|
+
shout "Pulling Docker Image: #{repo}:#{tag}"
|
27
|
+
command = "docker pull #{repo}:#{tag}"
|
28
|
+
exit(1) unless system(command)
|
29
|
+
end
|
30
|
+
|
31
|
+
def run_deploy(version, environment)
|
32
|
+
command = "eb deploy #{environment} --label #{version}"
|
33
|
+
shout "deploying #{version} to elastic beanstalk with command: #{command}"
|
34
|
+
exit(1) unless system(command)
|
35
|
+
end
|
36
|
+
|
37
|
+
def run_rollback(version, environment)
|
38
|
+
command = "eb deploy #{environment} --version #{version}"
|
39
|
+
shout "deploying #{version} to elastic beanstalk with command: #{command}"
|
40
|
+
exit(1) unless system(command)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/lib/deploy/output.rb
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
module Deploy
|
2
2
|
module Output
|
3
3
|
|
4
|
+
def announce(attachments)
|
5
|
+
shout("#{attachments[:title]} - #{attachments[:text]}")
|
6
|
+
notifier('', attachments)
|
7
|
+
end
|
8
|
+
|
9
|
+
def notifier(message, attachments)
|
10
|
+
if ENV['SLACK_WEBHOOK']
|
11
|
+
@notifier ||= Slack::Notifier.new(ENV['SLACK_WEBHOOK'])
|
12
|
+
@notifier.ping(message, {
|
13
|
+
attachments: [attachments]
|
14
|
+
})
|
15
|
+
else
|
16
|
+
shout 'You can send deployment notifications if you set the SLACK_WEBHOOK environment variable.'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
4
20
|
def shout(message)
|
5
21
|
message_size = message.size
|
6
22
|
if message_size < 77
|
7
23
|
# lines are always 80 characters
|
8
24
|
stars = '*' * (77 - message_size)
|
9
|
-
puts(
|
25
|
+
puts(red("+ ") + "#{message} #{red(stars)}")
|
10
26
|
else
|
11
|
-
puts(
|
27
|
+
puts(red('+ ') + message)
|
12
28
|
end
|
13
29
|
end
|
14
30
|
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module Deploy
|
2
|
+
class Runner < Thor
|
3
|
+
include Deploy::Output
|
4
|
+
include Deploy::Commands
|
5
|
+
include Deploy::Checks
|
6
|
+
include Deploy::Versions
|
7
|
+
include Deploy::Utility
|
8
|
+
|
9
|
+
method_option :version, aliases: '-v', desc: 'Version', required: true
|
10
|
+
method_option :environment, aliases: '-e', desc: 'Environment', required: true
|
11
|
+
method_option :build, aliases: '-b', desc: 'Build Image', default: true
|
12
|
+
desc 'deploy', 'deploy'
|
13
|
+
def deploy
|
14
|
+
check_setup
|
15
|
+
|
16
|
+
environment = options[:environment]
|
17
|
+
build = options[:build]
|
18
|
+
|
19
|
+
version = options[:version]
|
20
|
+
check_version(version, environment)
|
21
|
+
|
22
|
+
repo = ENV['DOCKER_REPO']
|
23
|
+
|
24
|
+
if build && !version_exists?(version)
|
25
|
+
announce_title = "Deployment started with build"
|
26
|
+
build_image(repo, version)
|
27
|
+
else
|
28
|
+
announce_title = "Deployment started without build"
|
29
|
+
pull_image(repo, version)
|
30
|
+
end
|
31
|
+
|
32
|
+
tag_image_as_latest(repo, version)
|
33
|
+
|
34
|
+
push_image(repo, version)
|
35
|
+
push_image(repo, 'latest')
|
36
|
+
|
37
|
+
announce({ color: '#6080C0', title: announce_title, text: "Deploying version #{version} to #{environment}" })
|
38
|
+
run_deploy(version, environment)
|
39
|
+
announce({ color: 'good', title: 'Deployment Succeeded!!', text: "The current version of #{environment} is #{version}" })
|
40
|
+
end
|
41
|
+
|
42
|
+
method_option :version, aliases: '-v', desc: 'Version', required: true
|
43
|
+
method_option :environment, aliases: '-e', desc: 'Environment', required: true
|
44
|
+
desc 'rollback', 'rollback'
|
45
|
+
def rollback
|
46
|
+
check_setup
|
47
|
+
|
48
|
+
environment = options[:environment]
|
49
|
+
version = options[:version]
|
50
|
+
check_rollback_version(version, environment)
|
51
|
+
|
52
|
+
repo = ENV['DOCKER_REPO']
|
53
|
+
|
54
|
+
announce({ color: '#6080C0', title: "Rollback started", text: "Rolling back to #{version} on #{environment}" })
|
55
|
+
|
56
|
+
pull_image(repo, version)
|
57
|
+
|
58
|
+
tag_image_as_latest(repo, version)
|
59
|
+
|
60
|
+
push_image(repo, 'latest')
|
61
|
+
|
62
|
+
run_rollback(version, environment)
|
63
|
+
announce({ color: 'good', title: 'Rollback Succeeded!!', text: "The current version of #{environment} is #{version}" })
|
64
|
+
end
|
65
|
+
|
66
|
+
desc 'send test notification', 'send test notification'
|
67
|
+
def test_slack
|
68
|
+
notifier('', { color: 'good', title: 'This is a test notification from eb-docker-deploy.' })
|
69
|
+
end
|
70
|
+
|
71
|
+
desc 'list versions', 'list all application versions'
|
72
|
+
def versions
|
73
|
+
check_setup
|
74
|
+
|
75
|
+
application_versions_array.each do |version|
|
76
|
+
shout version
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
method_option :environment, aliases: '-e', desc: 'Environment', required: true
|
81
|
+
desc 'show version', 'show environment version'
|
82
|
+
def version
|
83
|
+
check_setup
|
84
|
+
|
85
|
+
shout current_version_for_environment(options[:environment])
|
86
|
+
end
|
87
|
+
|
88
|
+
desc 'setup config', 'setup config'
|
89
|
+
def setup
|
90
|
+
(shout('AWS creds already configured in ~/.bashrc'); exit(1)) if ENV['AWS_ACCESS_KEY_ID'] && ENV['AWS_SECRET_ACCESS_KEY'] && ENV['AWS_REGION']
|
91
|
+
|
92
|
+
key = ask('Enter AWS Key:')
|
93
|
+
secret = ask('Enter AWS Secret:')
|
94
|
+
region = ask('Enter AWS Region:', default: 'us-west-2')
|
95
|
+
|
96
|
+
File.open(File.expand_path('~/.bashrc'), 'a') do |f|
|
97
|
+
f.puts ''
|
98
|
+
f.puts '# Variables defined by eb-docker-deploy:'
|
99
|
+
f.puts "export AWS_ACCESS_KEY_ID=#{key}"
|
100
|
+
f.puts "export AWS_SECRET_ACCESS_KEY=#{secret}"
|
101
|
+
f.puts "export AWS_REGION=#{region}"
|
102
|
+
end
|
103
|
+
|
104
|
+
shout('AWS creds successfully configured at ~/.bashrc.')
|
105
|
+
shout('You must now run "source ~/.bashrc"')
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
data/lib/deploy/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'deploy/utility'
|
2
|
+
|
3
|
+
module Deploy
|
4
|
+
module Versions
|
5
|
+
include Deploy::Utility
|
6
|
+
|
7
|
+
def eb
|
8
|
+
Aws::ElasticBeanstalk::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def version_exists?(version)
|
12
|
+
application_versions_array.include?(version)
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_version_for_environment(environment)
|
16
|
+
eb.describe_environments(environment_names: [environment]).environments.first.version_label
|
17
|
+
end
|
18
|
+
|
19
|
+
def application_versions_array
|
20
|
+
@array ||= eb.describe_application_versions.application_versions.reverse.map(&:version_label)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eb-docker-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,19 +67,19 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: aws-sdk
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '2'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: slack-notifier
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,7 +98,6 @@ description: deploy with docker and aws eb
|
|
98
98
|
email:
|
99
99
|
- thogg4@gmail.com
|
100
100
|
executables:
|
101
|
-
- eb-deploy
|
102
101
|
- ebd
|
103
102
|
extensions: []
|
104
103
|
extra_rdoc_files: []
|
@@ -108,14 +107,16 @@ files:
|
|
108
107
|
- LICENSE.txt
|
109
108
|
- README.md
|
110
109
|
- Rakefile
|
111
|
-
- bin/eb-deploy
|
112
110
|
- bin/ebd
|
113
111
|
- eb-docker-deploy.gemspec
|
114
112
|
- lib/deploy.rb
|
115
|
-
- lib/deploy/
|
116
|
-
- lib/deploy/
|
113
|
+
- lib/deploy/checks.rb
|
114
|
+
- lib/deploy/commands.rb
|
117
115
|
- lib/deploy/output.rb
|
116
|
+
- lib/deploy/runner.rb
|
117
|
+
- lib/deploy/utility.rb
|
118
118
|
- lib/deploy/version.rb
|
119
|
+
- lib/deploy/versions.rb
|
119
120
|
homepage: ''
|
120
121
|
licenses:
|
121
122
|
- MIT
|
data/bin/eb-deploy
DELETED
data/lib/deploy/deployer.rb
DELETED
@@ -1,187 +0,0 @@
|
|
1
|
-
module Deploy
|
2
|
-
class Deployer < Thor
|
3
|
-
include Deploy::Output
|
4
|
-
include DockerHubApi
|
5
|
-
|
6
|
-
desc 'setup config', 'setup config'
|
7
|
-
def setup
|
8
|
-
# setup aws config
|
9
|
-
|
10
|
-
(shout('AWS creds already configured at ~/.aws/config'); exit(1)) if File.exist?(File.expand_path('~/.aws/config'))
|
11
|
-
|
12
|
-
key = ask('Enter AWS Key:')
|
13
|
-
secret = ask('Enter AWS Secret:')
|
14
|
-
|
15
|
-
Dir.mkdir(File.expand_path('~/.aws'))
|
16
|
-
|
17
|
-
File.open(File.expand_path('~/.aws/config'), 'w') do |f|
|
18
|
-
f.puts '[default]'
|
19
|
-
f.puts "aws_access_key_id = #{key}"
|
20
|
-
f.puts "aws_secret_access_key = #{secret}"
|
21
|
-
end
|
22
|
-
shout('AWS creds successfully configured at ~/.aws/config') if File.exist?(File.expand_path('~/.aws/config'))
|
23
|
-
|
24
|
-
# setup docker hub creds
|
25
|
-
(shout('Docker Hub creds already configured at ~/.docker/config.json'); exit(1)) if File.exist?(File.expand_path('~/.docker/config.json'))
|
26
|
-
command = "docker login"
|
27
|
-
exit(1) unless system(command)
|
28
|
-
end
|
29
|
-
|
30
|
-
method_option :version, aliases: '-v', desc: 'Version'
|
31
|
-
method_option :environment, aliases: '-e', desc: 'Environment'
|
32
|
-
method_option :no_build, aliases: '--no-build', desc: 'Do not Build Image'
|
33
|
-
desc 'deploy', 'deploy'
|
34
|
-
def deploy
|
35
|
-
check_setup
|
36
|
-
|
37
|
-
environment = options[:environment]
|
38
|
-
no_build = options[:no_build]
|
39
|
-
|
40
|
-
version = options[:version]
|
41
|
-
check_version(version)
|
42
|
-
|
43
|
-
repo = ENV['DOCKER_REPO']
|
44
|
-
|
45
|
-
if !no_build
|
46
|
-
announce({ color: '#6080C0', title: "Deployment started with build", text: "Deploying version #{version} to #{environment || 'stage'}" })
|
47
|
-
build_image(repo, version)
|
48
|
-
|
49
|
-
tag_image_as_latest(repo, version)
|
50
|
-
|
51
|
-
push_image(repo, version)
|
52
|
-
push_image(repo, 'latest')
|
53
|
-
else
|
54
|
-
announce({ color: '#6080C0', title: "Deployment started without build", text: "Deploying version #{version} to #{environment || 'stage'}" })
|
55
|
-
end
|
56
|
-
|
57
|
-
run_deploy(version, environment)
|
58
|
-
announce({ color: 'good', title: 'Deployment Succeeded!!', text: "The current version of #{environment || 'stage'} is #{version}" })
|
59
|
-
end
|
60
|
-
|
61
|
-
method_option :version, aliases: '-v', desc: 'Version'
|
62
|
-
method_option :environment, aliases: '-e', desc: 'Environment'
|
63
|
-
desc 'rollback', 'rollback'
|
64
|
-
def rollback
|
65
|
-
check_setup
|
66
|
-
|
67
|
-
environment = options[:environment]
|
68
|
-
version = options[:version]
|
69
|
-
check_rollback_version(version)
|
70
|
-
|
71
|
-
repo = ENV['DOCKER_REPO']
|
72
|
-
|
73
|
-
announce({ color: '#6080C0', title: "Rollback started", text: "Rolling back to #{version} on #{environment || 'stage'}" })
|
74
|
-
|
75
|
-
pull_image(repo, version)
|
76
|
-
|
77
|
-
tag_image_as_latest(repo, version)
|
78
|
-
|
79
|
-
push_image(repo, 'latest')
|
80
|
-
|
81
|
-
run_rollback(version, environment)
|
82
|
-
announce({ color: 'good', title: 'Rollback Succeeded!!', text: "The current version of #{environment || 'stage'} is #{version}" })
|
83
|
-
end
|
84
|
-
|
85
|
-
desc 'send test notification', 'send test notification'
|
86
|
-
def test_slack
|
87
|
-
notifier('', { color: 'good', title: 'This is a test notification from eb-docker-deploy.' })
|
88
|
-
end
|
89
|
-
|
90
|
-
desc 'list versions', 'list versions'
|
91
|
-
def versions
|
92
|
-
check_setup
|
93
|
-
|
94
|
-
versions_array.each do |v|
|
95
|
-
shout v
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
no_commands do
|
100
|
-
|
101
|
-
def announce(attachments)
|
102
|
-
shout("#{attachments[:title]} - #{attachments[:text]}")
|
103
|
-
notifier('', attachments)
|
104
|
-
end
|
105
|
-
|
106
|
-
def notifier(message, attachments)
|
107
|
-
if ENV['SLACK_WEBHOOK']
|
108
|
-
@notifier ||= Slack::Notifier.new(ENV['SLACK_WEBHOOK'])
|
109
|
-
@notifier.ping(message, {
|
110
|
-
attachments: [attachments]
|
111
|
-
})
|
112
|
-
else
|
113
|
-
shout 'You can send deployment notifications if you set the SLACK_WEBHOOK environment variable.'
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def build_image(repo, tag)
|
118
|
-
shout "Building Docker Image: #{repo}:#{tag}"
|
119
|
-
command = "docker build -t #{repo}:#{tag} ."
|
120
|
-
exit(1) unless system(command)
|
121
|
-
end
|
122
|
-
|
123
|
-
def tag_image_as_latest(repo, tag)
|
124
|
-
shout "Tagging #{tag} Docker Image as Latest"
|
125
|
-
command = "docker tag -f #{repo}:#{tag} #{repo}:latest"
|
126
|
-
exit(1) unless system(command)
|
127
|
-
end
|
128
|
-
|
129
|
-
def push_image(repo, tag)
|
130
|
-
shout "Pushing Docker Image: #{repo}:#{tag}"
|
131
|
-
command = "docker push #{repo}:#{tag}"
|
132
|
-
exit(1) unless system(command)
|
133
|
-
end
|
134
|
-
|
135
|
-
def pull_image(repo, tag)
|
136
|
-
shout "Pulling Docker Image: #{repo}:#{tag}"
|
137
|
-
command = "docker pull #{repo}:#{tag}"
|
138
|
-
exit(1) unless system(command)
|
139
|
-
end
|
140
|
-
|
141
|
-
def run_deploy(version, environment=nil)
|
142
|
-
command = environment ? "eb deploy #{environment} --label #{version}" : "eb deploy --label #{version}"
|
143
|
-
shout "deploying #{version} to elastic beanstalk with command: #{command}"
|
144
|
-
exit(1) unless system(command)
|
145
|
-
end
|
146
|
-
|
147
|
-
def run_rollback(version, environment=nil)
|
148
|
-
command = environment ? "eb deploy #{environment} --version #{version}" : "eb deploy --version #{version}"
|
149
|
-
shout "deploying #{version} to elastic beanstalk with command: #{command}"
|
150
|
-
exit(1) unless system(command)
|
151
|
-
end
|
152
|
-
|
153
|
-
def check_setup
|
154
|
-
(shout('docker not installed'); exit(1)) unless command?('docker')
|
155
|
-
(shout('eb command not installed'); exit(1)) unless command?('eb')
|
156
|
-
(shout('elasticbeanstalk not configured for this project. run "eb init".'); exit(1)) unless File.exist?('.elasticbeanstalk')
|
157
|
-
(shout('AWS credentials not configured.'); exit(1)) unless File.exist?(File.expand_path('~/.aws/config'))
|
158
|
-
(shout('Docker Hub credentials not configured.'); exit(1)) unless File.exist?(File.expand_path('~/.docker/config.json'))
|
159
|
-
(shout('ENV DOCKER_REPO not set'); exit(1)) unless ENV['DOCKER_REPO']
|
160
|
-
end
|
161
|
-
|
162
|
-
def command?(command)
|
163
|
-
system("which #{command} > /dev/null 2>&1")
|
164
|
-
end
|
165
|
-
|
166
|
-
def check_rollback_version(version)
|
167
|
-
check_version(version)
|
168
|
-
(shout('You can only rollback to a previous version'); exit(1)) unless versions_array.include?(version)
|
169
|
-
end
|
170
|
-
|
171
|
-
def check_version(version)
|
172
|
-
(shout('You must pass a version with -v'); exit(1)) unless version
|
173
|
-
(shout('You are currently on that version'); exit(1)) if current_version == version
|
174
|
-
end
|
175
|
-
|
176
|
-
def current_version
|
177
|
-
versions_array.last
|
178
|
-
end
|
179
|
-
|
180
|
-
def versions_array
|
181
|
-
get("/v1/repositories/#{ENV['DOCKER_REPO']}/tags").map { |tag| tag['name'] }
|
182
|
-
end
|
183
|
-
|
184
|
-
end
|
185
|
-
|
186
|
-
end
|
187
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module DockerHubApi
|
2
|
-
|
3
|
-
ROOT_PATH = 'https://registry.hub.docker.com'
|
4
|
-
|
5
|
-
def get(url)
|
6
|
-
body = RestClient.get("#{ROOT_PATH}#{url}", { Authorization: "Basic #{get_token}" }).body
|
7
|
-
JSON.parse(body)
|
8
|
-
end
|
9
|
-
|
10
|
-
def get_token
|
11
|
-
auths_hash = JSON.parse(File.open(File.expand_path('~/.docker/config.json')).read)['auths']
|
12
|
-
docker_hub_token = auths_hash['https://index.docker.io/v1/']['auth']
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|