indocker 0.1.9 → 0.1.14
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 +0 -1
- data/Gemfile.lock +10 -4
- data/example/indocker/bounded_contexts/shared/{container_failing_build → bad_container_build}/Dockerfile +0 -1
- 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 +13 -2
- data/example/indocker/infrastructure/artifacts.rb +10 -0
- data/example/indocker/setup.rb +1 -0
- data/indocker.gemspec +2 -1
- data/lib/indocker.rb +24 -12
- data/lib/indocker/build_context.rb +6 -41
- data/lib/indocker/container_deployer.rb +12 -23
- data/lib/indocker/crontab_redeploy_rules_builder.rb +2 -1
- data/lib/indocker/deploy_context.rb +4 -32
- 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} +29 -30
- 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/{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/server_pools/build_server_pool.rb +40 -0
- data/lib/indocker/server_pools/deploy_server_connection.rb +17 -0
- data/lib/indocker/server_pools/deploy_server_pool.rb +41 -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 +44 -17
- data/example/indocker/bounded_contexts/shared/container_failing_build/container.rb +0 -5
- data/example/indocker/bounded_contexts/shared/container_failing_build/image.rb +0 -3
- data/example/spec/indocker_spec.rb +0 -31
- data/example/spec/spec_helper.rb +0 -39
- data/lib/indocker/build_context_pool.rb +0 -42
- data/lib/indocker/server_pool.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cacf753d2ac5b563b097493cdb495f76b2d1aef8f758dea6d84a3791e36ab0aa
|
4
|
+
data.tar.gz: bbd59aec061d7358c3d5a579615547c3a3c097219069d93bbd7e78563f31b091
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f57b65eb2d10ae48aef8295db38822e3d2f55f11d04e912628884b8bbf3e88ff60d95453c086ea4352e1cd0c3d35e4c51682e1dda7bf3e7826502e36c0b27ec9
|
7
|
+
data.tar.gz: a3732e6bc974c22b3dd5f856c593054d300d1d6244ac5399cb43d9cdd896940aa9089d0240ce5c8f83481a9e3b51507227d1c4510b66563025b6b5266f56491c
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.0
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
indocker (0.1.
|
4
|
+
indocker (0.1.14)
|
5
5
|
net-ssh
|
6
6
|
|
7
7
|
GEM
|
@@ -9,12 +9,13 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
coderay (1.1.3)
|
11
11
|
diff-lcs (1.3)
|
12
|
+
docile (1.3.2)
|
12
13
|
method_source (1.0.0)
|
13
14
|
net-ssh (6.1.0)
|
14
15
|
pry (0.13.1)
|
15
16
|
coderay (~> 1.1)
|
16
17
|
method_source (~> 1.0)
|
17
|
-
rake (
|
18
|
+
rake (12.3.3)
|
18
19
|
rspec (3.9.0)
|
19
20
|
rspec-core (~> 3.9.0)
|
20
21
|
rspec-expectations (~> 3.9.0)
|
@@ -28,6 +29,10 @@ GEM
|
|
28
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
29
30
|
rspec-support (~> 3.9.0)
|
30
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)
|
31
36
|
|
32
37
|
PLATFORMS
|
33
38
|
ruby
|
@@ -36,8 +41,9 @@ DEPENDENCIES
|
|
36
41
|
bundler (~> 1.17)
|
37
42
|
indocker!
|
38
43
|
pry
|
39
|
-
rake (~>
|
40
|
-
rspec
|
44
|
+
rake (~> 12.3.3)
|
45
|
+
rspec (~> 3.0)
|
46
|
+
simplecov (~> 0.18.5)
|
41
47
|
|
42
48
|
BUNDLED WITH
|
43
49
|
1.17.3
|
@@ -6,7 +6,18 @@ Indocker
|
|
6
6
|
ruby: {
|
7
7
|
servers: [:external],
|
8
8
|
},
|
9
|
-
|
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: {
|
10
19
|
servers: [:external],
|
11
20
|
}
|
12
|
-
)
|
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
|
+
)
|
data/example/indocker/setup.rb
CHANGED
@@ -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,30 +62,41 @@ 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'
|
@@ -172,7 +184,7 @@ module Indocker
|
|
172
184
|
raise ArgumentError.new("network :#{name} was already defined")
|
173
185
|
end
|
174
186
|
|
175
|
-
networks.push(Indocker::Network.new(name))
|
187
|
+
networks.push(Indocker::Networks::Network.new(name))
|
176
188
|
end
|
177
189
|
|
178
190
|
def container_files
|
@@ -340,7 +352,7 @@ module Indocker
|
|
340
352
|
require_confirmation: require_confirmation,
|
341
353
|
)
|
342
354
|
|
343
|
-
Indocker::ConfigurationDeployer
|
355
|
+
Indocker::Launchers::ConfigurationDeployer
|
344
356
|
.new(logger: Indocker.logger, global_logger: Indocker.global_logger)
|
345
357
|
.run(
|
346
358
|
configuration: configuration,
|
@@ -369,7 +381,7 @@ module Indocker
|
|
369
381
|
end
|
370
382
|
|
371
383
|
def compile(images:, skip_dependent:)
|
372
|
-
Indocker::ImagesCompiler
|
384
|
+
Indocker::Launchers::ImagesCompiler
|
373
385
|
.new(Indocker.logger)
|
374
386
|
.compile(
|
375
387
|
configuration: configuration,
|
@@ -379,7 +391,7 @@ module Indocker
|
|
379
391
|
end
|
380
392
|
|
381
393
|
def run(container_name, force_restart)
|
382
|
-
Indocker::ContainerRunner
|
394
|
+
Indocker::Launchers::ContainerRunner
|
383
395
|
.new(Indocker.logger)
|
384
396
|
.run(
|
385
397
|
configuration: configuration,
|
@@ -1,55 +1,18 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
|
3
3
|
class Indocker::BuildContext
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :configuration, :logger, :global_logger, :helper
|
5
5
|
|
6
|
-
def initialize(configuration:,
|
6
|
+
def initialize(configuration:, logger:, global_logger:)
|
7
7
|
@configuration = configuration
|
8
8
|
@logger = logger
|
9
9
|
@helper = Indocker::BuildContextHelper.new(@configuration, @build_server)
|
10
|
-
@server = build_server
|
11
10
|
@global_logger = global_logger
|
12
|
-
@compiled_images = Hash.new(false)
|
13
|
-
end
|
14
|
-
|
15
|
-
def create_session!
|
16
|
-
return unless @server
|
17
|
-
|
18
|
-
@session = Indocker::SshSession.new(
|
19
|
-
host: @server.host,
|
20
|
-
user: @server.user,
|
21
|
-
port: @server.port,
|
22
|
-
logger: @logger
|
23
|
-
)
|
24
|
-
end
|
25
|
-
|
26
|
-
def exec!(command)
|
27
|
-
@session.exec!(command)
|
28
|
-
end
|
29
|
-
|
30
|
-
def close_session
|
31
|
-
@session.close if @session
|
32
|
-
end
|
33
|
-
|
34
|
-
def image_compiled?(image)
|
35
|
-
@compiled_images[image]
|
36
|
-
end
|
37
|
-
|
38
|
-
def set_busy(flag)
|
39
|
-
@busy = !!flag
|
40
|
-
end
|
41
|
-
|
42
|
-
def busy?
|
43
|
-
!!@busy
|
44
|
-
end
|
45
|
-
|
46
|
-
def set_compiled(image)
|
47
|
-
@compiled_images[image] = true
|
48
11
|
end
|
49
12
|
|
50
13
|
def build_image(image, build_dir, args: [])
|
51
14
|
image_name = image.image_name
|
52
|
-
registry
|
15
|
+
registry = image.registry
|
53
16
|
tag = image.tag
|
54
17
|
|
55
18
|
FileUtils.cd(build_dir) do
|
@@ -79,7 +42,9 @@ class Indocker::BuildContext
|
|
79
42
|
end
|
80
43
|
|
81
44
|
Indocker::Docker.tag(image.local_registry_url, image.registry_url)
|
82
|
-
|
45
|
+
if image.registry_url != image.local_registry_url
|
46
|
+
Indocker::Docker.tag(image.local_registry_url, image.local_registry_url)
|
47
|
+
end
|
83
48
|
|
84
49
|
if !image.registry.is_local?
|
85
50
|
Indocker::Docker.push(image.registry_url)
|
@@ -5,7 +5,7 @@ class Indocker::ContainerDeployer
|
|
5
5
|
@configuration = configuration
|
6
6
|
@logger = logger
|
7
7
|
|
8
|
-
@server_pool = Indocker::
|
8
|
+
@server_pool = Indocker::ServerPools::DeployServerPool.new(
|
9
9
|
configuration: @configuration,
|
10
10
|
logger: logger
|
11
11
|
)
|
@@ -14,10 +14,6 @@ class Indocker::ContainerDeployer
|
|
14
14
|
@deployed_servers = {}
|
15
15
|
end
|
16
16
|
|
17
|
-
def create_sessions!
|
18
|
-
@server_pool.create_sessions!
|
19
|
-
end
|
20
|
-
|
21
17
|
def deploy(container, force_restart, skip_force_restart, progress)
|
22
18
|
return if @deployed_containers[container]
|
23
19
|
|
@@ -37,30 +33,23 @@ class Indocker::ContainerDeployer
|
|
37
33
|
end
|
38
34
|
|
39
35
|
exec_proc.call do
|
40
|
-
|
36
|
+
deploy_server = @server_pool.create_connection!(server)
|
41
37
|
@logger.info("Deploying container: #{container.name.to_s.green} to #{server.user}@#{server.host}")
|
42
38
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
result = deploy_context
|
51
|
-
.session
|
52
|
-
.exec!(
|
53
|
-
"cd #{Indocker::IndockerHelper.indocker_dir} && ./bin/remote/run -C #{Indocker.configuration_name} -c #{container.name} #{debug_options} #{command_output} #{force_restart_options}"
|
39
|
+
result = deploy_server
|
40
|
+
.run_container_remotely(
|
41
|
+
configuration_name: Indocker.configuration_name,
|
42
|
+
container_name: container.name,
|
43
|
+
force_restart: force_restart && !skip_force_restart.include?(container.name)
|
54
44
|
)
|
55
45
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
exit 1 if result.exit_code != 0
|
46
|
+
if result.exit_code != 0
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
|
61
50
|
@logger.info("Container deployment to #{server.user}@#{server.host} finished: #{container.name.to_s.green}")
|
62
51
|
|
63
|
-
|
52
|
+
deploy_server.close_session
|
64
53
|
progress.finish_deploying_container(container, server)
|
65
54
|
end
|
66
55
|
end
|
@@ -8,7 +8,7 @@ PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sb
|
|
8
8
|
CRONTAB
|
9
9
|
|
10
10
|
LOG_FILE = "/var/log/indocker-redeploy-%{env}.log"
|
11
|
-
COMMAND = "export TERM=xterm
|
11
|
+
COMMAND = "export TERM=xterm;%{deploy_dir}/indocker/bin/deploy -C %{env} -f -B -y -c %{container_name}"
|
12
12
|
REDEPLOY_RULE = %Q{%{schedule} echo `date` "- %{command}..." >> %{log_file}; %{command} 1>/dev/null 2>>%{log_file}; echo `date` "- done, exitcode = $?" >> %{log_file}}
|
13
13
|
|
14
14
|
def initialize(configuration:, logger:)
|
@@ -41,6 +41,7 @@ PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sb
|
|
41
41
|
COMMAND % {
|
42
42
|
env: env,
|
43
43
|
container_name: container.name,
|
44
|
+
deploy_dir: Indocker.deploy_dir
|
44
45
|
}
|
45
46
|
end
|
46
47
|
|