indocker 0.1.16 → 0.3.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/.ruby-version +1 -1
- data/Gemfile.lock +17 -17
- data/example/indocker/bin/deploy +3 -6
- data/example/indocker/bin/remote/compile +2 -6
- data/example/indocker/bin/remote/run +2 -6
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_build/Dockerfile +0 -0
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_build/container.rb +0 -0
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_build/image.rb +0 -0
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/Dockerfile +0 -0
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/build_context/bin/run +0 -0
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/container.rb +0 -0
- data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/image.rb +0 -0
- data/example/indocker/bounded_contexts/good_containers/daemon_container/Dockerfile +1 -0
- data/example/indocker/bounded_contexts/{shared → good_containers}/daemon_container/container.rb +0 -0
- data/example/indocker/bounded_contexts/good_containers/daemon_container/image.rb +4 -0
- data/example/indocker/bounded_contexts/good_containers/dependency_container/Dockerfile +1 -0
- data/example/indocker/bounded_contexts/good_containers/dependency_container/container.rb +6 -0
- data/example/indocker/bounded_contexts/good_containers/dependency_container/image.rb +4 -0
- data/example/indocker/bounded_contexts/good_containers/good_container/Dockerfile +3 -0
- data/example/indocker/bounded_contexts/good_containers/good_container/build_context/example_file.txt +2 -0
- data/example/indocker/bounded_contexts/{shared → good_containers}/good_container/container.rb +5 -1
- data/example/indocker/bounded_contexts/good_containers/good_container/image.rb +4 -0
- data/example/indocker/bounded_contexts/shared/{good_container → parent_image}/Dockerfile +1 -1
- data/example/indocker/bounded_contexts/shared/parent_image/image.rb +3 -0
- data/example/indocker/configurations/external.rb +5 -0
- data/example/indocker/env_files/development_env.env +1 -0
- data/example/indocker/infrastructure/artifacts.rb +18 -2
- data/example/indocker/infrastructure/env_files.rb +6 -0
- data/example/indocker/setup.rb +2 -1
- data/lib/indocker/artifacts/base.rb +26 -0
- data/lib/indocker/artifacts/dto/file_dto.rb +8 -0
- data/lib/indocker/artifacts/git.rb +17 -5
- data/lib/indocker/artifacts/remote.rb +17 -0
- data/lib/indocker/artifacts/services/synchronizer.rb +59 -0
- data/lib/indocker/build_context_helper.rb +1 -1
- data/lib/indocker/crontab_redeploy_rules_builder.rb +4 -5
- data/lib/indocker/launchers/configuration_deployer.rb +38 -82
- data/lib/indocker/launchers/dto/remote_operation_dto.rb +10 -0
- data/lib/indocker/repositories/cloner.rb +73 -0
- data/lib/indocker/version.rb +1 -1
- data/lib/indocker.rb +17 -7
- metadata +33 -21
- data/example/indocker/bounded_contexts/shared/daemon_container/Dockerfile +0 -4
- data/example/indocker/bounded_contexts/shared/daemon_container/image.rb +0 -3
- data/example/indocker/bounded_contexts/shared/good_container/image.rb +0 -3
- data/lib/indocker/configurations/formatters/stdout.rb +0 -36
- data/lib/indocker/repositories/clonner.rb +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8e526bf660134a83bdfca0bde3f3c55eabdd65048aaa9b5010f49e63c00bac36
|
|
4
|
+
data.tar.gz: 7ee83fa4d8784114390bc9abab7d29f5e9dbe24bde4573274f1dd6f95d627bf9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5b3f95e27d372a330e370dd8bae0740e7ec3e04f354128c13189b8a4494fc6fdb06bebf5222f6ac95f79e30d08e3c37f69a54e1ee0000287f111366762ab68ac
|
|
7
|
+
data.tar.gz: c556959cdf2eca0ce5a2ce95dec99a0498c052eb64af113b50d14705562a3aa860e3d87755e56f473e3a60c70191f87f8c6a5870af9b126e921e8d871b754c03
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
3.1.2
|
data/Gemfile.lock
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
indocker (0.
|
|
4
|
+
indocker (0.3.0)
|
|
5
5
|
net-ssh
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
10
|
coderay (1.1.3)
|
|
11
|
-
diff-lcs (1.
|
|
12
|
-
docile (1.
|
|
11
|
+
diff-lcs (1.5.0)
|
|
12
|
+
docile (1.4.0)
|
|
13
13
|
method_source (1.0.0)
|
|
14
|
-
net-ssh (
|
|
15
|
-
pry (0.
|
|
14
|
+
net-ssh (7.0.1)
|
|
15
|
+
pry (0.14.1)
|
|
16
16
|
coderay (~> 1.1)
|
|
17
17
|
method_source (~> 1.0)
|
|
18
18
|
rake (12.3.3)
|
|
19
|
-
rspec (3.
|
|
20
|
-
rspec-core (~> 3.
|
|
21
|
-
rspec-expectations (~> 3.
|
|
22
|
-
rspec-mocks (~> 3.
|
|
23
|
-
rspec-core (3.
|
|
24
|
-
rspec-support (~> 3.
|
|
25
|
-
rspec-expectations (3.
|
|
19
|
+
rspec (3.12.0)
|
|
20
|
+
rspec-core (~> 3.12.0)
|
|
21
|
+
rspec-expectations (~> 3.12.0)
|
|
22
|
+
rspec-mocks (~> 3.12.0)
|
|
23
|
+
rspec-core (3.12.0)
|
|
24
|
+
rspec-support (~> 3.12.0)
|
|
25
|
+
rspec-expectations (3.12.0)
|
|
26
26
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
27
|
-
rspec-support (~> 3.
|
|
28
|
-
rspec-mocks (3.
|
|
27
|
+
rspec-support (~> 3.12.0)
|
|
28
|
+
rspec-mocks (3.12.0)
|
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
30
|
-
rspec-support (~> 3.
|
|
31
|
-
rspec-support (3.
|
|
30
|
+
rspec-support (~> 3.12.0)
|
|
31
|
+
rspec-support (3.12.0)
|
|
32
32
|
simplecov (0.18.5)
|
|
33
33
|
docile (~> 1.1)
|
|
34
34
|
simplecov-html (~> 0.11)
|
|
35
|
-
simplecov-html (0.12.
|
|
35
|
+
simplecov-html (0.12.3)
|
|
36
36
|
|
|
37
37
|
PLATFORMS
|
|
38
38
|
ruby
|
data/example/indocker/bin/deploy
CHANGED
|
@@ -94,12 +94,9 @@ if !configurations.include?(options[:configuration])
|
|
|
94
94
|
exit 1
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
puts "InDocker has been moved into a separate gem. Please install using `gem install indocker`"
|
|
101
|
-
exit
|
|
102
|
-
end
|
|
97
|
+
require 'rubygems'
|
|
98
|
+
require 'bundler/setup'
|
|
99
|
+
require 'indocker'
|
|
103
100
|
|
|
104
101
|
if options[:debug]
|
|
105
102
|
Indocker.set_log_level(Logger::DEBUG)
|
|
@@ -49,12 +49,8 @@ if !options.has_key?(:images)
|
|
|
49
49
|
puts "At least one image should be provided"
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
rescue LoadError
|
|
55
|
-
puts "InDocker has been moved into a separate gem. Please install using `gem install indocker`"
|
|
56
|
-
exit 1
|
|
57
|
-
end
|
|
52
|
+
require 'rubygems'
|
|
53
|
+
require 'indocker'
|
|
58
54
|
|
|
59
55
|
if options[:debug]
|
|
60
56
|
Indocker.set_log_level(Logger::DEBUG)
|
|
@@ -46,12 +46,8 @@ if !configurations.include?(options[:configuration])
|
|
|
46
46
|
exit 1
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
rescue LoadError
|
|
52
|
-
puts "InDocker has been moved into a separate gem. Please install using `gem install indocker`"
|
|
53
|
-
exit 1
|
|
54
|
-
end
|
|
49
|
+
require 'rubygems'
|
|
50
|
+
require 'indocker'
|
|
55
51
|
|
|
56
52
|
if options[:debug]
|
|
57
53
|
Indocker.set_log_level(Logger::DEBUG)
|
data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_build/Dockerfile
RENAMED
|
File without changes
|
data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_build/container.rb
RENAMED
|
File without changes
|
data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_build/image.rb
RENAMED
|
File without changes
|
data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/Dockerfile
RENAMED
|
File without changes
|
|
File without changes
|
data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/container.rb
RENAMED
|
File without changes
|
data/example/indocker/bounded_contexts/{shared → bad_containers}/bad_container_start/image.rb
RENAMED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
FROM <%= image_url(:parent_image) %>
|
data/example/indocker/bounded_contexts/{shared → good_containers}/daemon_container/container.rb
RENAMED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
FROM <%= image_url(:parent_image) %>
|
data/example/indocker/bounded_contexts/{shared → good_containers}/good_container/container.rb
RENAMED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
Indocker
|
|
2
2
|
.define_container(:good_container)
|
|
3
|
+
.depends_on(:dependency_container)
|
|
3
4
|
.tags('good_container', 'console=true')
|
|
4
5
|
.image(:good_container)
|
|
5
6
|
.networks(:app_net)
|
|
6
|
-
.daemonize(false)
|
|
7
|
+
.daemonize(false)
|
|
8
|
+
# .start({
|
|
9
|
+
# env_files: [:default_env],
|
|
10
|
+
# })
|
|
@@ -2,6 +2,10 @@ Indocker
|
|
|
2
2
|
.build_configuration(:external)
|
|
3
3
|
.use_registry(:dev, as: :default)
|
|
4
4
|
.use_build_server(:external_bs)
|
|
5
|
+
.global_build_args({
|
|
6
|
+
domain: 'indocker.me',
|
|
7
|
+
})
|
|
8
|
+
.use_env_file(:development_env, as: :default_env)
|
|
5
9
|
.enabled_containers(
|
|
6
10
|
ruby: {
|
|
7
11
|
servers: [:external],
|
|
@@ -20,4 +24,5 @@ Indocker
|
|
|
20
24
|
}
|
|
21
25
|
).artifacts(
|
|
22
26
|
indocker_readme: [:external],
|
|
27
|
+
hosts_file: [:external],
|
|
23
28
|
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
PROJECT_NAME=indocker
|
|
@@ -4,7 +4,23 @@ Indocker.add_artifact(
|
|
|
4
4
|
remote_name: 'origin',
|
|
5
5
|
remote_url: 'https://github.com/ArtStation/indocker.git',
|
|
6
6
|
branch: :master,
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
files: [
|
|
8
|
+
Indocker::Artifacts::DTO::FileDTO.new(
|
|
9
|
+
source_path: './README.md',
|
|
10
|
+
target_path: Indocker.deploy_dir,
|
|
11
|
+
)
|
|
12
|
+
]
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
Indocker.add_artifact(
|
|
17
|
+
Indocker::Artifacts::Remote.new(
|
|
18
|
+
name: :hosts_file,
|
|
19
|
+
files: [
|
|
20
|
+
Indocker::Artifacts::DTO::FileDTO.new(
|
|
21
|
+
source_path: '/etc/hosts',
|
|
22
|
+
target_path: Indocker.deploy_dir,
|
|
23
|
+
)
|
|
24
|
+
]
|
|
9
25
|
)
|
|
10
26
|
)
|
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('~/.indocker-deployment')
|
|
7
7
|
|
|
8
8
|
Indocker.set_dockerignore [
|
|
9
9
|
'Dockerfile',
|
|
@@ -19,6 +19,7 @@ require_relative 'infrastructure/servers'
|
|
|
19
19
|
require_relative 'infrastructure/build_servers'
|
|
20
20
|
require_relative 'infrastructure/networks'
|
|
21
21
|
require_relative 'infrastructure/artifacts'
|
|
22
|
+
require_relative 'infrastructure/env_files'
|
|
22
23
|
|
|
23
24
|
Indocker.set_bounded_contexts_dir(File.join(__dir__, 'bounded_contexts'))
|
|
24
25
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class Indocker::Artifacts::Base
|
|
2
|
+
def build_source_path(*args)
|
|
3
|
+
raise StandardError.new('not implemented')
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def is_git?
|
|
7
|
+
false
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def build_all_files(files: [], source_path: nil, target_path: nil)
|
|
13
|
+
all_files = files
|
|
14
|
+
|
|
15
|
+
if source_path && target_path
|
|
16
|
+
all_files.push(
|
|
17
|
+
Indocker::Artifacts::DTO::FileDTO.new(
|
|
18
|
+
source_path: source_path,
|
|
19
|
+
target_path: target_path,
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
all_files
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
class Indocker::Artifacts::Git
|
|
2
|
-
attr_reader :name, :remote_name, :remote_url, :branch, :
|
|
1
|
+
class Indocker::Artifacts::Git < Indocker::Artifacts::Base
|
|
2
|
+
attr_reader :name, :remote_name, :remote_url, :branch, :files
|
|
3
3
|
|
|
4
|
-
def initialize(name:, remote_name:, remote_url:, branch:, source_path
|
|
4
|
+
def initialize(name:, remote_name:, remote_url:, branch:, files: [], source_path: nil, target_path: nil)
|
|
5
5
|
@name = name
|
|
6
6
|
@remote_name = remote_name
|
|
7
7
|
@remote_url = remote_url
|
|
8
8
|
@branch = branch
|
|
9
|
-
|
|
10
|
-
@
|
|
9
|
+
|
|
10
|
+
@files = build_all_files(
|
|
11
|
+
files: files,
|
|
12
|
+
source_path: source_path,
|
|
13
|
+
target_path: target_path,
|
|
14
|
+
)
|
|
11
15
|
end
|
|
12
16
|
|
|
13
17
|
def repository
|
|
@@ -22,4 +26,12 @@ class Indocker::Artifacts::Git
|
|
|
22
26
|
def project_name(url)
|
|
23
27
|
url.split('/').last.gsub('.git', '')
|
|
24
28
|
end
|
|
29
|
+
|
|
30
|
+
def is_git?
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def build_source_path(path)
|
|
35
|
+
File.join(self.repository.clone_path, path)
|
|
36
|
+
end
|
|
25
37
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class Indocker::Artifacts::Remote < Indocker::Artifacts::Base
|
|
2
|
+
attr_reader :name, :files
|
|
3
|
+
|
|
4
|
+
def initialize(name:, files: [], source_path: nil, target_path: nil)
|
|
5
|
+
@name = name
|
|
6
|
+
|
|
7
|
+
@files = build_all_files(
|
|
8
|
+
files: files,
|
|
9
|
+
source_path: source_path,
|
|
10
|
+
target_path: target_path,
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def build_source_path(path)
|
|
15
|
+
path
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
class Indocker::Artifacts::Services::Synchronizer
|
|
2
|
+
def initialize(logger:, progress:)
|
|
3
|
+
@logger = logger
|
|
4
|
+
@progress = progress
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def call(clonner, artifact_servers)
|
|
8
|
+
@logger.info("Syncing git artifacts")
|
|
9
|
+
|
|
10
|
+
remote_operations = []
|
|
11
|
+
|
|
12
|
+
artifact_servers.each do |artifact, servers|
|
|
13
|
+
remote_operations += servers.map do |server|
|
|
14
|
+
@progress.start_syncing_artifact(server, artifact)
|
|
15
|
+
|
|
16
|
+
thread = Thread.new do
|
|
17
|
+
server.synchronize do
|
|
18
|
+
session = Indocker::SshSession.new(
|
|
19
|
+
host: server.host,
|
|
20
|
+
user: server.user,
|
|
21
|
+
port: server.port,
|
|
22
|
+
logger: @logger
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
if artifact.is_git?
|
|
26
|
+
@logger.info("Pulling git artifact #{artifact.name.to_s.green} for #{server.user}@#{server.host}")
|
|
27
|
+
result = clonner.clone(session, artifact.repository)
|
|
28
|
+
|
|
29
|
+
if result.exit_code != 0
|
|
30
|
+
@logger.error("Artifact repository :#{artifact.repository.name} was not clonned")
|
|
31
|
+
@logger.error(result.stderr_data)
|
|
32
|
+
exit 1
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
artifact.files.each do |artifact_item|
|
|
37
|
+
source_path = artifact.build_source_path(artifact_item.source_path)
|
|
38
|
+
|
|
39
|
+
result = session.exec!("mkdir -p #{artifact_item.target_path}")
|
|
40
|
+
result = session.exec!("cp #{source_path} #{artifact_item.target_path}")
|
|
41
|
+
|
|
42
|
+
if !result.success?
|
|
43
|
+
@logger.error(result.stdout_data)
|
|
44
|
+
@logger.error(result.stderr_data)
|
|
45
|
+
exit 1
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@progress.finish_syncing_artifact(server, artifact)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Indocker::Launchers::DTO::RemoteOperationDTO.new(thread, server, :artifact_sync)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
remote_operations
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
class Indocker::CrontabRedeployRulesBuilder
|
|
2
|
-
CRONTAB =
|
|
3
|
-
SHELL=/bin/bash
|
|
4
|
-
PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
5
|
-
|
|
6
|
-
%{rules}
|
|
2
|
+
CRONTAB = <<~CRONTAB
|
|
3
|
+
SHELL=/bin/bash
|
|
4
|
+
PATH=/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
7
5
|
|
|
6
|
+
%{rules}
|
|
8
7
|
CRONTAB
|
|
9
8
|
|
|
10
9
|
LOG_FILE = "/var/log/indocker-redeploy-%{env}.log"
|
|
@@ -43,10 +43,10 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
43
43
|
def run!(configuration:, deployment_policy:)
|
|
44
44
|
containers = find_containers_to_deploy(configuration, deployment_policy)
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
cloner = Indocker::Repositories::Cloner.new(configuration, @logger)
|
|
47
47
|
build_server_pool = Indocker::ServerPools::BuildServerPool.new(configuration: configuration, logger: @logger)
|
|
48
48
|
deployer = Indocker::ContainerDeployer.new(configuration: configuration, logger: @logger)
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
@global_logger.info("Establishing ssh sessions to all servers...")
|
|
51
51
|
build_server_pool.create_sessions!
|
|
52
52
|
|
|
@@ -80,31 +80,35 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
80
80
|
remote_operations = sync_env_files(deploy_servers, configuration.env_files)
|
|
81
81
|
wait_remote_operations(remote_operations)
|
|
82
82
|
|
|
83
|
-
remote_operations = pull_repositories(
|
|
83
|
+
remote_operations = pull_repositories(cloner, build_servers, configuration.repositories)
|
|
84
84
|
wait_remote_operations(remote_operations)
|
|
85
85
|
|
|
86
|
-
remote_operations = sync_artifacts(
|
|
86
|
+
remote_operations = sync_artifacts(cloner, configuration.artifact_servers)
|
|
87
87
|
wait_remote_operations(remote_operations)
|
|
88
88
|
|
|
89
89
|
update_crontab_redeploy_rules(configuration, build_servers.first)
|
|
90
90
|
|
|
91
91
|
containers.uniq.each do |container|
|
|
92
92
|
recursively_deploy_container(
|
|
93
|
-
configuration,
|
|
94
|
-
deployer,
|
|
95
|
-
build_server_pool,
|
|
96
|
-
container,
|
|
97
|
-
containers,
|
|
98
|
-
deployment_policy.skip_build,
|
|
99
|
-
deployment_policy.skip_deploy,
|
|
100
|
-
deployment_policy.force_restart,
|
|
93
|
+
configuration,
|
|
94
|
+
deployer,
|
|
95
|
+
build_server_pool,
|
|
96
|
+
container,
|
|
97
|
+
containers,
|
|
98
|
+
deployment_policy.skip_build,
|
|
99
|
+
deployment_policy.skip_deploy,
|
|
100
|
+
deployment_policy.force_restart,
|
|
101
101
|
deployment_policy.skip_force_restart
|
|
102
102
|
)
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
Thread
|
|
106
106
|
.list
|
|
107
|
-
.each { |t|
|
|
107
|
+
.each { |t|
|
|
108
|
+
if t != Thread.current
|
|
109
|
+
t.join if !t.stop?
|
|
110
|
+
end
|
|
111
|
+
}
|
|
108
112
|
ensure
|
|
109
113
|
build_server_pool.close_sessions if build_server_pool
|
|
110
114
|
deployer.close_sessions if deployer
|
|
@@ -127,7 +131,7 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
127
131
|
|
|
128
132
|
def find_containers_to_deploy(configuration, deployment_policy)
|
|
129
133
|
load_enabled_containers(configuration)
|
|
130
|
-
|
|
134
|
+
|
|
131
135
|
containers = []
|
|
132
136
|
|
|
133
137
|
deployment_policy.deploy_tags.each do |tag|
|
|
@@ -302,19 +306,19 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
302
306
|
@compiled_images[image] = true
|
|
303
307
|
end
|
|
304
308
|
|
|
305
|
-
def recursively_deploy_container(configuration, deployer, build_server_pool, container,
|
|
309
|
+
def recursively_deploy_container(configuration, deployer, build_server_pool, container,
|
|
306
310
|
containers, skip_build, skip_deploy, force_restart, skip_force_restart)
|
|
307
311
|
|
|
308
312
|
container.dependent_containers.each do |container|
|
|
309
313
|
recursively_deploy_container(
|
|
310
|
-
configuration,
|
|
311
|
-
deployer,
|
|
312
|
-
build_server_pool,
|
|
313
|
-
container,
|
|
314
|
-
containers,
|
|
315
|
-
skip_build,
|
|
314
|
+
configuration,
|
|
315
|
+
deployer,
|
|
316
|
+
build_server_pool,
|
|
317
|
+
container,
|
|
318
|
+
containers,
|
|
319
|
+
skip_build,
|
|
316
320
|
skip_deploy,
|
|
317
|
-
force_restart,
|
|
321
|
+
force_restart,
|
|
318
322
|
skip_force_restart
|
|
319
323
|
)
|
|
320
324
|
end
|
|
@@ -342,18 +346,7 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
342
346
|
deployer.deploy(container, force_restart, skip_force_restart, @progress)
|
|
343
347
|
end
|
|
344
348
|
|
|
345
|
-
|
|
346
|
-
attr_reader :thread, :server, :operation, :message
|
|
347
|
-
|
|
348
|
-
def initialize(thread, server, operation, message = nil)
|
|
349
|
-
@thread = thread
|
|
350
|
-
@server = server
|
|
351
|
-
@operation = operation
|
|
352
|
-
@message = message
|
|
353
|
-
end
|
|
354
|
-
end
|
|
355
|
-
|
|
356
|
-
def pull_repositories(clonner, servers, repositories)
|
|
349
|
+
def pull_repositories(cloner, servers, repositories)
|
|
357
350
|
@logger.info("Clonning/pulling repositories")
|
|
358
351
|
|
|
359
352
|
remote_operations = []
|
|
@@ -382,10 +375,10 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
382
375
|
)
|
|
383
376
|
elsif repository.is_git?
|
|
384
377
|
@logger.info("Pulling repository #{alias_name.to_s.green} for #{server.user}@#{server.host}")
|
|
385
|
-
result =
|
|
378
|
+
result = cloner.clone(session, repository)
|
|
386
379
|
|
|
387
380
|
if result.exit_code != 0
|
|
388
|
-
@logger.error("Repository :#{repository.name} was not
|
|
381
|
+
@logger.error("Repository :#{repository.name} was not cloned")
|
|
389
382
|
@logger.error(result.stderr_data)
|
|
390
383
|
exit 1
|
|
391
384
|
end
|
|
@@ -398,57 +391,20 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
398
391
|
@progress.finish_syncing_repository(server, alias_name)
|
|
399
392
|
end
|
|
400
393
|
|
|
401
|
-
|
|
394
|
+
Indocker::Launchers::DTO::RemoteOperationDTO.new(thread, server, :repository_pull)
|
|
402
395
|
end
|
|
403
396
|
end
|
|
404
397
|
|
|
405
398
|
remote_operations
|
|
406
399
|
end
|
|
407
400
|
|
|
408
|
-
def sync_artifacts(
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
artifact_servers.each do |artifact, servers|
|
|
414
|
-
remote_operations += servers.map do |server|
|
|
415
|
-
@progress.start_syncing_artifact(server, artifact)
|
|
416
|
-
|
|
417
|
-
thread = Thread.new do
|
|
418
|
-
server.synchronize do
|
|
419
|
-
session = Indocker::SshSession.new(
|
|
420
|
-
host: server.host,
|
|
421
|
-
user: server.user,
|
|
422
|
-
port: server.port,
|
|
423
|
-
logger: @logger
|
|
424
|
-
)
|
|
425
|
-
|
|
426
|
-
@logger.info("Pulling git artifact #{artifact.name.to_s.green} for #{server.user}@#{server.host}")
|
|
427
|
-
result = clonner.clone(session, artifact.repository)
|
|
428
|
-
|
|
429
|
-
if result.exit_code != 0
|
|
430
|
-
@logger.error("Artifact repository :#{artifact.repository.name} was not clonned")
|
|
431
|
-
@logger.error(result.stderr_data)
|
|
432
|
-
exit 1
|
|
433
|
-
end
|
|
434
|
-
|
|
435
|
-
source_path = File.join(artifact.repository.clone_path, artifact.source_path)
|
|
436
|
-
result = session.exec!("mkdir -p #{artifact.target_path}")
|
|
437
|
-
result = session.exec!("cp -r #{source_path} #{artifact.target_path}")
|
|
438
|
-
|
|
439
|
-
if !result.success?
|
|
440
|
-
@logger.error(result.stdout_data)
|
|
441
|
-
@logger.error(result.stderr_data)
|
|
442
|
-
exit 1
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
@progress.finish_syncing_artifact(server, artifact)
|
|
446
|
-
end
|
|
447
|
-
end
|
|
401
|
+
def sync_artifacts(cloner, artifact_servers)
|
|
402
|
+
artifacts_synchronizer = Indocker::Artifacts::Services::Synchronizer.new(
|
|
403
|
+
logger: @logger,
|
|
404
|
+
progress: @progress,
|
|
405
|
+
)
|
|
448
406
|
|
|
449
|
-
|
|
450
|
-
end
|
|
451
|
-
end
|
|
407
|
+
remote_operations = artifacts_synchronizer.call(cloner, artifact_servers)
|
|
452
408
|
|
|
453
409
|
remote_operations
|
|
454
410
|
end
|
|
@@ -506,7 +462,7 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
506
462
|
@progress.finish_syncing_binaries(server)
|
|
507
463
|
end
|
|
508
464
|
|
|
509
|
-
|
|
465
|
+
Indocker::Launchers::DTO::RemoteOperationDTO.new(thread, server, :indocker_sync)
|
|
510
466
|
end
|
|
511
467
|
end
|
|
512
468
|
|
|
@@ -547,7 +503,7 @@ class Indocker::Launchers::ConfigurationDeployer
|
|
|
547
503
|
@progress.finish_syncing_env_file(server, alias_name)
|
|
548
504
|
end
|
|
549
505
|
|
|
550
|
-
|
|
506
|
+
Indocker::Launchers::DTO::RemoteOperationDTO.new(thread, server, :env_file_sync)
|
|
551
507
|
end
|
|
552
508
|
end
|
|
553
509
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class Indocker::Launchers::DTO::RemoteOperationDTO
|
|
2
|
+
attr_reader :thread, :server, :operation, :message
|
|
3
|
+
|
|
4
|
+
def initialize(thread, server, operation, message = nil)
|
|
5
|
+
@thread = thread
|
|
6
|
+
@server = server
|
|
7
|
+
@operation = operation
|
|
8
|
+
@message = message
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'net/ssh'
|
|
2
|
+
|
|
3
|
+
class Indocker::Repositories::Cloner
|
|
4
|
+
def initialize(configuration, logger)
|
|
5
|
+
@configuration = configuration
|
|
6
|
+
@logger = logger
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def clone(session, repository)
|
|
10
|
+
raise ArgumenError.new("only git repositories should be cloned") if !repository.is_git?
|
|
11
|
+
|
|
12
|
+
already_cloned = repository_already_cloned?(
|
|
13
|
+
session: session,
|
|
14
|
+
target_path: repository.clone_path,
|
|
15
|
+
remote_url: repository.remote_url,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
git_command = if already_cloned
|
|
19
|
+
build_force_pull_command(
|
|
20
|
+
target_path: repository.clone_path,
|
|
21
|
+
branch_name: repository.branch,
|
|
22
|
+
)
|
|
23
|
+
else
|
|
24
|
+
build_clone_command(
|
|
25
|
+
target_path: repository.clone_path,
|
|
26
|
+
branch_name: repository.branch,
|
|
27
|
+
remote_url: repository.remote_url,
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
session.exec!("ssh-agent bash -c 'ssh-add ~/.ssh/#{repository.ssh_key}; #{git_command}'")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def repository_already_cloned?(session:, target_path:, remote_url:)
|
|
37
|
+
target_remote_url = session.exec!(
|
|
38
|
+
build_git_remote_url_command(
|
|
39
|
+
path: target_path
|
|
40
|
+
)
|
|
41
|
+
).stdout_data.chomp
|
|
42
|
+
|
|
43
|
+
@logger.debug("target remote_url: #{target_remote_url.inspect}, checked remote_url: #{remote_url.inspect}")
|
|
44
|
+
|
|
45
|
+
target_remote_url == remote_url
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def build_git_remote_url_command(path:)
|
|
49
|
+
[
|
|
50
|
+
"mkdir -p #{path}",
|
|
51
|
+
"cd #{path}",
|
|
52
|
+
"git config --get remote.origin.url",
|
|
53
|
+
].join(" && ")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def build_clone_command(target_path:, branch_name:, remote_url:)
|
|
57
|
+
[
|
|
58
|
+
"rm -rf #{target_path}",
|
|
59
|
+
"mkdir -p #{target_path}",
|
|
60
|
+
"git clone -b #{branch_name} --depth 1 #{remote_url} #{target_path}",
|
|
61
|
+
].join(" && ")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def build_force_pull_command(target_path:, branch_name:)
|
|
65
|
+
[
|
|
66
|
+
"cd #{target_path}",
|
|
67
|
+
"git add .",
|
|
68
|
+
"git reset HEAD --hard",
|
|
69
|
+
"git checkout #{branch_name}",
|
|
70
|
+
"git pull --force",
|
|
71
|
+
].join(" && ")
|
|
72
|
+
end
|
|
73
|
+
end
|
data/lib/indocker/version.rb
CHANGED
data/lib/indocker.rb
CHANGED
|
@@ -10,16 +10,12 @@ module Indocker
|
|
|
10
10
|
autoload :Git, 'repositories/git'
|
|
11
11
|
autoload :Local, 'repositories/local'
|
|
12
12
|
autoload :NoSync, 'repositories/no_sync'
|
|
13
|
-
autoload :
|
|
13
|
+
autoload :Cloner, 'repositories/cloner'
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
module Configurations
|
|
17
17
|
autoload :Configuration, 'configurations/configuration'
|
|
18
18
|
autoload :ConfigurationBuilder, 'configurations/configuration_builder'
|
|
19
|
-
|
|
20
|
-
module Formatters
|
|
21
|
-
autoload :Stdout, 'configurations/formatters/stdout'
|
|
22
|
-
end
|
|
23
19
|
end
|
|
24
20
|
|
|
25
21
|
module Registries
|
|
@@ -59,7 +55,17 @@ module Indocker
|
|
|
59
55
|
end
|
|
60
56
|
|
|
61
57
|
module Artifacts
|
|
58
|
+
autoload :Base, 'artifacts/base'
|
|
62
59
|
autoload :Git, 'artifacts/git'
|
|
60
|
+
autoload :Remote, 'artifacts/remote'
|
|
61
|
+
|
|
62
|
+
module DTO
|
|
63
|
+
autoload :FileDTO, 'artifacts/dto/file_dto'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
module Services
|
|
67
|
+
autoload :Synchronizer, 'artifacts/services/synchronizer'
|
|
68
|
+
end
|
|
63
69
|
end
|
|
64
70
|
|
|
65
71
|
module Networks
|
|
@@ -71,6 +77,10 @@ module Indocker
|
|
|
71
77
|
autoload :ConfigurationDeployer, 'launchers/configuration_deployer'
|
|
72
78
|
autoload :ImagesCompiler, 'launchers/images_compiler'
|
|
73
79
|
autoload :ContainerRunner, 'launchers/container_runner'
|
|
80
|
+
|
|
81
|
+
module DTO
|
|
82
|
+
autoload :RemoteOperationDTO, 'launchers/dto/remote_operation_dto'
|
|
83
|
+
end
|
|
74
84
|
end
|
|
75
85
|
|
|
76
86
|
module ServerPools
|
|
@@ -332,9 +342,9 @@ module Indocker
|
|
|
332
342
|
builder
|
|
333
343
|
end
|
|
334
344
|
|
|
335
|
-
def deploy(containers: [], skip_tags: [], tags: [], skip_dependent: false,
|
|
345
|
+
def deploy(containers: [], skip_tags: [], tags: [], skip_dependent: false,
|
|
336
346
|
skip_containers: [], servers: [], skip_build: false, skip_deploy: false,
|
|
337
|
-
force_restart: false, skip_force_restart: [], auto_confirm: false,
|
|
347
|
+
force_restart: false, skip_force_restart: [], auto_confirm: false,
|
|
338
348
|
require_confirmation: false)
|
|
339
349
|
|
|
340
350
|
deployment_policy = Indocker::DeploymentPolicy.new(
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: indocker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ruslan Gatiyatov
|
|
8
8
|
- Iskander Khaziev
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2022-10-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: net-ssh
|
|
@@ -103,33 +103,45 @@ files:
|
|
|
103
103
|
- example/indocker/bin/remote/compile
|
|
104
104
|
- example/indocker/bin/remote/run
|
|
105
105
|
- example/indocker/bin/utils/configurations.rb
|
|
106
|
-
- example/indocker/bounded_contexts/
|
|
107
|
-
- example/indocker/bounded_contexts/
|
|
108
|
-
- example/indocker/bounded_contexts/
|
|
109
|
-
- example/indocker/bounded_contexts/
|
|
110
|
-
- example/indocker/bounded_contexts/
|
|
111
|
-
- example/indocker/bounded_contexts/
|
|
112
|
-
- example/indocker/bounded_contexts/
|
|
113
|
-
- example/indocker/bounded_contexts/
|
|
114
|
-
- example/indocker/bounded_contexts/
|
|
115
|
-
- example/indocker/bounded_contexts/
|
|
116
|
-
- example/indocker/bounded_contexts/
|
|
117
|
-
- example/indocker/bounded_contexts/
|
|
118
|
-
- example/indocker/bounded_contexts/
|
|
106
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_build/Dockerfile
|
|
107
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_build/container.rb
|
|
108
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_build/image.rb
|
|
109
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_start/Dockerfile
|
|
110
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_start/build_context/bin/run
|
|
111
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_start/container.rb
|
|
112
|
+
- example/indocker/bounded_contexts/bad_containers/bad_container_start/image.rb
|
|
113
|
+
- example/indocker/bounded_contexts/good_containers/daemon_container/Dockerfile
|
|
114
|
+
- example/indocker/bounded_contexts/good_containers/daemon_container/container.rb
|
|
115
|
+
- example/indocker/bounded_contexts/good_containers/daemon_container/image.rb
|
|
116
|
+
- example/indocker/bounded_contexts/good_containers/dependency_container/Dockerfile
|
|
117
|
+
- example/indocker/bounded_contexts/good_containers/dependency_container/container.rb
|
|
118
|
+
- example/indocker/bounded_contexts/good_containers/dependency_container/image.rb
|
|
119
|
+
- example/indocker/bounded_contexts/good_containers/good_container/Dockerfile
|
|
120
|
+
- example/indocker/bounded_contexts/good_containers/good_container/build_context/example_file.txt
|
|
121
|
+
- example/indocker/bounded_contexts/good_containers/good_container/container.rb
|
|
122
|
+
- example/indocker/bounded_contexts/good_containers/good_container/image.rb
|
|
123
|
+
- example/indocker/bounded_contexts/shared/parent_image/Dockerfile
|
|
124
|
+
- example/indocker/bounded_contexts/shared/parent_image/image.rb
|
|
119
125
|
- example/indocker/bounded_contexts/shared/ruby/Dockerfile
|
|
120
126
|
- example/indocker/bounded_contexts/shared/ruby/container.rb
|
|
121
127
|
- example/indocker/bounded_contexts/shared/ruby/image.rb
|
|
122
128
|
- example/indocker/configurations/dev.rb
|
|
123
129
|
- example/indocker/configurations/external.rb
|
|
130
|
+
- example/indocker/env_files/development_env.env
|
|
124
131
|
- example/indocker/infrastructure/artifacts.rb
|
|
125
132
|
- example/indocker/infrastructure/build_servers.rb
|
|
133
|
+
- example/indocker/infrastructure/env_files.rb
|
|
126
134
|
- example/indocker/infrastructure/networks.rb
|
|
127
135
|
- example/indocker/infrastructure/registries.rb
|
|
128
136
|
- example/indocker/infrastructure/servers.rb
|
|
129
137
|
- example/indocker/setup.rb
|
|
130
138
|
- indocker.gemspec
|
|
131
139
|
- lib/indocker.rb
|
|
140
|
+
- lib/indocker/artifacts/base.rb
|
|
141
|
+
- lib/indocker/artifacts/dto/file_dto.rb
|
|
132
142
|
- lib/indocker/artifacts/git.rb
|
|
143
|
+
- lib/indocker/artifacts/remote.rb
|
|
144
|
+
- lib/indocker/artifacts/services/synchronizer.rb
|
|
133
145
|
- lib/indocker/build_context.rb
|
|
134
146
|
- lib/indocker/build_context_helper.rb
|
|
135
147
|
- lib/indocker/build_server.rb
|
|
@@ -137,7 +149,6 @@ files:
|
|
|
137
149
|
- lib/indocker/concerns/inspectable.rb
|
|
138
150
|
- lib/indocker/configurations/configuration.rb
|
|
139
151
|
- lib/indocker/configurations/configuration_builder.rb
|
|
140
|
-
- lib/indocker/configurations/formatters/stdout.rb
|
|
141
152
|
- lib/indocker/container_deployer.rb
|
|
142
153
|
- lib/indocker/container_helper.rb
|
|
143
154
|
- lib/indocker/containers/container.rb
|
|
@@ -163,6 +174,7 @@ files:
|
|
|
163
174
|
- lib/indocker/indocker_helper.rb
|
|
164
175
|
- lib/indocker/launchers/configuration_deployer.rb
|
|
165
176
|
- lib/indocker/launchers/container_runner.rb
|
|
177
|
+
- lib/indocker/launchers/dto/remote_operation_dto.rb
|
|
166
178
|
- lib/indocker/launchers/images_compiler.rb
|
|
167
179
|
- lib/indocker/logger_factory.rb
|
|
168
180
|
- lib/indocker/networks/network.rb
|
|
@@ -171,7 +183,7 @@ files:
|
|
|
171
183
|
- lib/indocker/registries/local.rb
|
|
172
184
|
- lib/indocker/registries/remote.rb
|
|
173
185
|
- lib/indocker/repositories/abstract.rb
|
|
174
|
-
- lib/indocker/repositories/
|
|
186
|
+
- lib/indocker/repositories/cloner.rb
|
|
175
187
|
- lib/indocker/repositories/git.rb
|
|
176
188
|
- lib/indocker/repositories/local.rb
|
|
177
189
|
- lib/indocker/repositories/no_sync.rb
|
|
@@ -194,7 +206,7 @@ homepage: https://github.com/ArtStation/indocker
|
|
|
194
206
|
licenses:
|
|
195
207
|
- MIT
|
|
196
208
|
metadata: {}
|
|
197
|
-
post_install_message:
|
|
209
|
+
post_install_message:
|
|
198
210
|
rdoc_options: []
|
|
199
211
|
require_paths:
|
|
200
212
|
- lib
|
|
@@ -209,8 +221,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
209
221
|
- !ruby/object:Gem::Version
|
|
210
222
|
version: '0'
|
|
211
223
|
requirements: []
|
|
212
|
-
rubygems_version: 3.
|
|
213
|
-
signing_key:
|
|
224
|
+
rubygems_version: 3.3.7
|
|
225
|
+
signing_key:
|
|
214
226
|
specification_version: 4
|
|
215
227
|
summary: Docker Containers Deployment
|
|
216
228
|
test_files: []
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
class Indocker::Configurations::Formatters::Stdout
|
|
2
|
-
def print(configuration)
|
|
3
|
-
c = configuration
|
|
4
|
-
<<~EOS
|
|
5
|
-
Name: #{c.name}
|
|
6
|
-
|
|
7
|
-
Repositories: {
|
|
8
|
-
#{c.repositories.map do |alias_name, repository|
|
|
9
|
-
" #{alias_name}: #{repository.inspect}"
|
|
10
|
-
end.join("\n")}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
Registries: {
|
|
14
|
-
#{c.registries.map do |alias_name, registry|
|
|
15
|
-
" #{alias_name}: #{registry.inspect}"
|
|
16
|
-
end.join("\n")}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
Servers: {
|
|
20
|
-
#{c.servers.map do |alias_name, server|
|
|
21
|
-
" #{alias_name}: #{server.inspect}"
|
|
22
|
-
end.join("\n")}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
Build Servers: [
|
|
26
|
-
#{c.build_servers.map do |build_server|
|
|
27
|
-
" #{build_server.inspect}"
|
|
28
|
-
end.join("\n")}
|
|
29
|
-
]
|
|
30
|
-
|
|
31
|
-
Tags: #{c.tags.inspect}
|
|
32
|
-
|
|
33
|
-
Global build args: #{c.global_build_args.inspect}
|
|
34
|
-
EOS
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require 'net/ssh'
|
|
2
|
-
|
|
3
|
-
class Indocker::Repositories::Clonner
|
|
4
|
-
def initialize(configuration, logger)
|
|
5
|
-
@configuration = configuration
|
|
6
|
-
@logger = logger
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def clone(session, repository)
|
|
10
|
-
raise ArgumenError.new("only git repositories should be clonned") if !repository.is_git?
|
|
11
|
-
|
|
12
|
-
session.exec!("rm -rf #{repository.clone_path} && mkdir -p #{repository.clone_path}")
|
|
13
|
-
|
|
14
|
-
git_command = "git clone -b #{repository.branch} --depth 1 #{repository.remote_url} #{repository.clone_path}"
|
|
15
|
-
session.exec!("ssh-agent bash -c 'ssh-add ~/.ssh/#{repository.ssh_key}; #{git_command}'")
|
|
16
|
-
end
|
|
17
|
-
end
|