indocker 0.1.2 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b26827edabc3dcae5d27465689bcfa96fc00f7649eecb978af3f766dbf834a78
4
- data.tar.gz: 30bcfaa047bc22995b77cb695ff58d7624d6a3702b97c99df900bbaddd3e9e18
3
+ metadata.gz: 405310bd24a8adfa838f82a3cac79f2fa125083ebcb4cf788d27332875d52353
4
+ data.tar.gz: 12103e2edb743e5024f50496962883f271c095bcd6264934c3295309fbf8e762
5
5
  SHA512:
6
- metadata.gz: 8c518149fae3e281c98d1620abc68cb192c741843dd583121e0e6cc3c7b24802fe33d5ebf8b257677fba77b64ce052a474d73b9a9efdb9045222d64f34d9f266
7
- data.tar.gz: 1ca41ab244943db566081ac81efdf1ffb0f4a886ce480b39e8d55c595757de249df2c33321ab82a1cee6f0807695ad827cf7218907420802087066b7125b5099
6
+ metadata.gz: fd602a0202c99b48303ee69a129b9f8cbfa9d621a7d2ea3f84b1446613ed8210b7ad103005967ce0459407a49482fcababf1b72f27254b1e6d5fcc29175c2ceb
7
+ data.tar.gz: 67f12a6d6b2715bde6034dbbc1b6e0a2c42bcc7c27a5e66fe40bde489db8f50cd42fb1805e03e04e35a76dd9a1f82bb754e942beba68a9fba5a4751614644dbb
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- indocker (0.1.2)
4
+ indocker (0.1.7)
5
5
  net-ssh
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  diff-lcs (1.3)
11
- net-ssh (5.2.0)
11
+ net-ssh (6.1.0)
12
12
  rake (10.5.0)
13
13
  rspec (3.9.0)
14
14
  rspec-core (~> 3.9.0)
@@ -67,13 +67,15 @@ class Indocker::ConfigurationDeployer
67
67
  )
68
68
 
69
69
  remote_operations = sync_indocker(servers)
70
+ wait_remote_operations(remote_operations)
70
71
 
72
+ remote_operations = sync_env_files(deploy_servers, configuration.env_files)
71
73
  wait_remote_operations(remote_operations)
72
74
 
73
- remote_operations += sync_env_files(deploy_servers, configuration.env_files)
74
- remote_operations += pull_repositories(clonner, build_servers, configuration.repositories)
75
- remote_operations += sync_artifacts(clonner, configuration.artifact_servers)
75
+ remote_operations = pull_repositories(clonner, build_servers, configuration.repositories)
76
+ wait_remote_operations(remote_operations)
76
77
 
78
+ remote_operations = sync_artifacts(clonner, configuration.artifact_servers)
77
79
  wait_remote_operations(remote_operations)
78
80
 
79
81
  update_crontab_redeploy_rules(configuration, build_servers.first)
@@ -380,33 +382,35 @@ class Indocker::ConfigurationDeployer
380
382
  @progress.start_syncing_artifact(server, artifact)
381
383
 
382
384
  thread = Thread.new do
383
- session = Indocker::SshSession.new(
384
- host: server.host,
385
- user: server.user,
386
- port: server.port,
387
- logger: @logger
388
- )
385
+ server.synchronize do
386
+ session = Indocker::SshSession.new(
387
+ host: server.host,
388
+ user: server.user,
389
+ port: server.port,
390
+ logger: @logger
391
+ )
389
392
 
390
- @logger.info("Pulling git artifact #{artifact.name.to_s.green} for #{server.user}@#{server.host}")
391
- result = clonner.clone(session, artifact.repository)
393
+ @logger.info("Pulling git artifact #{artifact.name.to_s.green} for #{server.user}@#{server.host}")
394
+ result = clonner.clone(session, artifact.repository)
392
395
 
393
- if result.exit_code != 0
394
- @logger.error("Artifact repository :#{artifact.repository.name} was not clonned")
395
- @logger.error(result.stderr_data)
396
- exit 1
397
- end
396
+ if result.exit_code != 0
397
+ @logger.error("Artifact repository :#{artifact.repository.name} was not clonned")
398
+ @logger.error(result.stderr_data)
399
+ exit 1
400
+ end
398
401
 
