Process skipped jobs in the pipeline when retrying it
This commit is contained in:
parent
1965482f12
commit
ed98680678
|
@ -1,22 +1,21 @@
|
||||||
module Ci
|
module Ci
|
||||||
class RetryPipelineService < ::BaseService
|
class RetryPipelineService < ::BaseService
|
||||||
|
include Gitlab::OptimisticLocking
|
||||||
|
|
||||||
def execute(pipeline)
|
def execute(pipeline)
|
||||||
unless can?(current_user, :update_pipeline, pipeline)
|
unless can?(current_user, :update_pipeline, pipeline)
|
||||||
raise Gitlab::Access::AccessDeniedError
|
raise Gitlab::Access::AccessDeniedError
|
||||||
end
|
end
|
||||||
|
|
||||||
pipeline.builds.failed_or_canceled.tap do |builds|
|
pipeline.builds.failed_or_canceled.find_each do |build|
|
||||||
stage_idx = builds.order('stage_idx ASC')
|
next unless build.retryable?
|
||||||
.pluck('DISTINCT stage_idx').first
|
|
||||||
|
|
||||||
pipeline.mark_as_processable_after_stage(stage_idx)
|
Ci::RetryBuildService.new(project, current_user)
|
||||||
|
.reprocess(build)
|
||||||
|
end
|
||||||
|
|
||||||
builds.find_each do |build|
|
pipeline.builds.skipped.find_each do |skipped|
|
||||||
next unless build.retryable?
|
retry_optimistic_lock(skipped) { |build| build.process }
|
||||||
|
|
||||||
Ci::RetryBuildService.new(project, current_user)
|
|
||||||
.reprocess(build)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
MergeRequests::AddTodoWhenBuildFailsService
|
MergeRequests::AddTodoWhenBuildFailsService
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module Gitlab
|
module Gitlab
|
||||||
module OptimisticLocking
|
module OptimisticLocking
|
||||||
extend self
|
module_function
|
||||||
|
|
||||||
def retry_lock(subject, retries = 100, &block)
|
def retry_lock(subject, retries = 100, &block)
|
||||||
loop do
|
loop do
|
||||||
|
@ -15,5 +15,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
alias :retry_optimistic_lock :retry_lock
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue