Process skipped jobs in the pipeline when retrying it
This commit is contained in:
parent
1965482f12
commit
ed98680678
|
@ -1,22 +1,21 @@
|
|||
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.builds.failed_or_canceled.find_each do |build|
|
||||
next unless build.retryable?
|
||||
|
||||
pipeline.mark_as_processable_after_stage(stage_idx)
|
||||
Ci::RetryBuildService.new(project, current_user)
|
||||
.reprocess(build)
|
||||
end
|
||||
|
||||
builds.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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
module Gitlab
|
||||
module OptimisticLocking
|
||||
extend self
|
||||
module_function
|
||||
|
||||
def retry_lock(subject, retries = 100, &block)
|
||||
loop do
|
||||
|
@ -15,5 +15,7 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
alias :retry_optimistic_lock :retry_lock
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue