summaryrefslogtreecommitdiff
path: root/app/services/ci/retry_pipeline_service.rb
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-23 11:44:49 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-23 11:44:49 +0100
commited986806786d0c3fa5794409566e9e18a7916ed9 (patch)
treea1e86cb5708ed9e748c367537edbfa1ff8987683 /app/services/ci/retry_pipeline_service.rb
parent1965482f12688f4f26342b91eca888567d0dac04 (diff)
downloadgitlab-ce-ed986806786d0c3fa5794409566e9e18a7916ed9.tar.gz
Process skipped jobs in the pipeline when retrying it
Diffstat (limited to 'app/services/ci/retry_pipeline_service.rb')
-rw-r--r--app/services/ci/retry_pipeline_service.rb19
1 files changed, 9 insertions, 10 deletions
diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb
index ca19b828e1c..574561adc4c 100644
--- a/app/services/ci/retry_pipeline_service.rb
+++ b/app/services/ci/retry_pipeline_service.rb
@@ -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.mark_as_processable_after_stage(stage_idx)
+ pipeline.builds.failed_or_canceled.find_each do |build|
+ next unless build.retryable?
- builds.find_each do |build|
- next unless build.retryable?
+ Ci::RetryBuildService.new(project, current_user)
+ .reprocess(build)
+ end
- 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