indocker 0.1.8 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +15 -3
- data/README.md +13 -2
- data/example/indocker/bounded_contexts/shared/bad_container_build/Dockerfile +3 -0
- data/example/indocker/bounded_contexts/shared/bad_container_build/container.rb +6 -0
- data/example/indocker/bounded_contexts/shared/bad_container_build/image.rb +3 -0
- data/example/indocker/bounded_contexts/shared/bad_container_start/Dockerfile +8 -0
- data/example/indocker/bounded_contexts/shared/bad_container_start/build_context/bin/run +3 -0
- data/example/indocker/bounded_contexts/shared/bad_container_start/container.rb +6 -0
- data/example/indocker/bounded_contexts/shared/bad_container_start/image.rb +3 -0
- data/example/indocker/bounded_contexts/shared/daemon_container/Dockerfile +4 -0
- data/example/indocker/bounded_contexts/shared/daemon_container/container.rb +6 -0
- data/example/indocker/bounded_contexts/shared/daemon_container/image.rb +3 -0
- data/example/indocker/bounded_contexts/shared/good_container/Dockerfile +4 -0
- data/example/indocker/bounded_contexts/shared/good_container/container.rb +6 -0
- data/example/indocker/bounded_contexts/shared/good_container/image.rb +3 -0
- data/example/indocker/bounded_contexts/shared/ruby/container.rb +2 -1
- data/example/indocker/configurations/external.rb +23 -0
- data/example/indocker/infrastructure/artifacts.rb +10 -0
- data/example/indocker/infrastructure/build_servers.rb +11 -0
- data/example/indocker/infrastructure/servers.rb +11 -0
- data/example/indocker/setup.rb +2 -1
- data/indocker.gemspec +2 -1
- data/lib/indocker.rb +56 -68
- data/lib/indocker/build_context.rb +10 -43
- data/lib/indocker/container_deployer.rb +12 -20
- data/lib/indocker/crontab_redeploy_rules_builder.rb +2 -1
- data/lib/indocker/deploy_context.rb +4 -30
- data/lib/indocker/deployment_policy.rb +22 -0
- data/lib/indocker/docker_run_args.rb +2 -2
- data/lib/indocker/images/image_compiler.rb +0 -1
- data/lib/indocker/{configuration_deployer.rb → launchers/configuration_deployer.rb} +118 -123
- data/lib/indocker/{container_runner.rb → launchers/container_runner.rb} +2 -3
- data/lib/indocker/{images_compiler.rb → launchers/images_compiler.rb} +3 -3
- data/lib/indocker/logger_factory.rb +37 -0
- data/lib/indocker/{network.rb → networks/network.rb} +1 -1
- data/lib/indocker/{network_helper.rb → networks/network_helper.rb} +1 -1
- data/lib/indocker/server_pools/build_server_connection.rb +15 -0
- data/lib/indocker/{build_context_pool.rb → server_pools/build_server_pool.rb} +11 -7
- data/lib/indocker/server_pools/deploy_server_connection.rb +17 -0
- data/lib/indocker/server_pools/deploy_server_pool.rb +33 -0
- data/lib/indocker/server_pools/server_connection.rb +36 -0
- data/lib/indocker/ssh_session.rb +18 -9
- data/lib/indocker/version.rb +1 -1
- data/lib/indocker/{volume_helper.rb → volumes/volume_helper.rb} +1 -1
- metadata +51 -16
- data/lib/indocker/server_pool.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbe3ccb46e2212e0f4792ff6d528e3da20efbcf793c519b29dc76bd3cf1f2393
|
4
|
+
data.tar.gz: a7971075ca1ce8febaef30db0217c9d353536fc2f0f792def4fbf898ba68333c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7f1a7abced7f6fcf440218bd407714e4a8f53f897d752218493ee3162193a8cdf2eeadd5a204bc8c03b9c263617dd0d97b7f09ede7818bdb79638a61d7aabc8
|
7
|
+
data.tar.gz: e51552f9e3de3a1a27b028e74a4ea6d00efe04db6ca31e59a15cc323e49374f48968ea00b94f4147debff6696ac8a88ba317a59e85f4d8ce1d6ccd6ff2641839
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.0
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
indocker (0.1.
|
4
|
+
indocker (0.1.13)
|
5
5
|
net-ssh
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
+
coderay (1.1.3)
|
10
11
|
diff-lcs (1.3)
|
12
|
+
docile (1.3.2)
|
13
|
+
method_source (1.0.0)
|
11
14
|
net-ssh (6.1.0)
|
12
|
-
|
15
|
+
pry (0.13.1)
|
16
|
+
coderay (~> 1.1)
|
17
|
+
method_source (~> 1.0)
|
18
|
+
rake (12.3.3)
|
13
19
|
rspec (3.9.0)
|
14
20
|
rspec-core (~> 3.9.0)
|
15
21
|
rspec-expectations (~> 3.9.0)
|
@@ -23,6 +29,10 @@ GEM
|
|
23
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
24
30
|
rspec-support (~> 3.9.0)
|
25
31
|
rspec-support (3.9.2)
|
32
|
+
simplecov (0.18.5)
|
33
|
+
docile (~> 1.1)
|
34
|
+
simplecov-html (~> 0.11)
|
35
|
+
simplecov-html (0.12.2)
|
26
36
|
|
27
37
|
PLATFORMS
|
28
38
|
ruby
|
@@ -30,8 +40,10 @@ PLATFORMS
|
|
30
40
|
DEPENDENCIES
|
31
41
|
bundler (~> 1.17)
|
32
42
|
indocker!
|
33
|
-
|
43
|
+
pry
|
44
|
+
rake (~> 12.3.3)
|
34
45
|
rspec (~> 3.0)
|
46
|
+
simplecov (~> 0.18.5)
|
35
47
|
|
36
48
|
BUNDLED WITH
|
37
49
|
1.17.3
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# InDocker
|
2
2
|
|
3
|
+
[![Codeship Status for ArtStation/indocker](https://app.codeship.com/projects/bf8888c0-b7e4-0138-fc1f-7e2faa53772a/status?branch=master)](https://app.codeship.com/projects/404716)
|
4
|
+
|
3
5
|
Docker Containers Deployment
|
4
6
|
|
5
7
|
## Installation
|
@@ -8,11 +10,20 @@ Docker Containers Deployment
|
|
8
10
|
$ gem install indocker
|
9
11
|
```
|
10
12
|
|
11
|
-
## Development: Launch example app
|
13
|
+
## Development: Launch example app locally
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
cd example
|
17
|
+
indocker/bin/deploy -C dev -c ruby -d
|
18
|
+
```
|
19
|
+
|
20
|
+
## Development: Launch example with external host
|
21
|
+
|
22
|
+
NOTE: Default external host requires extra permissions.
|
12
23
|
|
13
24
|
```ruby
|
14
25
|
cd example
|
15
|
-
|
26
|
+
indocker/bin/deploy -C external -c ruby -d
|
16
27
|
```
|
17
28
|
|
18
29
|
## License
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Indocker
|
2
|
+
.build_configuration(:external)
|
3
|
+
.use_registry(:dev, as: :default)
|
4
|
+
.use_build_server(:external_bs)
|
5
|
+
.enabled_containers(
|
6
|
+
ruby: {
|
7
|
+
servers: [:external],
|
8
|
+
},
|
9
|
+
good_container: {
|
10
|
+
servers: [:external],
|
11
|
+
},
|
12
|
+
bad_container_build: {
|
13
|
+
servers: [:external],
|
14
|
+
},
|
15
|
+
bad_container_start: {
|
16
|
+
servers: [:external],
|
17
|
+
},
|
18
|
+
daemon_container: {
|
19
|
+
servers: [:external],
|
20
|
+
}
|
21
|
+
).artifacts(
|
22
|
+
indocker_readme: [:external],
|
23
|
+
)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Indocker.add_artifact(
|
2
|
+
Indocker::Artifacts::Git.new(
|
3
|
+
name: :indocker_readme,
|
4
|
+
remote_name: 'origin',
|
5
|
+
remote_url: 'https://github.com/ArtStation/indocker.git',
|
6
|
+
branch: :master,
|
7
|
+
source_path: './README.md',
|
8
|
+
target_path: File.join(Indocker.deploy_dir, 'README.md'),
|
9
|
+
)
|
10
|
+
)
|
@@ -5,4 +5,15 @@ Indocker.add_build_server(
|
|
5
5
|
user: `whoami`.strip,
|
6
6
|
port: 22
|
7
7
|
)
|
8
|
+
)
|
9
|
+
|
10
|
+
external_host = ENV['INDOCKER_EXTERNAL_HOST'] || 'indocker.artstn.ninja'
|
11
|
+
external_user = ENV['INDOCKER_EXTERNAL_USER'] || 'indocker'
|
12
|
+
Indocker.add_build_server(
|
13
|
+
Indocker::BuildServer.new(
|
14
|
+
name: :external_bs,
|
15
|
+
host: external_host,
|
16
|
+
user: external_user,
|
17
|
+
port: 22
|
18
|
+
)
|
8
19
|
)
|
@@ -5,4 +5,15 @@ Indocker.add_server(
|
|
5
5
|
user: `whoami`.strip,
|
6
6
|
port: 22
|
7
7
|
)
|
8
|
+
)
|
9
|
+
|
10
|
+
external_host = ENV['INDOCKER_EXTERNAL_HOST'] || 'indocker.artstn.ninja'
|
11
|
+
external_user = ENV['INDOCKER_EXTERNAL_USER'] || 'indocker'
|
12
|
+
Indocker.add_server(
|
13
|
+
Indocker::Server.new(
|
14
|
+
name: :external,
|
15
|
+
host: external_host,
|
16
|
+
user: external_user,
|
17
|
+
port: 22
|
18
|
+
)
|
8
19
|
)
|
data/example/indocker/setup.rb
CHANGED
@@ -3,7 +3,7 @@ require 'indocker'
|
|
3
3
|
root_dir = File.join(__dir__, '..', '..')
|
4
4
|
|
5
5
|
Indocker.set_root_dir(__dir__)
|
6
|
-
Indocker.set_deploy_dir(
|
6
|
+
Indocker.set_deploy_dir('~/deployment')
|
7
7
|
|
8
8
|
Indocker.set_dockerignore [
|
9
9
|
'Dockerfile',
|
@@ -18,6 +18,7 @@ require_relative 'infrastructure/registries'
|
|
18
18
|
require_relative 'infrastructure/servers'
|
19
19
|
require_relative 'infrastructure/build_servers'
|
20
20
|
require_relative 'infrastructure/networks'
|
21
|
+
require_relative 'infrastructure/artifacts'
|
21
22
|
|
22
23
|
Indocker.set_bounded_contexts_dir(File.join(__dir__, 'bounded_contexts'))
|
23
24
|
|
data/indocker.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
spec.add_dependency "net-ssh"
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.17"
|
28
|
-
spec.add_development_dependency "rake", "~>
|
28
|
+
spec.add_development_dependency "rake", "~> 12.3.3"
|
29
29
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
|
+
spec.add_development_dependency "simplecov", "~> 0.18.5"
|
30
31
|
end
|
data/lib/indocker.rb
CHANGED
@@ -50,6 +50,7 @@ module Indocker
|
|
50
50
|
autoload :Local, 'volumes/local'
|
51
51
|
autoload :External, 'volumes/external'
|
52
52
|
autoload :Repository, 'volumes/repository'
|
53
|
+
autoload :VolumeHelper, 'volumes/volume_helper'
|
53
54
|
end
|
54
55
|
|
55
56
|
module EnvFiles
|
@@ -61,34 +62,47 @@ module Indocker
|
|
61
62
|
autoload :Git, 'artifacts/git'
|
62
63
|
end
|
63
64
|
|
65
|
+
module Networks
|
66
|
+
autoload :Network, 'networks/network'
|
67
|
+
autoload :NetworkHelper, 'networks/network_helper'
|
68
|
+
end
|
69
|
+
|
70
|
+
module Launchers
|
71
|
+
autoload :ConfigurationDeployer, 'launchers/configuration_deployer'
|
72
|
+
autoload :ImagesCompiler, 'launchers/images_compiler'
|
73
|
+
autoload :ContainerRunner, 'launchers/container_runner'
|
74
|
+
end
|
75
|
+
|
76
|
+
module ServerPools
|
77
|
+
autoload :ServerConnection, 'server_pools/server_connection'
|
78
|
+
autoload :DeployServerPool, 'server_pools/deploy_server_pool'
|
79
|
+
autoload :DeployServerConnection, 'server_pools/deploy_server_connection'
|
80
|
+
autoload :BuildServerPool, 'server_pools/build_server_pool'
|
81
|
+
autoload :BuildServerConnection, 'server_pools/build_server_connection'
|
82
|
+
end
|
83
|
+
|
64
84
|
autoload :HashMerger, 'hash_merger'
|
65
85
|
autoload :BuildServer, 'build_server'
|
66
86
|
autoload :Server, 'server'
|
67
|
-
autoload :ConfigurationDeployer, 'configuration_deployer'
|
68
87
|
autoload :SshSession, 'ssh_session'
|
69
|
-
autoload :BuildContextPool, 'build_context_pool'
|
70
88
|
autoload :BuildContext, 'build_context'
|
71
89
|
autoload :BuildContextHelper, 'build_context_helper'
|
72
90
|
autoload :Shell, 'shell'
|
73
91
|
autoload :Docker, 'docker'
|
74
92
|
autoload :ContextArgs, 'context_args'
|
75
|
-
autoload :Network, 'network'
|
76
93
|
autoload :ContainerDeployer, 'container_deployer'
|
77
|
-
autoload :ServerPool, 'server_pool'
|
78
94
|
autoload :DeployContext, 'deploy_context'
|
79
95
|
autoload :ContainerHelper, 'container_helper'
|
80
96
|
autoload :DockerRunArgs, 'docker_run_args'
|
81
|
-
autoload :VolumeHelper, 'volume_helper'
|
82
|
-
autoload :NetworkHelper, 'network_helper'
|
83
97
|
autoload :Rsync, 'rsync'
|
84
98
|
autoload :EnvFileHelper, 'env_file_helper'
|
85
99
|
autoload :IndockerHelper, 'indocker_helper'
|
86
|
-
autoload :ImagesCompiler, 'images_compiler'
|
87
|
-
autoload :ContainerRunner, 'container_runner'
|
88
100
|
autoload :SshResultLogger, 'ssh_result_logger'
|
89
101
|
autoload :DeploymentProgress, 'deployment_progress'
|
90
102
|
autoload :DeploymentChecker, 'deployment_checker'
|
103
|
+
autoload :DeploymentPolicy, 'deployment_policy'
|
91
104
|
autoload :CrontabRedeployRulesBuilder, 'crontab_redeploy_rules_builder'
|
105
|
+
autoload :LoggerFactory, 'logger_factory'
|
92
106
|
|
93
107
|
class << self
|
94
108
|
def set_export_command(command)
|
@@ -170,7 +184,7 @@ module Indocker
|
|
170
184
|
raise ArgumentError.new("network :#{name} was already defined")
|
171
185
|
end
|
172
186
|
|
173
|
-
networks.push(Indocker::Network.new(name))
|
187
|
+
networks.push(Indocker::Networks::Network.new(name))
|
174
188
|
end
|
175
189
|
|
176
190
|
def container_files
|
@@ -323,22 +337,26 @@ module Indocker
|
|
323
337
|
force_restart: false, skip_force_restart: [], auto_confirm: false,
|
324
338
|
require_confirmation: false)
|
325
339
|
|
326
|
-
Indocker::
|
327
|
-
|
340
|
+
deployment_policy = Indocker::DeploymentPolicy.new(
|
341
|
+
deploy_containers: containers,
|
342
|
+
deploy_tags: tags,
|
343
|
+
servers: servers,
|
344
|
+
skip_dependent: skip_dependent,
|
345
|
+
skip_containers: skip_containers,
|
346
|
+
skip_build: skip_build,
|
347
|
+
skip_deploy: skip_deploy,
|
348
|
+
skip_tags: skip_tags,
|
349
|
+
force_restart: force_restart,
|
350
|
+
skip_force_restart: skip_force_restart,
|
351
|
+
auto_confirm: auto_confirm,
|
352
|
+
require_confirmation: require_confirmation,
|
353
|
+
)
|
354
|
+
|
355
|
+
Indocker::Launchers::ConfigurationDeployer
|
356
|
+
.new(logger: Indocker.logger, global_logger: Indocker.global_logger)
|
328
357
|
.run(
|
329
|
-
configuration:
|
330
|
-
|
331
|
-
deploy_tags: tags,
|
332
|
-
skip_dependent: skip_dependent,
|
333
|
-
skip_containers: skip_containers,
|
334
|
-
servers: servers,
|
335
|
-
skip_build: skip_build,
|
336
|
-
skip_deploy: skip_deploy,
|
337
|
-
force_restart: force_restart,
|
338
|
-
skip_tags: skip_tags,
|
339
|
-
skip_force_restart: skip_force_restart,
|
340
|
-
auto_confirm: auto_confirm,
|
341
|
-
require_confirmation: require_confirmation,
|
358
|
+
configuration: configuration,
|
359
|
+
deployment_policy: deployment_policy
|
342
360
|
)
|
343
361
|
end
|
344
362
|
|
@@ -363,7 +381,7 @@ module Indocker
|
|
363
381
|
end
|
364
382
|
|
365
383
|
def compile(images:, skip_dependent:)
|
366
|
-
Indocker::ImagesCompiler
|
384
|
+
Indocker::Launchers::ImagesCompiler
|
367
385
|
.new(Indocker.logger)
|
368
386
|
.compile(
|
369
387
|
configuration: configuration,
|
@@ -373,7 +391,7 @@ module Indocker
|
|
373
391
|
end
|
374
392
|
|
375
393
|
def run(container_name, force_restart)
|
376
|
-
Indocker::ContainerRunner
|
394
|
+
Indocker::Launchers::ContainerRunner
|
377
395
|
.new(Indocker.logger)
|
378
396
|
.run(
|
379
397
|
configuration: configuration,
|
@@ -390,56 +408,26 @@ module Indocker
|
|
390
408
|
Indocker::BuildContextHelper.new(Indocker.configuration, nil)
|
391
409
|
end
|
392
410
|
|
411
|
+
# This logger outputs progress of the deployment
|
412
|
+
# It will not output anything for deployment without debug option
|
393
413
|
def logger
|
394
414
|
@logger ||= begin
|
395
|
-
|
396
|
-
|
415
|
+
logger_stdout = if @log_level == Logger::DEBUG
|
416
|
+
STDOUT
|
397
417
|
else
|
398
|
-
|
399
|
-
end
|
400
|
-
|
401
|
-
logger.level = @log_level || Logger::INFO
|
402
|
-
|
403
|
-
logger.formatter = proc do |severity, datetime, progname, msg|
|
404
|
-
level = Logger::SEV_LABEL.index(severity)
|
405
|
-
|
406
|
-
severity = case level
|
407
|
-
when Logger::INFO
|
408
|
-
severity.green
|
409
|
-
when Logger::WARN
|
410
|
-
severity.purple
|
411
|
-
when Logger::DEBUG
|
412
|
-
severity.yellow
|
413
|
-
when Logger::ERROR
|
414
|
-
severity.red
|
415
|
-
when Logger::FATAL
|
416
|
-
severity.red
|
417
|
-
else
|
418
|
-
severity
|
419
|
-
end
|
420
|
-
|
421
|
-
severity = severity.downcase
|
422
|
-
|
423
|
-
if logger.debug?
|
424
|
-
if msg == "{timestamp}"
|
425
|
-
""
|
426
|
-
else
|
427
|
-
"#{datetime.strftime("%Y/%m/%d %H:%M:%S")} #{severity}: #{msg}\n"
|
428
|
-
end
|
429
|
-
else
|
430
|
-
# Use a nicer logging for not debug
|
431
|
-
if msg == "{timestamp}"
|
432
|
-
datetime.strftime("%Y/%m/%d %H:%M:%S\n").grey
|
433
|
-
else
|
434
|
-
" #{severity}: #{msg}\n"
|
435
|
-
end
|
436
|
-
end
|
418
|
+
File.open(File::NULL, "w")
|
437
419
|
end
|
438
420
|
|
439
|
-
|
421
|
+
Indocker::LoggerFactory.create(logger_stdout, @log_level)
|
440
422
|
end
|
441
423
|
end
|
442
424
|
|
425
|
+
# Global logger would output data without dependency on how we deploy the progress
|
426
|
+
# Currently it will always output data to stdout
|
427
|
+
def global_logger
|
428
|
+
@global_logger ||= Indocker::LoggerFactory.create(STDOUT, @log_level)
|
429
|
+
end
|
430
|
+
|
443
431
|
def set_log_level(level)
|
444
432
|
@log_level = level
|
445
433
|
end
|