diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index 20f404ccbdd8b2f32a3f6f9b74118bdb582d826a..db3a86f84e69d589e82170b63f3e67668cf53921 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -232,6 +232,8 @@ def finalize_fast_destroy(params)
 
       by_project.each do |project, ref_paths|
         project.repository.delete_refs(*ref_paths.flatten)
+      rescue Gitlab::Git::Repository::NoRepository
+        next
       end
     end
 
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
index ceb897725955e18a341309be60d5338092387529..a7ae52109afa51b699356b45937484eea587eb44 100644
--- a/spec/models/deployment_spec.rb
+++ b/spec/models/deployment_spec.rb
@@ -1797,6 +1797,20 @@ def last_deployment_group(env)
 
       expect { project.deployments.fast_destroy_all }.not_to exceed_query_limit(control)
     end
+
+    context 'when repository was already removed' do
+      it 'removes deployment without any errors' do
+        project = create(:project, :repository)
+        environment = create(:environment, project: project)
+        deployment = create(:deployment, environment: environment, project: project)
+
+        Repositories::DestroyService.new(project.repository).execute
+        project.save! # to trigger a repository removal
+
+        expect { described_class.where(id: deployment).fast_destroy_all }
+          .to change { Deployment.count }.by(-1)
+      end
+    end
   end
 
   describe '#update_merge_request_metrics!' do