summaryrefslogtreecommitdiff
path: root/app/services/ci/retry_job_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/ci/retry_job_service.rb')
-rw-r--r--app/services/ci/retry_job_service.rb16
1 files changed, 11 insertions, 5 deletions
diff --git a/app/services/ci/retry_job_service.rb b/app/services/ci/retry_job_service.rb
index da0e80dfed7..e3cbba6de23 100644
--- a/app/services/ci/retry_job_service.rb
+++ b/app/services/ci/retry_job_service.rb
@@ -19,7 +19,7 @@ module Ci
end
# rubocop: disable CodeReuse/ActiveRecord
- def clone!(job, variables: [], enqueue_if_actionable: false)
+ def clone!(job, variables: [], enqueue_if_actionable: false, start_pipeline: false)
# Cloning a job requires a strict type check to ensure
# the attributes being used for the clone are taken straight
# from the model and not overridden by other abstractions.
@@ -32,7 +32,11 @@ module Ci
new_job.set_enqueue_immediately!
end
+ start_pipeline_proc = -> { start_pipeline(job, new_job) } if start_pipeline
+
new_job.run_after_commit do
+ start_pipeline_proc&.call
+
::Ci::CopyCrossDatabaseAssociationsService.new.execute(job, new_job)
::Deployments::CreateForBuildService.new.execute(new_job)
@@ -59,15 +63,12 @@ module Ci
def check_assignable_runners!(job); end
def retry_job(job, variables: [])
- clone!(job, variables: variables, enqueue_if_actionable: true).tap do |new_job|
+ clone!(job, variables: variables, enqueue_if_actionable: true, start_pipeline: true).tap do |new_job|
check_assignable_runners!(new_job) if new_job.is_a?(Ci::Build)
next if new_job.failed?
ResetSkippedJobsService.new(project, current_user).execute(job)
-
- Ci::PipelineCreation::StartPipelineService.new(job.pipeline).execute
- new_job.reset
end
end
@@ -76,6 +77,11 @@ module Ci
raise Gitlab::Access::AccessDeniedError, '403 Forbidden'
end
end
+
+ def start_pipeline(job, new_job)
+ Ci::PipelineCreation::StartPipelineService.new(job.pipeline).execute
+ new_job.reset
+ end
end
end