summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil TrzciƄski <ayufan@ayufan.eu>2017-03-27 11:58:57 +0000
committerDJ Mountney <david@twkie.net>2017-03-27 14:49:44 -0700
commit81b1730d44055af575bc234c151bd2b1708b205d (patch)
tree754c6643720c212be9679287e6a280661b7930e9
parent87d66fa5a5089eda95a50783413730a9c3c36d62 (diff)
downloadgitlab-ce-81b1730d44055af575bc234c151bd2b1708b205d.tar.gz
Merge branch 'fix/gb/pipeline-retry-only-latest-jobs' into 'master'
Do not retry jobs multiple times when retrying a pipeline Closes #30092 See merge request !10249
-rw-r--r--app/services/ci/retry_pipeline_service.rb4
-rw-r--r--changelogs/unreleased/fix-gb-pipeline-retry-only-latest-jobs.yml5
-rw-r--r--spec/services/ci/retry_pipeline_service_spec.rb13
3 files changed, 20 insertions, 2 deletions
diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb
index 574561adc4c..f72ddbf690c 100644
--- a/app/services/ci/retry_pipeline_service.rb
+++ b/app/services/ci/retry_pipeline_service.rb
@@ -7,14 +7,14 @@ module Ci
raise Gitlab::Access::AccessDeniedError
end
- pipeline.builds.failed_or_canceled.find_each do |build|
+ pipeline.builds.latest.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|
+ pipeline.builds.latest.skipped.find_each do |skipped|
retry_optimistic_lock(skipped) { |build| build.process }
end
diff --git a/changelogs/unreleased/fix-gb-pipeline-retry-only-latest-jobs.yml b/changelogs/unreleased/fix-gb-pipeline-retry-only-latest-jobs.yml
new file mode 100644
index 00000000000..c14679be70f
--- /dev/null
+++ b/changelogs/unreleased/fix-gb-pipeline-retry-only-latest-jobs.yml
@@ -0,0 +1,5 @@
+---
+title: Fix bug that caused jobs that already had been retried to be retried again
+ when retrying a pipeline
+merge_request: 10249
+author:
diff --git a/spec/services/ci/retry_pipeline_service_spec.rb b/spec/services/ci/retry_pipeline_service_spec.rb
index 5445b65f4e8..f1b2d3a4798 100644
--- a/spec/services/ci/retry_pipeline_service_spec.rb
+++ b/spec/services/ci/retry_pipeline_service_spec.rb
@@ -9,6 +9,19 @@ describe Ci::RetryPipelineService, '#execute', :services do
context 'when user has ability to modify pipeline' do
let(:user) { create(:admin) }
+ context 'when there are already retried jobs present' do
+ before do
+ create_build('rspec', :canceled, 0)
+ create_build('rspec', :failed, 0)
+ end
+
+ it 'does not retry jobs that has already been retried' do
+ expect(statuses.first).to be_retried
+ expect { service.execute(pipeline) }
+ .to change { CommitStatus.count }.by(1)
+ end
+ end
+
context 'when there are failed builds in the last stage' do
before do
create_build('rspec 1', :success, 0)