Class: Indocker::Launchers::ConfigurationDeployer
- Inherits:
-
Object
- Object
- Indocker::Launchers::ConfigurationDeployer
- Defined in:
- lib/indocker/launchers/configuration_deployer.rb
Constant Summary collapse
- REMOTE_OPERATION_TIMEOUT =
60
Instance Method Summary collapse
-
#initialize(logger:, global_logger:) ⇒ ConfigurationDeployer
constructor
A new instance of ConfigurationDeployer.
-
#run(configuration:, deployment_policy:) ⇒ Object
Launch deployment & measure the benchmark.
-
#run!(configuration:, deployment_policy:) ⇒ Object
The main flow of the deployment would happen in this method.
Constructor Details
#initialize(logger:, global_logger:) ⇒ ConfigurationDeployer
Returns a new instance of ConfigurationDeployer.
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/indocker/launchers/configuration_deployer.rb', line 8 def initialize(logger:, global_logger:) Thread.abort_on_exception = true # abort all threads if exception occurs @logger = logger @global_logger = global_logger @progress = Indocker::DeploymentProgress.new( Indocker.logger.level == Logger::DEBUG ? nil : Logger.new(STDOUT) ) @compiled_images = Hash.new(false) end |
Instance Method Details
#run(configuration:, deployment_policy:) ⇒ Object
Launch deployment & measure the benchmark
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/indocker/launchers/configuration_deployer.rb', line 21 def run(configuration:, deployment_policy:) time = Benchmark.realtime do if deployment_policy.force_restart @logger.warn("WARNING. All containers will be forced to restart.") end if deployment_policy.skip_build @logger.warn("WARNING. Images build step will be skipped") end if deployment_policy.skip_deploy @logger.warn("WARNING. Images deploy step will be skipped") end run!(configuration: configuration, deployment_policy: deployment_policy) end @global_logger.info("Deployment finished".green) @global_logger.info("Total time taken: #{time.round}s".green) end |
#run!(configuration:, deployment_policy:) ⇒ Object
The main flow of the deployment would happen in this method.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/indocker/launchers/configuration_deployer.rb', line 43 def run!(configuration:, deployment_policy:) containers = find_containers_to_deploy(configuration, deployment_policy) cloner = Indocker::Repositories::Cloner.new(configuration, @logger) build_server_pool = Indocker::ServerPools::BuildServerPool.new(configuration: configuration, logger: @logger) deployer = Indocker::ContainerDeployer.new(configuration: configuration, logger: @logger) @global_logger.info("Establishing ssh sessions to all servers...") build_server_pool.create_sessions! build_servers = configuration .build_servers .uniq { |s| s.host } deploy_servers = containers .map(&:servers) .flatten .uniq { |s| s.host } servers = (deploy_servers + build_servers).uniq { |s| s.host } @progress.setup( binaries_servers: servers, build_servers: build_servers, deploy_servers: deploy_servers, env_files: configuration.env_files.keys, repositories: configuration.repositories.keys, force_restart: deployment_policy.force_restart, skip_build: deployment_policy.skip_build, skip_deploy: deployment_policy.skip_deploy, containers: containers, artifact_servers: configuration.artifact_servers, ) remote_operations = sync_indocker(servers) wait_remote_operations(remote_operations) remote_operations = sync_env_files(deploy_servers, configuration.env_files) wait_remote_operations(remote_operations) remote_operations = pull_repositories(cloner, build_servers, configuration.repositories) wait_remote_operations(remote_operations) remote_operations = sync_artifacts(cloner, configuration.artifact_servers) wait_remote_operations(remote_operations) update_crontab_redeploy_rules(configuration, build_servers.first) containers.uniq.each do |container| recursively_deploy_container( configuration, deployer, build_server_pool, container, containers, deployment_policy.skip_build, deployment_policy.skip_deploy, deployment_policy.force_restart, deployment_policy.skip_force_restart ) end Thread .list .each { |t| if t != Thread.current t.join if !t.stop? end } ensure build_server_pool.close_sessions if build_server_pool deployer.close_sessions if deployer end |