Refactorizar DeployJob
This commit is contained in:
parent
c08cfb1637
commit
45559ad58f
1 changed files with 24 additions and 25 deletions
|
@ -4,64 +4,63 @@
|
||||||
class DeployJob < ApplicationJob
|
class DeployJob < ApplicationJob
|
||||||
class DeployException < StandardError; end
|
class DeployException < StandardError; end
|
||||||
|
|
||||||
attr_reader :site
|
attr_reader :site, :deployed
|
||||||
|
|
||||||
# rubocop:disable Metrics/MethodLength
|
# rubocop:disable Metrics/MethodLength
|
||||||
def perform(site, notify = true, time = Time.now)
|
def perform(site_id, notify = true, time = Time.now)
|
||||||
ActiveRecord::Base.connection_pool.with_connection do
|
ActiveRecord::Base.connection_pool.with_connection do
|
||||||
@site = Site.find(site)
|
@site = Site.find(site_id)
|
||||||
|
@deployed = {}
|
||||||
|
|
||||||
# Si ya hay una tarea corriendo, aplazar esta. Si estuvo
|
# Si ya hay una tarea corriendo, aplazar esta. Si estuvo
|
||||||
# esperando más de 10 minutos, recuperar el estado anterior.
|
# esperando más de 10 minutos, recuperar el estado anterior.
|
||||||
#
|
#
|
||||||
# Como el trabajo actual se aplaza al siguiente, arrastrar la
|
# Como el trabajo actual se aplaza al siguiente, arrastrar la
|
||||||
# hora original para poder ir haciendo timeouts.
|
# hora original para poder ir haciendo timeouts.
|
||||||
if @site.building?
|
if site.building?
|
||||||
if 10.minutes.ago >= time
|
if 10.minutes.ago >= time
|
||||||
@site.update status: 'waiting'
|
site.update status: 'waiting'
|
||||||
raise DeployException,
|
raise DeployException,
|
||||||
"#{@site.name} la tarea estuvo más de 10 minutos esperando, volviendo al estado original"
|
"#{site.name} la tarea estuvo más de 10 minutos esperando, volviendo al estado original"
|
||||||
end
|
end
|
||||||
|
|
||||||
DeployJob.perform_in(60, site, notify, time)
|
DeployJob.perform_in(60, site_id, notify, time)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@site.update status: 'building'
|
site.update status: 'building'
|
||||||
# Asegurarse que DeployLocal sea el primero!
|
# Asegurarse que DeployLocal sea el primero!
|
||||||
@deployed = { deploy_local: site.deploy_local.deploy }
|
deployed[:deploy_local] = site.deploy_local.deploy
|
||||||
|
|
||||||
# TODO: No es opcional?
|
deploy_others if deployed[:deploy_local]
|
||||||
unless @deployed[:deploy_local]
|
|
||||||
@site.update status: 'waiting'
|
|
||||||
notify_usuaries if notify
|
|
||||||
|
|
||||||
# Hacer fallar la tarea
|
|
||||||
raise DeployException, deploy_local.build_stats.last.log
|
|
||||||
end
|
|
||||||
|
|
||||||
deploy_others
|
|
||||||
|
|
||||||
# Volver a la espera
|
# Volver a la espera
|
||||||
@site.update status: 'waiting'
|
site.update status: 'waiting'
|
||||||
|
|
||||||
notify_usuaries if notify
|
notify_usuaries if notify
|
||||||
|
|
||||||
|
# Hacer fallar la tarea para enterarnos.
|
||||||
|
raise DeployException, site.deploy_local.build_stats.last.log unless deployed[:deploy_local]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# rubocop:enable Metrics/MethodLength
|
# rubocop:enable Metrics/MethodLength
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Correr todas las tareas que no sean el deploy local.
|
||||||
def deploy_others
|
def deploy_others
|
||||||
@site.deploys.where.not(type: 'DeployLocal').find_each do |d|
|
site.deploys.where.not(type: 'DeployLocal').find_each do |d|
|
||||||
@deployed[d.type.underscore.to_sym] = d.deploy
|
deployed[d.type.underscore.to_sym] = d.deploy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Notificar a todes les usuaries no temporales.
|
||||||
|
#
|
||||||
|
# TODO: Poder configurar quiénes quieren recibir notificaciones.
|
||||||
def notify_usuaries
|
def notify_usuaries
|
||||||
@site.roles.where(rol: 'usuarie', temporal: false).pluck(:usuarie_id).each do |usuarie|
|
site.roles.where(rol: 'usuarie', temporal: false).pluck(:usuarie_id).each do |usuarie|
|
||||||
DeployMailer.with(usuarie: usuarie, site: @site.id)
|
DeployMailer.with(usuarie: usuarie, site: site.id)
|
||||||
.deployed(@deployed)
|
.deployed(deployed)
|
||||||
.deliver_now
|
.deliver_now
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue