diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 77a2dec4f720f75e9f6236fa81a01e9b5b56cda9..6c9ce0dc4812ff0f2e892d12ea75d971389cab88 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -290,13 +290,15 @@ module Ci
     end
 
     def can_be_served?(runner)
-      if tag_list.empty? && !runner.run_untagged?
-        return false
-      end
+      return false unless has_tags? || runner.run_untagged?
 
       (tag_list - runner.tag_list).empty?
     end
 
+    def has_tags?
+      tag_list.any?
+    end
+
     def any_runners_online?
       project.any_runners? { |runner| runner.active? && runner.online? && can_be_served?(runner) }
     end
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index 5da54e07de827829dbf57ed4db971277dcb566b1..abae3271a5c860d26bc597a3fb8beccba3c6977a 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -309,6 +309,18 @@ describe Ci::Build, models: true do
     end
   end
 
+  describe '#has_tags?' do
+    context 'when build has tags' do
+      subject { create(:ci_build, tag_list: ['tag']) }
+      it { is_expected.to have_tags }
+    end
+
+    context 'when build does not have tags' do
+      subject { create(:ci_build, tag_list: []) }
+      it { is_expected.to_not have_tags }
+    end
+  end
+
   describe '#any_runners_online?' do
     subject { build.any_runners_online? }