diff --git a/lib/gitlab/ci/config/node/stage.rb b/lib/gitlab/ci/config/node/stage.rb
index c7e12f291d7dd44789ac8bc8c8f691602c9a71e7..9c76cf7c0b77d15d85010811708e6bddea8d76c3 100644
--- a/lib/gitlab/ci/config/node/stage.rb
+++ b/lib/gitlab/ci/config/node/stage.rb
@@ -10,13 +10,7 @@ module Gitlab
 
           validations do
             validates :config, key: true
-
-            validate do |entry|
-              unless entry.global
-                raise Entry::InvalidError,
-                  'This entry needs reference to global configuration'
-              end
-            end
+            validates :global, required_attribute: true
           end
 
           def self.default
diff --git a/lib/gitlab/ci/config/node/validators.rb b/lib/gitlab/ci/config/node/validators.rb
index 7b2f57990b5c468fb99b0051b4888853a79666f8..6f0e14e2f0a4f81eaaed8f37b1eb992dffc6ad21 100644
--- a/lib/gitlab/ci/config/node/validators.rb
+++ b/lib/gitlab/ci/config/node/validators.rb
@@ -33,6 +33,15 @@ module Gitlab
             end
           end
 
+          class RequiredAttributeValidator < ActiveModel::EachValidator
+            def validate_each(record, attribute, value)
+              if value.nil?
+                raise Entry::InvalidError,
+                  "Entry needs #{attribute} attribute set internally."
+              end
+            end
+          end
+
           class KeyValidator < ActiveModel::EachValidator
             include LegacyValidationHelpers
 
diff --git a/spec/lib/gitlab/ci/config/node/stage_spec.rb b/spec/lib/gitlab/ci/config/node/stage_spec.rb
index 92150ea5337ba9305682c92d67951b16907130ec..4047d46c80f11e24e110ea61e3bb761f5e9eeab4 100644
--- a/spec/lib/gitlab/ci/config/node/stage_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/stage_spec.rb
@@ -27,8 +27,10 @@ describe Gitlab::Ci::Config::Node::Stage do
           let(:entry) { described_class.new(config) }
 
           it 'raises error' do
-            expect { entry }
-              .to raise_error Gitlab::Ci::Config::Node::Entry::InvalidError
+            expect { entry }.to raise_error(
+              Gitlab::Ci::Config::Node::Entry::InvalidError,
+              /Entry needs global attribute set internally./
+            )
           end
         end