protected function runDeployment(OutputInterface $output, StrategyInterface $strategy)
    {
        // Run "Pre Deploy" Tasks
        $this->runtime->setStage(Runtime::PRE_DEPLOY);
        if (!$this->runTasks($output, $strategy->getPreDeployTasks())) {
            throw $this->getException();
        }

        // Run "On Deploy" Tasks
        $this->runtime->setStage(Runtime::ON_DEPLOY);
        $this->runOnHosts($output, $strategy->getOnDeployTasks());

        // Run "On Release" Tasks
        $this->runtime->setStage(Runtime::ON_RELEASE);
        $this->runOnHosts($output, $strategy->getOnReleaseTasks());

        // Run "Post Release" Tasks
        $this->runtime->setStage(Runtime::POST_RELEASE);
        $this->runOnHosts($output, $strategy->getPostReleaseTasks());

        // Run "Post Deploy" Tasks
        $this->runtime->setStage(Runtime::POST_DEPLOY);
        if (!$this->runTasks($output, $strategy->getPostDeployTasks())) {
            throw $this->getException();
        }
    }