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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/README.md +45 -2
  4. data/integration/compose_hello_world_new_config/.docker-builder.yml +18 -0
  5. data/integration/compose_hello_world_new_config/.gitignore +1 -0
  6. data/integration/compose_hello_world_new_config/Gemfile +2 -0
  7. data/integration/compose_hello_world_new_config/Rakefile +3 -0
  8. data/integration/compose_hello_world_old_config/.docker-builder.yml +4 -0
  9. data/integration/compose_hello_world_old_config/.gitignore +1 -0
  10. data/integration/compose_hello_world_old_config/Gemfile +2 -0
  11. data/integration/compose_hello_world_old_config/Rakefile +3 -0
  12. data/integration/compose_hello_world_old_config/docker-compose.yml +4 -0
  13. data/integration/integration_compose_spec.rb +25 -0
  14. data/integration/integration_helpers.rb +45 -0
  15. data/integration/integration_play_spec.rb +4 -38
  16. data/integration/lib_hello_world/.gitignore +12 -0
  17. data/integration/lib_hello_world/README +4 -0
  18. data/integration/lib_hello_world/app/picsolve/helloworld/Person.scala +8 -0
  19. data/integration/lib_hello_world/build.sbt +42 -0
  20. data/integration/lib_hello_world/conf/application.conf +0 -0
  21. data/integration/lib_hello_world/conf/logback.xml +22 -0
  22. data/integration/lib_hello_world/project/build.properties +4 -0
  23. data/integration/lib_hello_world/project/plugins.sbt +4 -0
  24. data/integration/lib_hello_world/test/PersonSpec.scala +24 -0
  25. data/integration/lib_hello_world/version.sbt +1 -0
  26. data/integration/spec_helper.rb +2 -0
  27. data/lib/picsolve_docker_builder/builder/builder.rb +4 -2
  28. data/lib/picsolve_docker_builder/composer/composer.rb +45 -74
  29. data/lib/picsolve_docker_builder/composer/container.rb +79 -0
  30. data/lib/picsolve_docker_builder/composer/image.rb +10 -8
  31. data/lib/picsolve_docker_builder/frame.rb +13 -1
  32. data/lib/picsolve_docker_builder/helpers/config/base.rb +14 -0
  33. data/lib/picsolve_docker_builder/helpers/config/secret.rb +14 -0
  34. data/lib/picsolve_docker_builder/helpers/config/variable_object.rb +68 -0
  35. data/lib/picsolve_docker_builder/helpers/config_manager.rb +96 -0
  36. data/lib/picsolve_docker_builder/helpers/kubernetes/rc.rb +28 -6
  37. data/lib/picsolve_docker_builder/helpers/kubernetes_manager.rb +126 -47
  38. data/lib/picsolve_docker_builder/helpers/repository.rb +89 -3
  39. data/lib/picsolve_docker_builder/helpers/ssh_forward.rb +9 -1
  40. data/lib/picsolve_docker_builder/nodejs.rb +135 -0
  41. data/lib/picsolve_docker_builder/version.rb +1 -1
  42. data/lib/tasks/compose.rake +2 -0
  43. data/lib/tasks/nodejs.rake +11 -0
  44. data/picsolve_docker_builder.gemspec +1 -1
  45. 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
@@ -1,4 +1,4 @@
1
1
  # version
2
2
  module PicsolveDockerBuilder
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2.0'
4
4
  end
@@ -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.1.1
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-07-03 00:00:00.000000000 Z
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: docker-api
126
+ name: kubeclient
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
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: '0'
138
+ version: 0.3.0
139
139
  - !ruby/object:Gem::Dependency
140
- name: kubeclient
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