diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb
index 2c5e130e5aaa7b61482424e3a24eecca1079c864..7fcbac6399aefd9f34c02d3a639537ba52497c90 100644
--- a/app/services/ci/retry_pipeline_service.rb
+++ b/app/services/ci/retry_pipeline_service.rb
@@ -8,6 +8,8 @@ module Ci
       pipeline.builds.failed_or_canceled.find_each do |build|
         next unless build.retryable?
 
+        pipeline.mark_as_processable_after_stage(build.stage_idx)
+
         Ci::RetryBuildService.new(project, current_user)
           .reprocess(build)
       end
diff --git a/spec/services/ci/retry_pipeline_service_spec.rb b/spec/services/ci/retry_pipeline_service_spec.rb
index c0af8b8450a4a02fbb03a7a4a4dbcd9cd61bc6db..8b1ed6470e4f81fadc32846fdc594d9cc4fa2df7 100644
--- a/spec/services/ci/retry_pipeline_service_spec.rb
+++ b/spec/services/ci/retry_pipeline_service_spec.rb
@@ -69,6 +69,25 @@ describe Ci::RetryPipelineService, '#execute', :services do
       end
     end
 
+    context 'when the last stage was skipepd' do
+      before do
+        create_build('build 1', :success, 0)
+        create_build('test 2', :failed, 1)
+        create_build('report 3', :skipped, 2)
+        create_build('report 4', :skipped, 2)
+      end
+
+      it 'retries builds only in the first stage' do
+        service.execute(pipeline)
+
+        expect(build('build 1')).to be_success
+        expect(build('test 2')).to be_pending
+        expect(build('report 3')).to be_created
+        expect(build('report 4')).to be_created
+        expect(pipeline.reload).to be_running
+      end
+    end
+
     context 'when pipeline contains manual actions' do
       context 'when there is a canceled manual action in first stage' do
         before do
@@ -90,14 +109,16 @@ describe Ci::RetryPipelineService, '#execute', :services do
       context 'when there is a skipped manual action in last stage' do
         before do
           create_build('rspec 1', :canceled, 0)
+          create_build('rspec 2', :skipped, 0, :manual)
           create_build('staging', :skipped, 1, :manual)
         end
 
-        it 'retries canceled job and skips manual action' do
+        it 'retries canceled job and reprocesses manual actions' do
           service.execute(pipeline)
 
           expect(build('rspec 1')).to be_pending
-          expect(build('staging')).to be_skipped
+          expect(build('rspec 2')).to be_skipped
+          expect(build('staging')).to be_created
           expect(pipeline.reload).to be_running
         end
       end