diff --git a/lib/gitlab/ci/config/node/configurable.rb b/lib/gitlab/ci/config/node/configurable.rb
index 120457690d86390af5536e8e2b19461c67ed95c9..b72bc0d592a2b4e33036c3af5767d2186295de29 100644
--- a/lib/gitlab/ci/config/node/configurable.rb
+++ b/lib/gitlab/ci/config/node/configurable.rb
@@ -55,6 +55,12 @@ module Gitlab
                        { class: entry_class,
                          description: metadata[:description] } }
 
+              define_method(symbol) do
+                raise Entry::InvalidError unless valid?
+
+                @nodes[symbol].try(:value)
+              end
+
               (@allowed_nodes ||= {}).merge!(node)
             end
           end
diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb
index ed1cdd6f15d900b7402be0f4d2bf0f8db2cf8d6b..f7649784c28cbd84d1228ee8f905feef7352e3ff 100644
--- a/lib/gitlab/ci/config/node/entry.rb
+++ b/lib/gitlab/ci/config/node/entry.rb
@@ -52,13 +52,6 @@ module Gitlab
             {}
           end
 
-          def method_missing(name, *args)
-            super unless allowed_nodes.has_key?(name)
-            raise InvalidError unless valid?
-
-            @nodes[name].try(:value)
-          end
-
           def add_node(key, entry)
             raise NotImplementedError
           end