src/Joli/JoliCi/Executor.php
public function run(Job $job, $command)
    {
        if (is_string($command)) {
            $command = ['/bin/bash', '-c', $command];
        }

        $image = $this->docker->getImageManager()->find($job->getName());

        $hostConfig = new HostConfig();

        $config = new ContainerConfig();
        $config->setCmd($command);
        $config->setImage($image->getId());
        $config->setHostConfig($hostConfig);
        $config->setLabels(new \ArrayObject([
            'com.jolici.container=true'
        ]));
        $config->setAttachStderr(true);
        $config->setAttachStdout(true);

        $links = [];

        foreach ($job->getServices() as $service) {
            if ($service->getContainer()) {
                $serviceContainer = $this->docker->getContainerManager()->find($service->getContainer());

                $links[] = sprintf('%s:%s', $serviceContainer->getName(), $service->getName());
            }
        }

        $hostConfig->setLinks($links);

        $containerCreateResult = $this->docker->getContainerManager()->create($config);
        $attachStream = $this->docker->getContainerManager()->attach($containerCreateResult->getId(), [
            'stream' => true,
            'stdout' => true,
            'stderr' => true,
        ], ContainerManager::FETCH_STREAM);

        $attachStream->onStdout($this->logger->getRunStdoutCallback());
        $attachStream->onStderr($this->logger->getRunStderrCallback());

        $this->docker->getContainerManager()->start($containerCreateResult->getId());

        $attachStream->wait();

        $containerWait = $this->docker->getContainerManager()->wait($containerCreateResult->getId());

        return $containerWait->getStatusCode();
    }
public function run(Job $job, $command)
    {
        if (is_string($command)) {
            $command = ['/bin/bash', '-c', $command];
        }

        $image = $this->docker->getImageManager()->find($job->getName());

        $hostConfig = new HostConfig();

        $config = new ContainerConfig();
        $config->setCmd($command);
        $config->setImage($image->getId());
        $config->setHostConfig($hostConfig);
        $config->setLabels(new \ArrayObject([
            'com.jolici.container=true'
        ]));
        $config->setAttachStderr(true);
        $config->setAttachStdout(true);

        $links = [];

        foreach ($job->getServices() as $service) {
            if ($service->getContainer()) {
                $serviceContainer = $this->docker->getContainerManager()->find($service->getContainer());

                $links[] = sprintf('%s:%s', $serviceContainer->getName(), $service->getName());
            }
        }

        $hostConfig->setLinks($links);

        $containerCreateResult = $this->docker->getContainerManager()->create($config);
        $attachStream = $this->docker->getContainerManager()->attach($containerCreateResult->getId(), [
            'stream' => true,
            'stdout' => true,
            'stderr' => true,
        ], ContainerManager::FETCH_STREAM);

        $attachStream->onStdout($this->logger->getRunStdoutCallback());
        $attachStream->onStderr($this->logger->getRunStderrCallback());

        $this->docker->getContainerManager()->start($containerCreateResult->getId());

        $attachStream->wait();

        $containerWait = $this->docker->getContainerManager()->wait($containerCreateResult->getId());

        return $containerWait->getStatusCode();
    }
public function run ( Job $ job , $ command ) { if ( is_string ( $ command ) ) { $ command = [ '/bin/bash' , '-c' , $ command ] ; } $ image = $ this -> docker -> getImageManager ( ) -> find ( $ job -> getName ( ) ) ; $ hostConfig = new HostConfig ( ) ; $ config = new ContainerConfig ( ) ; $ config -> setCmd ( $ command ) ; $ config -> setImage ( $ image -> getId ( ) ) ; $ config -> setHostConfig ( $ hostConfig ) ; $ config -> setLabels ( new \ ArrayObject ( [ 'com.jolici.container=true' ] ) ) ; $ config -> setAttachStderr ( true ) ; $ config -> setAttachStdout ( true ) ; $ links = [ ] ; foreach ( $ job -> getServices ( ) as $ service ) { if ( $ service -> getContainer ( ) ) { $ serviceContainer = $ this -> docker -> getContainerManager ( ) -> find ( $ service -> getContainer ( ) ) ; $ links [ ] = sprintf ( '%s:%s' , $ serviceContainer -> getName ( ) , $ service -> getName ( ) ) ; } } $ hostConfig -> setLinks ( $ links ) ; $ containerCreateResult = $ this -> docker -> getContainerManager ( ) -> create ( $ config ) ; $ attachStream = $ this -> docker -> getContainerManager ( ) -> attach ( $ containerCreateResult -> getId ( ) , [ 'stream' => true , 'stdout' => true , 'stderr' => true , ] , ContainerManager :: FETCH_STREAM ) ; $ attachStream -> onStdout ( $ this -> logger -> getRunStdoutCallback ( ) ) ; $ attachStream -> onStderr ( $ this -> logger -> getRunStderrCallback ( ) ) ; $ this -> docker -> getContainerManager ( ) -> start ( $ containerCreateResult -> getId ( ) ) ; $ attachStream -> wait ( ) ; $ containerWait = $ this -> docker -> getContainerManager ( ) -> wait ( $ containerCreateResult -> getId ( ) ) ; return $ containerWait -> getStatusCode ( ) ; }
Run a build (it's suppose the image exist in docker

@param Job $job Build to run
@param string|array $command Command to use when run the build (null, by default, will use the command registered to the image)

@return integer The exit code of the command run inside (0 = success, otherwise it has failed)
Run a build ( it s suppose the image exist in docker