Example #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $configFile = $input->getArgument('config');
     $terminalDimensions = $this->getApplication()->getTerminalDimensions();
     $container = $this->getApplication()->getContainer();
     $configurationService = $container->get('configurationService');
     $dockerService = $container->get('dockerService');
     $configuration = $configurationService->createFromYaml($configFile, $input->getoption('env'));
     $script = $configuration->getScript();
     $allSuccess = true;
     foreach ($configuration->getImages() as $image) {
         $output->writeln(sprintf('<info>%s</info>', str_repeat('=', $terminalDimensions[0])));
         $output->writeln(sprintf('<info>Running %s</info>', $image));
         $output->writeln(sprintf('<info>%s</info>', str_repeat('=', $terminalDimensions[0])));
         $container = new Container();
         $container->setImage($image);
         foreach ($configuration->getVolumes() as $volume) {
             $container->addBind($volume['source'], $volume['target']);
         }
         $container->addVolume($script->getTargetFile(), $script->getTmpFile());
         $container->addBind($configuration->getWorkingDir(), '/home/ci/project');
         $container->addBind($script->getTmpFile(), $script->getTargetFile());
         $container->addCallback([$this, 'logListener'], [$output]);
         $output->writeln('<comment>Updating image</comment>');
         if (!$dockerService->createImage($container->getImage())) {
             throw new \Exception('Image could not be updated/pulled');
         }
         $output->writeln('<comment>Creating container</comment>');
         if (!($container = $dockerService->createContainer($container))) {
             throw new \Exception('Container could not be created');
         }
         $output->writeln('<comment>Running container</comment>');
         if (!($container = $dockerService->runContainer($container))) {
             throw new \Exception('Container could not be started');
         }
         $result = $dockerService->getInfoForContainer($container);
         if ($allSuccess && $result['State']['ExitCode'] !== 0) {
             $allSuccess = false;
         }
         $output->writeln('<comment>Deleting container</comment>');
         if (!($container = $dockerService->deleteContainer($container))) {
             throw new \Exception('Container could not be deleted');
         }
     }
     $script->deleteTmpFile();
     return (int) (!$allSuccess);
 }