class Autodeploy::Deployer

Public Class Methods

new(yaml_config, jenkins_job) click to toggle source
# File lib/autodeploy/deployer.rb, line 5
def initialize(yaml_config, jenkins_job)
        @config = yaml_config
        @job = jenkins_job
end

Public Instance Methods

acquire_lock_from_mysql() click to toggle source
# File lib/autodeploy/deployer.rb, line 80
          def acquire_lock_from_mysql
Autodeploy.log "Attempting to acquire lock..."

                  begin
                          Models::DeployLock.create(job_name: @config['job'],
                            host: Socket.gethostname,
                            created_at: Time.now.to_i * 1000)
                  rescue ActiveRecord::RecordNotUnique
                          nil
                  end
          end
build_full_file_path(deploy_build) click to toggle source
# File lib/autodeploy/deployer.rb, line 46
def build_full_file_path(deploy_build)
                    artifact_file_name = @job['artifacts'][0]['fileName']

                    Autodeploy.log "DeployBuild: #{deploy_build}"

                    filename = [deploy_build.build_number, deploy_build.git_sha, artifact_file_name].compact.join('-')
                    @filepath = File.join(@config['download_dir'], filename)
end
deploy() click to toggle source
# File lib/autodeploy/deployer.rb, line 34
def deploy
  Autodeploy.log "Lock acquired"

  begin
    return unless move_artifact_to_deploy_dir

    record_successful_deployment
  ensure
    release_lock_from_mysql
  end
end
get_build_to_deploy(job_name) click to toggle source
# File lib/autodeploy/deployer.rb, line 59
        def get_build_to_deploy(job_name)
Models::DeployBuild.where(job_name: job_name).order("created_at DESC").first
        end
has_file_been_deployed() click to toggle source
# File lib/autodeploy/deployer.rb, line 74
          def has_file_been_deployed
Models::DeployAudit.where(host: Socket.gethostname,
                          build_number: @job['number'],
                          jenkins_build_timestamp: @job['timestamp']).exists?
          end
has_file_been_downloaded() click to toggle source
# File lib/autodeploy/deployer.rb, line 63
            def has_file_been_downloaded
                    File.exists?(@filepath)
end
lock_and_deploy() click to toggle source
# File lib/autodeploy/deployer.rb, line 25
def lock_and_deploy
  locked = acquire_lock_from_mysql
  if locked
    deploy
  else
    Autodeploy.log "Waiting for lock..."
  end
end
move_artifact_to_deploy_dir() click to toggle source
# File lib/autodeploy/deployer.rb, line 98
          def move_artifact_to_deploy_dir
Autodeploy.log "Moving aritifact to deploy dir"

                  cmd = "mv -f #{@filepath} #{@config['deploy_dir']}/#{@config['deploy_artifact_name']}"
                  output = system(cmd)

Autodeploy.log output

output
          end
ready_to_deploy?(job_name) click to toggle source
# File lib/autodeploy/deployer.rb, line 55
def ready_to_deploy?(job_name)
  Models::DeployBuild.where(job_name: job_name).order("created_at DESC").exists?
end
record_successful_deployment() click to toggle source
# File lib/autodeploy/deployer.rb, line 67
def record_successful_deployment
  Models::DeployAudit.create(host: Socket.gethostname,
                             build_number: @job['number'],
                             jenkins_build_timestamp: @job['timestamp'],
                             created_at:  Time.now.to_i * 1000)
end
release_lock_from_mysql() click to toggle source
# File lib/autodeploy/deployer.rb, line 92
          def release_lock_from_mysql
Autodeploy.log "Releasing lock..."
                  lock = Models::DeployLock.where(job_name: @config['job'], host: Socket.gethostname).first
                  lock.delete
          end
run() click to toggle source
# File lib/autodeploy/deployer.rb, line 10
          def run
return unless ready_to_deploy?(@config['job'])

                  deploy_build = get_build_to_deploy(@config['job'])
                  build_full_file_path(deploy_build)

                  file_downloaded = has_file_been_downloaded
                  return unless file_downloaded

                  file_deployed = has_file_been_deployed
                  return if file_deployed

lock_and_deploy
          end