399
- source_path = File.join(artifact.repository.clone_path, artifact.source_path)
400
- result = session.exec!("mkdir -p #{artifact.target_path}")
401
- result = session.exec!("cp -r #{source_path} #{artifact.target_path}")
402
+ source_path = File.join(artifact.repository.clone_path, artifact.source_path)
403
+ result = session.exec!("mkdir -p #{artifact.target_path}")
404
+ result = session.exec!("cp -r #{source_path} #{artifact.target_path}")
402
405
 
403
- if !result.success?
404
- @logger.error(result.stdout_data)
405
- @logger.error(result.stderr_data)
406
- exit 1
407
- end
406
+ if !result.success?
407
+ @logger.error(result.stdout_data)
408
+ @logger.error(result.stderr_data)
409
+ exit 1
410
+ end
408
411
 
409
- @progress.finish_syncing_artifact(server, artifact)
412
+ @progress.finish_syncing_artifact(server, artifact)
413
+ end
410
414
  end
411
415
 
412
416
  RemoteOperation.new(thread, server, :artifact_sync)
@@ -14,9 +14,10 @@ class Indocker::ContextArgs
14
14
  end
15
15
 
16
16
  value = @context_args.fetch(name) do
17
- Indocker.logger.error("build arg '#{format_arg(name)}' is not defined#{@container ? " for container :#{@container.name}" : ""}")
18
- Indocker.logger.error("available args: #{@context_args.inspect}")
19
- exit 1
17
+ Indocker.logger.warn("build arg '#{format_arg(name)}' is not defined#{@container ? " for container :#{@container.name}" : ""}")
18
+ Indocker.logger.warn("available args: #{@context_args.inspect}")
19
+
20
+ nil
20
21
  end
21
22
 
22
23
  if value.is_a?(Hash)
@@ -10,6 +10,8 @@ class Indocker::Repositories::Clonner
10
10
  raise ArgumenError.new("only git repositories should be clonned") if !repository.is_git?
11
11
 
12
12
  session.exec!("rm -rf #{repository.clone_path} && mkdir -p #{repository.clone_path}")
13
- session.exec!("git clone -b #{repository.branch} --depth 1 #{repository.remote_url} #{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}'")
14
16
  end
15
17
  end
@@ -1,13 +1,16 @@
1
1
  class Indocker::Repositories::Git < Indocker::Repositories::Abstract
2
- attr_reader :remote_url, :remote_name, :email, :password, :branch
2
+ attr_reader :remote_url, :remote_name, :email, :password, :branch, :ssh_key
3
3
 
4
- def setup(remote_name:, remote_url:, email: nil, password: nil, branch:, clone_path: nil)
4
+ DEFAULT_SSH_KEY = "id_rsa"
5
+
6
+ def setup(remote_name:, remote_url:, email: nil, password: nil, branch:, clone_path: nil, ssh_key: DEFAULT_SSH_KEY)
5
7
  @remote_name = remote_name
6
8
  @remote_url = remote_url
7
9
  @email = email
8
10
  @password = password
9
11
  @branch = branch
10
12
  @clone_path = clone_path
13
+ @ssh_key = ssh_key
11
14
  self
12
15
  end
13
16
 
@@ -17,4 +17,14 @@ class Indocker::Server
17
17
  super
18
18
  end
19
19
  end
20
+
21
+ def synchronize(&block)
22
+ semaphore.synchronize do
23
+ block.call if block_given?
24
+ end
25
+ end
26
+
27
+ def semaphore
28
+ @semaphore ||= Mutex.new
29
+ end
20
30
  end
@@ -1,3 +1,3 @@
1
1
  module Indocker
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.7"
3
3
  end
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.1.2
4
+ version: 0.1.7
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: 2020-04-13 00:00:00.000000000 Z
12
+ date: 2020-07-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ssh
@@ -159,7 +159,7 @@ homepage: https://github.com/ArtStation/indocker
159
159
  licenses:
160
160
  - MIT
161
161
  metadata: {}
162
- post_install_message:
162
+ post_install_message:
163
163
  rdoc_options: []
164
164
  require_paths:
165
165
  - lib
@@ -175,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  version: '0'
176
176
  requirements: []
177
177
  rubygems_version: 3.0.8
178
- signing_key:
178
+ signing_key:
179
179
  specification_version: 4
180
180
  summary: Docker Containers Deployment
181
181
  test_files: []