code: def process(self, document):
          
          self.logger.info("Processing group of tasks (parallel=%s)", self.get_parallel_mode())
          self.pipeline.data.env_list[2] = {}
  
          output, shells = [], []
          result = Adapter({'success': True, 'output': []})
          for task_entry in document:
              key, entry = list(task_entry.items())[0]
  
              if (not self.parallel or key == 'env') and len(shells) > 0:
                  result = Adapter(self.process_shells(shells))
                  output += result.output
                  shells = []
                  if not result.success:
                      break
  
              if key == 'env':
                  self.pipeline.data.env_list[2].update(entry)
  
              elif key in ['shell', 'docker(container)', 'docker(image)', 'python',
                           'packer', 'ansible(simple)']:
                  self.prepare_shell_data(shells, key, entry)
  
          if result.success:
              result = Adapter(self.process_shells(shells))
              output += result.output
  
          self.event.delegate(result.success)
          return {'success': result.success, 'output': output}
docs: Processing a group of tasks.