picsolve_docker_builder 0.1.1 → 0.2.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/CHANGELOG.md +7 -0
- data/README.md +45 -2
- data/integration/compose_hello_world_new_config/.docker-builder.yml +18 -0
- data/integration/compose_hello_world_new_config/.gitignore +1 -0
- data/integration/compose_hello_world_new_config/Gemfile +2 -0
- data/integration/compose_hello_world_new_config/Rakefile +3 -0
- data/integration/compose_hello_world_old_config/.docker-builder.yml +4 -0
- data/integration/compose_hello_world_old_config/.gitignore +1 -0
- data/integration/compose_hello_world_old_config/Gemfile +2 -0
- data/integration/compose_hello_world_old_config/Rakefile +3 -0
- data/integration/compose_hello_world_old_config/docker-compose.yml +4 -0
- data/integration/integration_compose_spec.rb +25 -0
- data/integration/integration_helpers.rb +45 -0
- data/integration/integration_play_spec.rb +4 -38
- data/integration/lib_hello_world/.gitignore +12 -0
- data/integration/lib_hello_world/README +4 -0
- data/integration/lib_hello_world/app/picsolve/helloworld/Person.scala +8 -0
- data/integration/lib_hello_world/build.sbt +42 -0
- data/integration/lib_hello_world/conf/application.conf +0 -0
- data/integration/lib_hello_world/conf/logback.xml +22 -0
- data/integration/lib_hello_world/project/build.properties +4 -0
- data/integration/lib_hello_world/project/plugins.sbt +4 -0
- data/integration/lib_hello_world/test/PersonSpec.scala +24 -0
- data/integration/lib_hello_world/version.sbt +1 -0
- data/integration/spec_helper.rb +2 -0
- data/lib/picsolve_docker_builder/builder/builder.rb +4 -2
- data/lib/picsolve_docker_builder/composer/composer.rb +45 -74
- data/lib/picsolve_docker_builder/composer/container.rb +79 -0
- data/lib/picsolve_docker_builder/composer/image.rb +10 -8
- data/lib/picsolve_docker_builder/frame.rb +13 -1
- data/lib/picsolve_docker_builder/helpers/config/base.rb +14 -0
- data/lib/picsolve_docker_builder/helpers/config/secret.rb +14 -0
- data/lib/picsolve_docker_builder/helpers/config/variable_object.rb +68 -0
- data/lib/picsolve_docker_builder/helpers/config_manager.rb +96 -0
- data/lib/picsolve_docker_builder/helpers/kubernetes/rc.rb +28 -6
- data/lib/picsolve_docker_builder/helpers/kubernetes_manager.rb +126 -47
- data/lib/picsolve_docker_builder/helpers/repository.rb +89 -3
- data/lib/picsolve_docker_builder/helpers/ssh_forward.rb +9 -1
- data/lib/picsolve_docker_builder/nodejs.rb +135 -0
- data/lib/picsolve_docker_builder/version.rb +1 -1
- data/lib/tasks/compose.rake +2 -0
- data/lib/tasks/nodejs.rake +11 -0
- data/picsolve_docker_builder.gemspec +1 -1
- metadata +36 -8
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'rubygems/package'
|
2
|
+
require 'zlib'
|
3
|
+
require 'pathname'
|
4
|
+
require 'picsolve_docker_builder/frame'
|
5
|
+
require 'picsolve_docker_builder/builder/builder'
|
6
|
+
|
7
|
+
module PicsolveDockerBuilder
|
8
|
+
# Build a node js project
|
9
|
+
class NodeJs < Frame
|
10
|
+
def output_dir
|
11
|
+
config['nodejs']['output_dir']
|
12
|
+
end
|
13
|
+
|
14
|
+
def default_config
|
15
|
+
c = super
|
16
|
+
c['nodejs'] = {
|
17
|
+
'build_commands' => [
|
18
|
+
'npm install',
|
19
|
+
'grunt',
|
20
|
+
'tar cvzf html.tar.gz -C frontend/dist .'
|
21
|
+
]
|
22
|
+
}
|
23
|
+
c
|
24
|
+
end
|
25
|
+
|
26
|
+
def prepare_volumes
|
27
|
+
execute [
|
28
|
+
'chown',
|
29
|
+
'-c',
|
30
|
+
build_user,
|
31
|
+
build_user_home
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
def docker_build_files
|
36
|
+
f = []
|
37
|
+
f << Builder::File.new(
|
38
|
+
'app.tar.gz',
|
39
|
+
source: File.join(base_dir, 'html.tar.gz'),
|
40
|
+
destination: '/var/www/html'
|
41
|
+
)
|
42
|
+
|
43
|
+
begin
|
44
|
+
add_files = config['docker']['docker_build']['add_files']
|
45
|
+
rescue NoMethodError
|
46
|
+
add_files = []
|
47
|
+
end
|
48
|
+
|
49
|
+
add_files.each do |file|
|
50
|
+
f << Builder::File.new(
|
51
|
+
file,
|
52
|
+
source: File.join(base_dir, file)
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
f
|
57
|
+
end
|
58
|
+
|
59
|
+
def docker_builder_hooks
|
60
|
+
begin
|
61
|
+
hooks = config['docker']['dockerfile_hooks']['docker_build']
|
62
|
+
# symbolize the keys
|
63
|
+
hooks.keys.each do |key|
|
64
|
+
begin
|
65
|
+
key_sym = key.to_sym
|
66
|
+
rescue
|
67
|
+
key_sym = key
|
68
|
+
end
|
69
|
+
hooks[key_sym || key] = hooks.delete(key)
|
70
|
+
end
|
71
|
+
rescue NoMethodError
|
72
|
+
hooks = {}
|
73
|
+
end
|
74
|
+
|
75
|
+
hooks[:before_adds] = [
|
76
|
+
'# remove existing /var/www/html',
|
77
|
+
'RUN rm -rf /var/www/html'
|
78
|
+
]
|
79
|
+
hooks[:after_adds] = [
|
80
|
+
'# ensure rights',
|
81
|
+
'RUN chown -R root:www-data /var/www/html'
|
82
|
+
]
|
83
|
+
hooks
|
84
|
+
end
|
85
|
+
|
86
|
+
def docker_builder
|
87
|
+
Builder::Builder.new(
|
88
|
+
base_image: runtime_image_name,
|
89
|
+
maintainer: 'Picsolve Onlineops <onlineops@picsolve.com>',
|
90
|
+
files: docker_build_files,
|
91
|
+
hooks: docker_builder_hooks
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
def docker_build
|
96
|
+
@docker_build = docker_builder.build
|
97
|
+
end
|
98
|
+
|
99
|
+
def asset_build_command
|
100
|
+
runs = config['nodejs']['build_commands'].map do |tasks|
|
101
|
+
"#{tasks}"
|
102
|
+
end
|
103
|
+
runs = [
|
104
|
+
'export LANG=en_US.UTF-8',
|
105
|
+
'export LANGUAGE=en_US.UTF-8',
|
106
|
+
'export LC_ALL=en_US.UTF-8',
|
107
|
+
"export PATH=$PATH:#{File.join(build_dir, '/node_modules/.bin')}"
|
108
|
+
] + runs
|
109
|
+
runs.join ' && '
|
110
|
+
end
|
111
|
+
|
112
|
+
def asset_build
|
113
|
+
log.info "start asset building with image #{image_name}"
|
114
|
+
|
115
|
+
start
|
116
|
+
|
117
|
+
prepare_volumes
|
118
|
+
|
119
|
+
build_cmd = [
|
120
|
+
'gosu', build_user, 'bash', '-c', asset_build_command
|
121
|
+
]
|
122
|
+
|
123
|
+
execute_attach build_cmd
|
124
|
+
|
125
|
+
log.info "finished asset building with image #{image_name}"
|
126
|
+
|
127
|
+
stop
|
128
|
+
end
|
129
|
+
|
130
|
+
def build
|
131
|
+
asset_build
|
132
|
+
docker_build
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
data/lib/tasks/compose.rake
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'picsolve_docker_builder/composer/composer'
|
2
2
|
|
3
3
|
namespace :compose do
|
4
|
+
desc 'Deploy to composition - jenkins task'
|
4
5
|
task :jenkins do
|
5
6
|
fail 'Not in a Jenkins environment' \
|
6
7
|
if ENV['BUILD_NUMBER'].nil?
|
@@ -17,6 +18,7 @@ namespace :compose do
|
|
17
18
|
@docker_compose.prepare
|
18
19
|
end
|
19
20
|
|
21
|
+
desc 'Deploy to composition'
|
20
22
|
task deploy: :prepare do
|
21
23
|
stage = ENV['STAGE'] || 'CI'
|
22
24
|
@docker_compose.stage = stage
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'picsolve_docker_builder/nodejs'
|
2
|
+
|
3
|
+
spec = Gem::Specification.find_by_name 'picsolve_docker_builder'
|
4
|
+
load "#{spec.gem_dir}/lib/tasks/docker.rake"
|
5
|
+
|
6
|
+
namespace :docker do
|
7
|
+
desc 'prepare the build environment'
|
8
|
+
task :prepare do
|
9
|
+
@docker_builder ||= PicsolveDockerBuilder::NodeJs.new
|
10
|
+
end
|
11
|
+
end
|
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency 'simplecov'
|
30
30
|
spec.add_development_dependency 'simplecov-cobertura'
|
31
31
|
spec.add_dependency 'rake', '~> 10.0'
|
32
|
+
spec.add_dependency 'kubeclient', '~> 0.3.0'
|
32
33
|
spec.add_dependency 'docker-api'
|
33
|
-
spec.add_dependency 'kubeclient'
|
34
34
|
spec.add_dependency 'net-ssh'
|
35
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picsolve_docker_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Simon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -123,21 +123,21 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '10.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: kubeclient
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 0.3.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 0.3.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: docker-api
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -181,7 +181,28 @@ files:
|
|
181
181
|
- README.md
|
182
182
|
- Rakefile
|
183
183
|
- bin/docker_build
|
184
|
+
- integration/compose_hello_world_new_config/.docker-builder.yml
|
185
|
+
- integration/compose_hello_world_new_config/.gitignore
|
186
|
+
- integration/compose_hello_world_new_config/Gemfile
|
187
|
+
- integration/compose_hello_world_new_config/Rakefile
|
188
|
+
- integration/compose_hello_world_old_config/.docker-builder.yml
|
189
|
+
- integration/compose_hello_world_old_config/.gitignore
|
190
|
+
- integration/compose_hello_world_old_config/Gemfile
|
191
|
+
- integration/compose_hello_world_old_config/Rakefile
|
192
|
+
- integration/compose_hello_world_old_config/docker-compose.yml
|
193
|
+
- integration/integration_compose_spec.rb
|
194
|
+
- integration/integration_helpers.rb
|
184
195
|
- integration/integration_play_spec.rb
|
196
|
+
- integration/lib_hello_world/.gitignore
|
197
|
+
- integration/lib_hello_world/README
|
198
|
+
- integration/lib_hello_world/app/picsolve/helloworld/Person.scala
|
199
|
+
- integration/lib_hello_world/build.sbt
|
200
|
+
- integration/lib_hello_world/conf/application.conf
|
201
|
+
- integration/lib_hello_world/conf/logback.xml
|
202
|
+
- integration/lib_hello_world/project/build.properties
|
203
|
+
- integration/lib_hello_world/project/plugins.sbt
|
204
|
+
- integration/lib_hello_world/test/PersonSpec.scala
|
205
|
+
- integration/lib_hello_world/version.sbt
|
185
206
|
- integration/play_hello_world/.docker-builder.yml
|
186
207
|
- integration/play_hello_world/.gitignore
|
187
208
|
- integration/play_hello_world/Gemfile
|
@@ -208,9 +229,14 @@ files:
|
|
208
229
|
- lib/picsolve_docker_builder/builder/builder.rb
|
209
230
|
- lib/picsolve_docker_builder/builder/file.rb
|
210
231
|
- lib/picsolve_docker_builder/composer/composer.rb
|
232
|
+
- lib/picsolve_docker_builder/composer/container.rb
|
211
233
|
- lib/picsolve_docker_builder/composer/image.rb
|
212
234
|
- lib/picsolve_docker_builder/composer/registry.rb
|
213
235
|
- lib/picsolve_docker_builder/frame.rb
|
236
|
+
- lib/picsolve_docker_builder/helpers/config/base.rb
|
237
|
+
- lib/picsolve_docker_builder/helpers/config/secret.rb
|
238
|
+
- lib/picsolve_docker_builder/helpers/config/variable_object.rb
|
239
|
+
- lib/picsolve_docker_builder/helpers/config_manager.rb
|
214
240
|
- lib/picsolve_docker_builder/helpers/kubeclient.rb
|
215
241
|
- lib/picsolve_docker_builder/helpers/kubernetes/pod.rb
|
216
242
|
- lib/picsolve_docker_builder/helpers/kubernetes/rc.rb
|
@@ -219,10 +245,12 @@ files:
|
|
219
245
|
- lib/picsolve_docker_builder/helpers/kubernetes_manager.rb
|
220
246
|
- lib/picsolve_docker_builder/helpers/repository.rb
|
221
247
|
- lib/picsolve_docker_builder/helpers/ssh_forward.rb
|
248
|
+
- lib/picsolve_docker_builder/nodejs.rb
|
222
249
|
- lib/picsolve_docker_builder/scala.rb
|
223
250
|
- lib/picsolve_docker_builder/version.rb
|
224
251
|
- lib/tasks/compose.rake
|
225
252
|
- lib/tasks/docker.rake
|
253
|
+
- lib/tasks/nodejs.rake
|
226
254
|
- lib/tasks/scala.rake
|
227
255
|
- picsolve_docker_builder.gemspec
|
228
256
|
homepage: https://bitbucket.org/picsolve-dev/rubygem.picsolve_docker_nuidrabbitmq_uploader
|