Skip to content
Snippets Groups Projects
Commit ed986806 authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Process skipped jobs in the pipeline when retrying it

parent 1965482f
No related branches found
No related tags found
1 merge request!9436Fix reprocessing skipped jobs when retrying pipeline
Pipeline #
module Ci
class RetryPipelineService < ::BaseService
include Gitlab::OptimisticLocking
def execute(pipeline)
unless can?(current_user, :update_pipeline, pipeline)
raise Gitlab::Access::AccessDeniedError
end
 
pipeline.builds.failed_or_canceled.tap do |builds|
stage_idx = builds.order('stage_idx ASC')
.pluck('DISTINCT stage_idx').first
pipeline.mark_as_processable_after_stage(stage_idx)
builds.find_each do |build|
pipeline.builds.failed_or_canceled.find_each do |build|
next unless build.retryable?
 
Ci::RetryBuildService.new(project, current_user)
.reprocess(build)
end
pipeline.builds.skipped.find_each do |skipped|
retry_optimistic_lock(skipped) { |build| build.process }
end
 
MergeRequests::AddTodoWhenBuildFailsService
Loading
Loading
module Gitlab
module OptimisticLocking
extend self
module_function
 
def retry_lock(subject, retries = 100, &block)
loop do
Loading
Loading
@@ -15,5 +15,7 @@ module Gitlab
end
end
end
alias :retry_optimistic_lock :retry_lock
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment