diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-02-23 11:44:49 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-02-23 11:44:49 +0100 |
commit | ed986806786d0c3fa5794409566e9e18a7916ed9 (patch) | |
tree | a1e86cb5708ed9e748c367537edbfa1ff8987683 | |
parent | 1965482f12688f4f26342b91eca888567d0dac04 (diff) | |
download | gitlab-ce-ed986806786d0c3fa5794409566e9e18a7916ed9.tar.gz |
Process skipped jobs in the pipeline when retrying it
-rw-r--r-- | app/services/ci/retry_pipeline_service.rb | 19 | ||||
-rw-r--r-- | lib/gitlab/optimistic_locking.rb | 4 |
2 files changed, 12 insertions, 11 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 diff --git a/lib/gitlab/optimistic_locking.rb b/lib/gitlab/optimistic_locking.rb index 879d46446b3..e0b2286f1dc 100644 --- a/lib/gitlab/optimistic_locking.rb +++ b/lib/gitlab/optimistic_locking.rb @@ -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 |