diff --git a/lib/gitlab/ci/config/node/entry.rb b/lib/gitlab/ci/config/node/entry.rb
index 9e79e170a4fabf8cbc385763e71a0e9fc6133cdf..7148f4c2a79e1e3f400bc7088f46d5becb6010ca 100644
--- a/lib/gitlab/ci/config/node/entry.rb
+++ b/lib/gitlab/ci/config/node/entry.rb
@@ -26,12 +26,16 @@ module Gitlab
             process_nodes!
           end
 
+          def leaf?
+            nodes.none?
+          end
+
           def nodes
-            @nodes.values
+            self.class.nodes
           end
 
-          def leaf?
-            self.class.nodes.none?
+          def descendants
+            @nodes.values
           end
 
           def ancestors
@@ -43,7 +47,7 @@ module Gitlab
           end
 
           def errors
-            @validator.messages + nodes.flat_map(&:errors)
+            @validator.messages + @nodes.values.flat_map(&:errors)
           end
 
           def value
@@ -73,13 +77,13 @@ module Gitlab
           private
 
           def compose!
-            self.class.nodes.each do |key, essence|
+            nodes.each do |key, essence|
               @nodes[key] = create_node(key, essence)
             end
           end
 
           def process_nodes!
-            nodes.each(&:process!)
+            @nodes.each_value(&:process!)
           end
 
           def create_node(key, essence)
diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb
index 8f2f9e171d114714f7c198f95ccfd9c0fb8d508c..254cb28190ce4e34019390d1df1388f07fa68680 100644
--- a/spec/lib/gitlab/ci/config/node/global_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/global_spec.rb
@@ -31,24 +31,24 @@ describe Gitlab::Ci::Config::Node::Global do
         before { global.process! }
 
         it 'creates nodes hash' do
-          expect(global.nodes).to be_an Array
+          expect(global.descendants).to be_an Array
         end
 
         it 'creates node object for each entry' do
-          expect(global.nodes.count).to eq 9
+          expect(global.descendants.count).to eq 9
         end
 
         it 'creates node object using valid class' do
-          expect(global.nodes.first)
+          expect(global.descendants.first)
             .to be_an_instance_of Gitlab::Ci::Config::Node::Script
-          expect(global.nodes.second)
+          expect(global.descendants.second)
             .to be_an_instance_of Gitlab::Ci::Config::Node::Image
         end
 
         it 'sets correct description for nodes' do
-          expect(global.nodes.first.description)
+          expect(global.descendants.first.description)
             .to eq 'Script that will be executed before each job.'
-          expect(global.nodes.second.description)
+          expect(global.descendants.second.description)
             .to eq 'Docker image that will be used to execute jobs.'
         end
       end
@@ -139,11 +139,11 @@ describe Gitlab::Ci::Config::Node::Global do
 
       describe '#nodes' do
         it 'instantizes all nodes' do
-          expect(global.nodes.count).to eq 9
+          expect(global.descendants.count).to eq 9
         end
 
         it 'contains undefined nodes' do
-          expect(global.nodes.first)
+          expect(global.descendants.first)
             .to be_an_instance_of Gitlab::Ci::Config::Node::Undefined
         end
       end