minke 0.16.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.codeclimate.yml +7 -0
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +4 -1
- data/Gemfile +5 -0
- data/Guardfile +70 -0
- data/README.md +12 -9
- data/bin/minke +48 -0
- data/examples/config_go.yml +44 -25
- data/lib/minke/config/config.rb +326 -0
- data/lib/minke/config/reader.rb +94 -0
- data/lib/minke/docker/docker_compose.rb +53 -0
- data/lib/minke/docker/docker_runner.rb +123 -0
- data/lib/minke/docker/service_discovery.rb +24 -0
- data/lib/minke/docker/system_runner.rb +16 -0
- data/lib/minke/generators/config.rb +106 -0
- data/lib/minke/generators/config_processor.rb +47 -0
- data/lib/minke/generators/config_variables.rb +23 -0
- data/lib/minke/generators/processor.rb +131 -0
- data/lib/minke/generators/register.rb +19 -0
- data/lib/minke/helpers/helper.rb +68 -0
- data/lib/minke/rake/app.rake +50 -198
- data/lib/minke/rake/config.rake +1 -5
- data/lib/minke/rake/docker.rake +7 -5
- data/lib/minke/tasks/build.rb +17 -0
- data/lib/minke/tasks/build_image.rb +13 -0
- data/lib/minke/tasks/cucumber.rb +34 -0
- data/lib/minke/tasks/fetch.rb +16 -0
- data/lib/minke/tasks/push.rb +22 -0
- data/lib/minke/tasks/run.rb +23 -0
- data/lib/minke/tasks/task.rb +107 -0
- data/lib/minke/tasks/test.rb +17 -0
- data/lib/minke/version.rb +1 -1
- data/lib/minke.rb +33 -9
- data/minke.gemspec +16 -11
- metadata +84 -9
- data/lib/minke/commands/go.rb +0 -27
- data/lib/minke/commands/swift.rb +0 -32
- data/lib/minke/docker.rb +0 -122
- data/lib/minke/docker_compose.rb +0 -31
- data/lib/minke/helpers.rb +0 -56
@@ -0,0 +1,68 @@
|
|
1
|
+
module Minke
|
2
|
+
module Helpers
|
3
|
+
class Helper
|
4
|
+
##
|
5
|
+
# copy assets from one location to another
|
6
|
+
def copy_assets from, to
|
7
|
+
directory = to
|
8
|
+
if File.directory?(to)
|
9
|
+
directory = File.dirname(to)
|
10
|
+
end
|
11
|
+
|
12
|
+
Dir.mkdir directory unless Dir.exist? to
|
13
|
+
FileUtils.cp from, to
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# invoke a rake task
|
18
|
+
def invoke_task task
|
19
|
+
Rake::Task[task].invoke
|
20
|
+
end
|
21
|
+
|
22
|
+
def load_consul_data server, config_file
|
23
|
+
wait_for_HTTPOK "#{server}/v1/status/leader", 0, 1
|
24
|
+
loader = ConsulLoader::Loader.new(ConsulLoader::ConfigParser.new)
|
25
|
+
puts config_file
|
26
|
+
loader.load_config config_file, server
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute_shell_command command
|
30
|
+
puts `#{command}`
|
31
|
+
$?.exitstatus
|
32
|
+
end
|
33
|
+
|
34
|
+
def fatal_error message
|
35
|
+
abort message
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# waits until a 200 response is received from the given url
|
40
|
+
def wait_for_HTTPOK url, count, successes = 0
|
41
|
+
begin
|
42
|
+
response = RestClient.send("get", url)
|
43
|
+
rescue
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
if response == nil || !response.code.to_i == 200
|
48
|
+
puts "Waiting for server #{url} to start"
|
49
|
+
sleep 1
|
50
|
+
if count < 180
|
51
|
+
wait_for_HTTPOK url, count + 1
|
52
|
+
else
|
53
|
+
raise 'Server failed to start'
|
54
|
+
end
|
55
|
+
else
|
56
|
+
if successes > 0
|
57
|
+
puts "Server: #{url} passed health check, #{successes} checks to go..."
|
58
|
+
sleep 1
|
59
|
+
wait_for_HTTPOK url, count + 1, successes - 1
|
60
|
+
else
|
61
|
+
puts "Server: #{url} healthy"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/minke/rake/app.rake
CHANGED
@@ -1,228 +1,80 @@
|
|
1
1
|
namespace :app do
|
2
2
|
|
3
|
-
desc "
|
4
|
-
task :
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
puts "## Get dependent packages"
|
9
|
-
config[:build_config][:build][:get].each do |command|
|
10
|
-
begin
|
11
|
-
container, ret = Minke::Docker.create_and_run_container config, command
|
12
|
-
ensure
|
13
|
-
Minke::Docker.delete_container container
|
14
|
-
end
|
15
|
-
end
|
16
|
-
puts ""
|
17
|
-
end
|
3
|
+
desc "fetch dependent packages"
|
4
|
+
task :fetch => ['config:set_docker_env', 'docker:fetch_images'] do
|
5
|
+
create_dependencies
|
6
|
+
runner = Minke::Tasks::Fetch.new @config, :fetch, @generator_config, @docker_runner, @docker_compose_factory, @logger, @helper
|
7
|
+
runner.run
|
18
8
|
end
|
19
9
|
|
20
10
|
desc "build application"
|
21
|
-
task :build => [:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
# do we need to build a custom build container
|
26
|
-
if config['docker']['build'] && config['docker']['build']['docker_file'] != nil
|
27
|
-
puts "## Building custom docker image"
|
28
|
-
|
29
|
-
docker_file = config['docker']['build']['docker_file']
|
30
|
-
image_name = config['application_name'] + "-buildimage"
|
31
|
-
|
32
|
-
Docker.options = {:read_timeout => 6200}
|
33
|
-
image = Docker::Image.build_from_dir docker_file, {:t => image_name}
|
34
|
-
config[:build_config][:docker][:image] = image_name
|
35
|
-
end
|
36
|
-
|
37
|
-
if config['docker']['build'] && config['docker']['build']['image'] != nil
|
38
|
-
config[:build_config][:docker][:image] = config['docker']['build']['image']
|
39
|
-
end
|
40
|
-
|
41
|
-
if config['build'] != nil && config['build']['before'] != nil
|
42
|
-
config['build']['before'].each do |task|
|
43
|
-
puts "## Running before build task: #{task}"
|
44
|
-
Rake::Task[task].invoke
|
45
|
-
|
46
|
-
puts ""
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
config[:build_config][:build][:build].each do |command|
|
51
|
-
begin
|
52
|
-
# Build application
|
53
|
-
container, ret = Minke::Docker.create_and_run_container config, command
|
54
|
-
raise Exception, 'Error running command' unless ret == 0
|
55
|
-
ensure
|
56
|
-
Minke::Docker.delete_container container
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
puts ""
|
11
|
+
task :build => [:fetch] do
|
12
|
+
create_dependencies
|
13
|
+
runner = Minke::Tasks::Build.new @config, :build, @generator_config, @docker_runner, @docker_compose_factory, @logger, @helper
|
14
|
+
runner.run
|
61
15
|
end
|
62
16
|
|
63
17
|
desc "run unit tests"
|
64
18
|
task :test => [:build] do
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
config['test']['before'].each do |task|
|
69
|
-
puts "## Running before test task: #{task}"
|
70
|
-
Rake::Task[task].invoke
|
71
|
-
|
72
|
-
puts ""
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
puts "## Test application"
|
77
|
-
config[:build_config][:build][:test].each do |command|
|
78
|
-
begin
|
79
|
-
# Test application
|
80
|
-
container, ret = Minke::Docker.create_and_run_container config, command
|
81
|
-
raise Exception, 'Error running command' unless ret == 0
|
82
|
-
ensure
|
83
|
-
Minke::Docker.delete_container container
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
puts ""
|
88
|
-
end
|
89
|
-
|
90
|
-
task :copy_assets do
|
91
|
-
puts "## Copy assets"
|
92
|
-
|
93
|
-
config = Minke::Helpers.config
|
94
|
-
|
95
|
-
if config['after_build'] != nil && config['after_build']['copy_assets'] != nil
|
96
|
-
Minke::Helpers.copy_files config['after_build']['copy_assets']
|
97
|
-
end
|
98
|
-
|
99
|
-
puts ""
|
19
|
+
create_dependencies
|
20
|
+
runner = Minke::Tasks::Test.new @config, :test, @generator_config, @docker_runner, @docker_compose_factory, @logger, @helper
|
21
|
+
runner.run
|
100
22
|
end
|
101
23
|
|
102
24
|
desc "build Docker image for application"
|
103
|
-
task :
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
Docker.options = {:read_timeout => 6200}
|
109
|
-
image = Docker::Image.build_from_dir config['docker']['docker_file'], {:t => config['application_name']}
|
110
|
-
|
111
|
-
puts ""
|
25
|
+
task :build_image => [:test] do
|
26
|
+
create_dependencies
|
27
|
+
runner = Minke::Tasks::BuildImage.new @config, :test, @generator_config, @docker_runner, @docker_compose_factory, @logger, @helper
|
28
|
+
runner.run
|
112
29
|
end
|
113
30
|
|
114
31
|
desc "run application with Docker Compose"
|
115
|
-
task :run => ['config:set_docker_env'
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
if config['run']['docker'] != nil && config['run']['docker']['compose_file'] != nil
|
121
|
-
config_file = config['run']['docker']['compose_file']
|
122
|
-
else
|
123
|
-
config_file = config['docker']['compose_file']
|
124
|
-
end
|
125
|
-
|
126
|
-
compose = Minke::DockerCompose.new config_file
|
127
|
-
|
128
|
-
begin
|
129
|
-
compose.up
|
130
|
-
|
131
|
-
# do we need to run any tasks after the server starts?
|
132
|
-
if config['run']['after_start'] != nil
|
133
|
-
config['run']['after_start'].each do |task|
|
134
|
-
puts "## Running after_start task: #{task}"
|
135
|
-
Rake::Task[task].invoke
|
136
|
-
|
137
|
-
puts ""
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
if config['run']['consul_loader']['enabled']
|
142
|
-
Minke::Helpers.wait_until_server_running "#{config['run']['consul_loader']['url']}/v1/status/leader", 0
|
143
|
-
loader = ConsulLoader::Loader.new(ConsulLoader::ConfigParser.new)
|
144
|
-
loader.load_config config['run']['consul_loader']['config_file'], config['run']['consul_loader']['url']
|
145
|
-
|
146
|
-
puts ""
|
147
|
-
end
|
148
|
-
|
149
|
-
compose.logs
|
150
|
-
rescue SystemExit, Interrupt
|
151
|
-
compose.stop
|
152
|
-
compose.rm unless Docker.info["Driver"] == "btrfs"
|
153
|
-
end
|
32
|
+
task :run => ['config:set_docker_env'] do
|
33
|
+
create_dependencies
|
34
|
+
runner = Minke::Tasks::Run.new @config, :run, @generator_config, @docker_runner, @docker_compose_factory, @logger, @helper
|
35
|
+
runner.run
|
154
36
|
end
|
155
37
|
|
156
38
|
desc "build and run application with Docker Compose"
|
157
|
-
task :build_and_run => [:
|
39
|
+
task :build_and_run => [:build_image, :run]
|
158
40
|
|
159
41
|
desc "run end to end Cucumber tests USAGE: rake app:cucumber[@tag]"
|
160
|
-
task :cucumber, [:feature] => ['config:set_docker_env'
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
if args[:feature] != nil
|
166
|
-
feature = "--tags #{args[:feature]}"
|
167
|
-
else
|
168
|
-
feature = ""
|
169
|
-
end
|
42
|
+
task :cucumber, [:feature] => ['config:set_docker_env'] do |t, args|
|
43
|
+
create_dependencies
|
44
|
+
runner = Minke::Tasks::Cucumber.new @config, :cucumber, @generator_config, @docker_runner, @docker_compose_factory, @logger, @helper
|
45
|
+
runner.run
|
46
|
+
end
|
170
47
|
|
171
|
-
|
48
|
+
desc "push built image to Docker registry"
|
49
|
+
task :push do
|
50
|
+
create_dependencies
|
51
|
+
runner = Minke::Tasks::Push.new
|
52
|
+
runner.run
|
53
|
+
end
|
172
54
|
|
173
|
-
|
55
|
+
def create_dependencies
|
56
|
+
@system_runner = Minke::Docker::SystemRunner.new
|
57
|
+
@docker_compose_factory ||= Minke::Docker::DockerComposeFactory.new @system_runner
|
174
58
|
|
175
|
-
if config
|
176
|
-
|
177
|
-
|
178
|
-
config_file = config['docker']['compose_file']
|
59
|
+
if @config == nil
|
60
|
+
reader = Minke::Config::Reader.new
|
61
|
+
@config = reader.read './config.yml'
|
179
62
|
end
|
180
63
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
# do we need to run any tasks after the server starts?
|
187
|
-
if config['cucumber']['after_start'] != nil
|
188
|
-
config['cucumber']['after_start'].each do |task|
|
189
|
-
puts "## Running after_start task: #{task}"
|
190
|
-
|
191
|
-
begin
|
192
|
-
Rake::Task[task].invoke
|
193
|
-
rescue Exception => msg
|
194
|
-
puts "Error running rake task: #{msg}"
|
195
|
-
raise msg
|
196
|
-
end
|
197
|
-
puts ""
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
if config['cucumber']['consul_loader']['enabled']
|
202
|
-
Minke::Helpers.wait_until_server_running "#{config['cucumber']['consul_loader']['url']}/v1/status/leader", 0
|
203
|
-
loader = ConsulLoader::Loader.new(ConsulLoader::ConfigParser.new)
|
204
|
-
loader.load_config config['cucumber']['consul_loader']['config_file'], config['cucumber']['consul_loader']['url']
|
64
|
+
if @generator_config == nil
|
65
|
+
variables = Minke::Generators::ConfigVariables.new.tap do |v|
|
66
|
+
v.application_name = @config.application_name
|
67
|
+
v.namespace = @config.namespace
|
68
|
+
v.src_root = File.expand_path('../', __FILE__)
|
205
69
|
end
|
206
70
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
sh "cucumber --color -f pretty #{feature}"
|
212
|
-
status = $?.exitstatus
|
213
|
-
ensure
|
214
|
-
compose.stop
|
215
|
-
compose.rm unless Docker.info["Driver"] == "btrfs"
|
216
|
-
|
217
|
-
abort "Cucumber steps failed" unless status == 0
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
desc "push built image to Docker registry"
|
222
|
-
task :push => ['config:load_config'] do
|
223
|
-
puts "## Push image to registry"
|
71
|
+
processor = Minke::Generators::Processor.new variables
|
72
|
+
processor.load_generators
|
73
|
+
@generator_config = processor.get_generator @config.generator_name
|
74
|
+
end
|
224
75
|
|
225
|
-
|
226
|
-
|
76
|
+
@docker_runner ||= Minke::Docker::DockerRunner.new
|
77
|
+
@logger ||= Logger.new(STDOUT)
|
78
|
+
@helper ||= Minke::Helpers::Helper.new
|
227
79
|
end
|
228
80
|
end
|
data/lib/minke/rake/config.rake
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
namespace :config do
|
2
|
-
task :load_config do
|
3
|
-
Minke::Helpers.load_config './config.yml'
|
4
|
-
end
|
5
|
-
|
6
2
|
task :set_docker_env do
|
7
|
-
DOCKER_IP = Minke::Docker.get_docker_ip_address
|
3
|
+
DOCKER_IP = Minke::Docker::DockerRunner.new.get_docker_ip_address
|
8
4
|
ENV['DOCKER_IP'] = DOCKER_IP
|
9
5
|
end
|
10
6
|
end
|
data/lib/minke/rake/docker.rake
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
namespace :docker do
|
2
2
|
desc "updates build images for swagger and golang will overwrite existing images"
|
3
3
|
task :update_images do
|
4
|
-
config = Minke::
|
4
|
+
config = Minke::Config::Reader.new.read './config.yml'
|
5
5
|
|
6
6
|
puts "## Updating Docker images"
|
7
|
-
|
7
|
+
runner = Minke::Docker::DockerRunner.new
|
8
|
+
runner.pull_image config.docker.build_image
|
8
9
|
|
9
10
|
puts ""
|
10
11
|
end
|
11
12
|
|
12
13
|
desc "pull images for golang from Docker registry if not already downloaded"
|
13
14
|
task :fetch_images do
|
14
|
-
config = Minke::
|
15
|
-
|
15
|
+
config = Minke::Config::Reader.new.read './config.yml'
|
16
|
+
|
16
17
|
puts "## Pulling Docker images"
|
17
|
-
|
18
|
+
runner = Minke::Docker::DockerRunner.new
|
19
|
+
runner.pull_image config.docker.build_image unless runner.find_image config.docker.build_image
|
18
20
|
|
19
21
|
puts ""
|
20
22
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
class Build < Task
|
4
|
+
|
5
|
+
def run args = nil
|
6
|
+
puts "## Build application"
|
7
|
+
run_with_block do
|
8
|
+
@generator_settings.build_settings.build_commands.build.each do |command|
|
9
|
+
puts command
|
10
|
+
run_command_in_container command
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
class Cucumber < Task
|
4
|
+
|
5
|
+
def run args = nil
|
6
|
+
puts "## Running cucumber with tags #{args}"
|
7
|
+
|
8
|
+
begin
|
9
|
+
status = 0
|
10
|
+
@compose.up
|
11
|
+
|
12
|
+
run_with_block do
|
13
|
+
status = @helper.execute_shell_command "cucumber --color -f pretty #{get_features args}"
|
14
|
+
end
|
15
|
+
|
16
|
+
ensure
|
17
|
+
@compose.stop
|
18
|
+
@compose.rm
|
19
|
+
|
20
|
+
@helper.fatal_error "Cucumber steps failed" unless status == 0
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_features args
|
25
|
+
if args != nil && args[:feature] != nil
|
26
|
+
feature = "--tags #{args[:feature]}"
|
27
|
+
else
|
28
|
+
feature = ""
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
class Fetch < Task
|
4
|
+
|
5
|
+
def run args = nil
|
6
|
+
puts "## Update dependencies"
|
7
|
+
run_with_block do
|
8
|
+
@generator_settings.build_settings.build_commands.fetch.each do |command|
|
9
|
+
run_command_in_container command
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
class Push < Task
|
4
|
+
|
5
|
+
def run args = nil
|
6
|
+
puts "## Push image to registry"
|
7
|
+
|
8
|
+
url = @config.docker_registry.url
|
9
|
+
user = @config.docker_registry.user
|
10
|
+
password = @config.docker_registry.password
|
11
|
+
email = @config.docker_registry.email
|
12
|
+
namespace = @config.docker_registry.namespace
|
13
|
+
image_tag = "#{namespace}/#{@config.application_name}"
|
14
|
+
|
15
|
+
@docker_runner.login_registry url, user, password, email
|
16
|
+
@docker_runner.tag_image @config.application_name, image_tag
|
17
|
+
@docker_runner.push_image image_tag
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
class Run < Task
|
4
|
+
|
5
|
+
def run args = nil
|
6
|
+
puts "## Run application with docker compose"
|
7
|
+
|
8
|
+
begin
|
9
|
+
@compose.up
|
10
|
+
|
11
|
+
run_with_block do
|
12
|
+
@compose.logs
|
13
|
+
end
|
14
|
+
|
15
|
+
ensure
|
16
|
+
@compose.stop
|
17
|
+
@compose.rm
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
##
|
4
|
+
# Task is a base implementation of a rake task such as fetch, build, etc
|
5
|
+
class Task
|
6
|
+
|
7
|
+
def initialize config, task, generator_settings, docker_runner, docker_compose_factory, logger, helper
|
8
|
+
@config = config
|
9
|
+
@task = task
|
10
|
+
@generator_settings = generator_settings
|
11
|
+
@docker_runner = docker_runner
|
12
|
+
@logger = logger
|
13
|
+
@helper = helper
|
14
|
+
@task_settings = config.send(task)
|
15
|
+
|
16
|
+
@build_image = @generator_settings.build_settings.docker_settings.image
|
17
|
+
@build_image = config.build_image_for(task) unless config.build_image_for(task) == nil
|
18
|
+
|
19
|
+
@build_file = config.build_docker_file_for(task)
|
20
|
+
|
21
|
+
@compose_file = config.compose_file_for(task)
|
22
|
+
|
23
|
+
@compose = docker_compose_factory.create @compose_file unless @compose_file == nil
|
24
|
+
end
|
25
|
+
|
26
|
+
##
|
27
|
+
# run_with_config executes the task steps for the given
|
28
|
+
# - block containing custom actions
|
29
|
+
def run_with_block
|
30
|
+
#TODO: Need to add some tests for this stuff
|
31
|
+
run_steps @task_settings.pre unless @task_settings == nil || @task_settings.pre == nil
|
32
|
+
|
33
|
+
yield if block_given?
|
34
|
+
|
35
|
+
run_steps @task_settings.post unless @task_settings == nil || @task_settings.post == nil
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# execute the defined steps in the given Minke::Config::TaskRunSettings
|
40
|
+
def run_steps steps
|
41
|
+
execute_rake_tasks steps.tasks unless steps.tasks == nil
|
42
|
+
load_consul_data steps.consul_loader unless steps.consul_loader == nil
|
43
|
+
wait_for_health_check steps.health_check unless steps.health_check == nil
|
44
|
+
copy_assets steps.copy unless steps.copy == nil
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# execute an array of rake tasks
|
49
|
+
def execute_rake_tasks tasks
|
50
|
+
tasks.each { |t| @helper.invoke_task t }
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# load consul config
|
55
|
+
def load_consul_data config
|
56
|
+
@helper.load_consul_data build_address(config.url), config.config_file
|
57
|
+
end
|
58
|
+
|
59
|
+
def wait_for_health_check url
|
60
|
+
@helper.wait_for_HTTPOK build_address(url), 3, 0
|
61
|
+
end
|
62
|
+
|
63
|
+
def copy_assets assets
|
64
|
+
assets.each { |a| @helper.copy_assets a.from, a.to }
|
65
|
+
end
|
66
|
+
|
67
|
+
def run_command_in_container command
|
68
|
+
begin
|
69
|
+
settings = @generator_settings.build_settings.docker_settings
|
70
|
+
if @build_file != nil
|
71
|
+
@build_image = "#{@config.application_name}-buildimage"
|
72
|
+
@docker_runner.build_image @build_file, @build_image
|
73
|
+
end
|
74
|
+
|
75
|
+
container, success = @docker_runner.create_and_run_container @build_image, settings.binds, settings.env, settings.working_directory, command
|
76
|
+
|
77
|
+
# throw exception if failed
|
78
|
+
@helper.fatal_error "Unable to run command #{command}" unless success
|
79
|
+
ensure
|
80
|
+
@docker_runner.delete_container container
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def build_address url
|
85
|
+
if url.type == 'public'
|
86
|
+
"#{url.protocol}://#{url.address}:#{url.port}#{url.path}"
|
87
|
+
else
|
88
|
+
public_address = @compose.public_address url.address, url.port
|
89
|
+
"#{url.protocol}://#{public_address}#{url.path}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def log message, level
|
94
|
+
## implement logger implementation
|
95
|
+
case level
|
96
|
+
when :error
|
97
|
+
@logger.error message
|
98
|
+
when :info
|
99
|
+
@logger.info message
|
100
|
+
when :debug
|
101
|
+
@logger.debug message
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Minke
|
2
|
+
module Tasks
|
3
|
+
class Test < Task
|
4
|
+
|
5
|
+
def run args = nil
|
6
|
+
puts "## Test application"
|
7
|
+
|
8
|
+
run_with_block do
|
9
|
+
@generator_settings.build_settings.build_commands.test.each do |command|
|
10
|
+
run_command_in_container command
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/minke/version.rb
CHANGED