dockly 1.8.0 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/dockly/build_cache/base.rb +2 -1
- data/lib/dockly/build_cache/docker.rb +37 -24
- data/lib/dockly/deb.rb +8 -8
- data/lib/dockly/version.rb +1 -1
- data/spec/dockly/deb_spec.rb +20 -7
- metadata +3 -2
data/README.md
CHANGED
@@ -281,7 +281,7 @@ In addition to the above attributes, `deb` has the following references:
|
|
281
281
|
- required: `false`
|
282
282
|
- default: `nil`
|
283
283
|
- class: `Dockly::Foreman`
|
284
|
-
- description: any Foreman scripts used in the deb
|
284
|
+
- description: any Foreman scripts used in the deb.
|
285
285
|
|
286
286
|
`rpm`
|
287
287
|
-----
|
@@ -9,7 +9,7 @@ class Dockly::BuildCache::Base
|
|
9
9
|
dsl_attribute :s3_bucket, :s3_object_prefix, :use_latest,
|
10
10
|
:hash_command, :build_command, :parameter_commands,
|
11
11
|
:base_dir, :command_dir, :output_dir, :tmp_dir,
|
12
|
-
:keep_old_files
|
12
|
+
:keep_old_files, :safe_push_cache
|
13
13
|
|
14
14
|
default_value :use_latest, false
|
15
15
|
default_value :parameter_commands, {}
|
@@ -17,6 +17,7 @@ class Dockly::BuildCache::Base
|
|
17
17
|
default_value :output_dir, '.'
|
18
18
|
default_value :tmp_dir, Dir.tmpdir
|
19
19
|
default_value :keep_old_files, false
|
20
|
+
default_value :safe_push_cache, false
|
20
21
|
|
21
22
|
def execute!
|
22
23
|
debug "Looking for cache for hash: #{hash_output}"
|
@@ -1,10 +1,6 @@
|
|
1
1
|
class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
|
2
2
|
attr_accessor :image
|
3
3
|
|
4
|
-
def wait_time
|
5
|
-
300 # max 5 minutes
|
6
|
-
end
|
7
|
-
|
8
4
|
def execute!
|
9
5
|
ensure_present! :image
|
10
6
|
super
|
@@ -29,25 +25,11 @@ class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
|
|
29
25
|
ensure_present! :output_dir
|
30
26
|
if cache = pull_from_s3(version)
|
31
27
|
debug "inserting to #{output_directory}"
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
'Cmd' => ['/bin/bash', '-c', [
|
38
|
-
"mkdir -p #{File.dirname(output_directory)}",
|
39
|
-
'&&',
|
40
|
-
"tar #{tar_flags} #{File.join('/', 'host', path)} -C #{File.dirname(output_directory)}"
|
41
|
-
].join(' ')
|
42
|
-
],
|
43
|
-
'Volumes' => {
|
44
|
-
File.join('/', 'host', path_parent) => { path_parent => 'rw' }
|
45
|
-
}
|
46
|
-
)
|
47
|
-
container.start('Binds' => ["#{path_parent}:#{File.join('/', 'host', path_parent)}"])
|
48
|
-
result = container.wait['StatusCode']
|
49
|
-
raise "Got bad status code when copying build cache: #{result}" unless result.zero?
|
50
|
-
self.image = container.commit
|
28
|
+
if safe_push_cache
|
29
|
+
push_cache_safe(cache)
|
30
|
+
else
|
31
|
+
push_cache_with_volumes(cache)
|
32
|
+
end
|
51
33
|
debug "inserted cache into #{output_directory}"
|
52
34
|
cache.close
|
53
35
|
else
|
@@ -55,6 +37,37 @@ class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
|
|
55
37
|
end
|
56
38
|
end
|
57
39
|
|
40
|
+
def push_cache_safe(cache)
|
41
|
+
container = image.run("mkdir -p #{File.dirname(output_directory)}")
|
42
|
+
image_with_dir = container.tap(&:wait).commit
|
43
|
+
self.image = image_with_dir.insert_local(
|
44
|
+
'localPath' => cache.path,
|
45
|
+
'outputPath' => File.dirname(output_directory)
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def push_cache_with_volumes(cache)
|
50
|
+
path = File.expand_path(cache.path)
|
51
|
+
path_parent = File.dirname(path)
|
52
|
+
tar_flags = keep_old_files ? '-xkf' : 'xf'
|
53
|
+
container = ::Docker::Container.create(
|
54
|
+
'Image' => image.id,
|
55
|
+
'Cmd' => ['/bin/bash', '-c', [
|
56
|
+
"mkdir -p #{File.dirname(output_directory)}",
|
57
|
+
'&&',
|
58
|
+
"tar #{tar_flags} #{File.join('/', 'host', path)} -C #{File.dirname(output_directory)}"
|
59
|
+
].join(' ')
|
60
|
+
],
|
61
|
+
'Volumes' => {
|
62
|
+
File.join('/', 'host', path_parent) => { path_parent => 'rw' }
|
63
|
+
}
|
64
|
+
)
|
65
|
+
container.start('Binds' => ["#{path_parent}:#{File.join('/', 'host', path_parent)}"])
|
66
|
+
result = container.wait['StatusCode']
|
67
|
+
raise "Got bad status code when copying build cache: #{result}" unless result.zero?
|
68
|
+
self.image = container.commit
|
69
|
+
end
|
70
|
+
|
58
71
|
def copy_output_dir(container)
|
59
72
|
ensure_present! :output_dir
|
60
73
|
file_path = File.join(tmp_dir,s3_object(hash_output))
|
@@ -92,7 +105,7 @@ class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
|
|
92
105
|
debug "running command `#{command}` on image #{image.id}"
|
93
106
|
container = image.run(["/bin/bash", "-c", "cd #{command_directory} && #{command}"])
|
94
107
|
debug "command running in container #{container.id}"
|
95
|
-
status = container.wait(
|
108
|
+
status = container.wait(docker.timeout)['StatusCode']
|
96
109
|
resp = container.streaming_logs(stdout: true, stderr: true)
|
97
110
|
debug "`#{command}` returned the following output:"
|
98
111
|
debug resp.strip
|
data/lib/dockly/deb.rb
CHANGED
@@ -10,7 +10,7 @@ class Dockly::Deb
|
|
10
10
|
:post_uninstall, :s3_bucket, :files, :app_user, :vendor
|
11
11
|
|
12
12
|
dsl_class_attribute :docker, Dockly::Docker
|
13
|
-
dsl_class_attribute :foreman, Dockly::Foreman
|
13
|
+
dsl_class_attribute :foreman, Dockly::Foreman, type: Array
|
14
14
|
|
15
15
|
default_value :version, '0.0'
|
16
16
|
default_value :release, '0'
|
@@ -127,14 +127,14 @@ private
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def add_foreman(package)
|
130
|
-
return if foreman.
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
package.input('.')
|
130
|
+
return if (foreman || []).empty?
|
131
|
+
foreman.each do |fore|
|
132
|
+
info "adding foreman export '#{fore.name}'"
|
133
|
+
fore.create!
|
134
|
+
package.attributes[:prefix] = fore.init_dir
|
135
|
+
Dir.chdir(fore.build_dir) { package.input('.') }
|
136
|
+
package.attributes[:prefix] = nil
|
136
137
|
end
|
137
|
-
package.attributes[:prefix] = nil
|
138
138
|
end
|
139
139
|
|
140
140
|
def add_files(package)
|
data/lib/dockly/version.rb
CHANGED
data/spec/dockly/deb_spec.rb
CHANGED
@@ -25,23 +25,36 @@ describe Dockly::Deb do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
context 'when it has
|
28
|
+
context 'when it has foreman exports' do
|
29
|
+
let(:contents) { `dpkg --contents #{filename}` }
|
30
|
+
|
29
31
|
before do
|
30
32
|
subject.foreman do
|
31
|
-
name 'foreman'
|
32
|
-
init_dir '/etc/systemd/system'
|
33
|
+
name 'systemd-foreman'
|
33
34
|
build_dir 'build/foreman'
|
35
|
+
init_dir '/etc/systemd/system'
|
34
36
|
procfile File.join(File.dirname(__FILE__), '..', 'fixtures', 'Procfile')
|
35
37
|
user 'root'
|
36
38
|
type 'systemd'
|
37
39
|
prefix '/bin/sh'
|
38
40
|
end
|
39
|
-
end
|
40
41
|
|
41
|
-
|
42
|
+
subject.foreman do
|
43
|
+
name 'upstart-foreman'
|
44
|
+
build_dir 'build/foreman'
|
45
|
+
init_dir '/etc/systemd/system'
|
46
|
+
procfile File.join(File.dirname(__FILE__), '..', 'fixtures', 'Procfile')
|
47
|
+
user 'root'
|
48
|
+
type 'upstart'
|
49
|
+
prefix '/bin/sh'
|
50
|
+
end
|
51
|
+
|
42
52
|
subject.create_package!
|
43
|
-
|
44
|
-
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'exports the foreman to the deb', :cur do
|
56
|
+
expect(contents).to match(/upstart-foreman/)
|
57
|
+
expect(contents).to match(/systemd-foreman/)
|
45
58
|
end
|
46
59
|
end
|
47
60
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: clamp
|
@@ -362,3 +362,4 @@ test_files:
|
|
362
362
|
- spec/fixtures/test-3.tar
|
363
363
|
- spec/spec_helper.rb
|
364
364
|
- spec/support/vcr.rb
|
365
|
+
has_rdoc:
|