Exemple #1
0
 /**
  * @param Build $copyFrom
  * @return \PHPCI\Model\Build
  */
 public function createDuplicateBuild(Build $copyFrom)
 {
     $data = $copyFrom->getDataArray();
     // Clean up unwanted properties from the original build:
     unset($data['id']);
     unset($data['status']);
     unset($data['log']);
     unset($data['started']);
     unset($data['finished']);
     $build = new Build();
     $build->setValues($data);
     $build->setCreated(new \DateTime());
     return $this->buildStore->save($build);
 }
Exemple #2
0
 protected function createBuild($projectId, $commitId, $branch, $committer, $commitMessage, $extra = null)
 {
     // Check if a build already exists for this commit ID:
     $builds = $this->buildStore->getByProjectAndCommit($projectId, $commitId);
     if ($builds['count']) {
         return true;
     }
     // If not, create a new build job for it:
     $build = new Build();
     $build->setProjectId($projectId);
     $build->setCommitId($commitId);
     $build->setStatus(Build::STATUS_NEW);
     $build->setLog('');
     $build->setCreated(new \DateTime());
     $build->setBranch($branch);
     $build->setCommitterEmail($committer);
     $build->setCommitMessage($commitMessage);
     if (!is_null($extra)) {
         $build->setExtra(json_encode($extra));
     }
     $build = BuildFactory::getBuild($this->buildStore->save($build));
     // Send a status postback if the build type provides one:
     $build->sendStatusPostback();
     return true;
 }
Exemple #3
0
 /**
  * Create a new pending build for a project.
  */
 public function build($projectId)
 {
     /* @var \PHPCI\Model\Project $project */
     $project = $this->projectStore->getById($projectId);
     if (empty($project)) {
         throw new NotFoundException('Project with id: ' . $projectId . ' not found');
     }
     $build = new Build();
     $build->setProjectId($projectId);
     $build->setCommitId('Manual');
     $build->setStatus(Build::STATUS_NEW);
     $build->setBranch($project->getBranch());
     $build->setCreated(new \DateTime());
     $build->setCommitterEmail($_SESSION['user']->getEmail());
     $build = $this->buildStore->save($build);
     header('Location: ' . PHPCI_URL . 'build/view/' . $build->getId());
     exit;
 }
Exemple #4
0
 /**
  * Run the active build.
  */
 public function execute()
 {
     // Update the build in the database, ping any external services.
     $this->build->setStatus(Build::STATUS_RUNNING);
     $this->build->setStarted(new \DateTime());
     $this->store->save($this->build);
     $this->build->sendStatusPostback();
     $success = true;
     $previous_build = $this->build->getProject()->getPreviousBuild($this->build->getBranch());
     $previous_state = Build::STATUS_NEW;
     if ($previous_build) {
         $previous_state = $previous_build->getStatus();
     }
     try {
         // Set up the build:
         $this->setupBuild();
         // Run the core plugin stages:
         foreach (array('setup', 'test') as $stage) {
             $success &= $this->pluginExecutor->executePlugins($this->config, $stage);
         }
         // Set the status so this can be used by complete, success and failure
         // stages.
         if ($success) {
             $this->build->setStatus(Build::STATUS_SUCCESS);
         } else {
             $this->build->setStatus(Build::STATUS_FAILED);
         }
         if ($success) {
             $this->pluginExecutor->executePlugins($this->config, 'success');
             if ($previous_state == Build::STATUS_FAILED) {
                 $this->pluginExecutor->executePlugins($this->config, 'fixed');
             }
             $this->buildLogger->logSuccess(Lang::get('build_success'));
         } else {
             $this->pluginExecutor->executePlugins($this->config, 'failure');
             if ($previous_state == Build::STATUS_SUCCESS || $previous_state == Build::STATUS_NEW) {
                 $this->pluginExecutor->executePlugins($this->config, 'broken');
             }
             $this->buildLogger->logFailure(Lang::get('build_failed'));
         }
     } catch (\Exception $ex) {
         $this->build->setStatus(Build::STATUS_FAILED);
         $this->buildLogger->logFailure(Lang::get('exception') . $ex->getMessage());
     } finally {
         // Complete stage plugins are always run
         $this->pluginExecutor->executePlugins($this->config, 'complete');
     }
     // Update the build in the database, ping any external services, etc.
     $this->build->sendStatusPostback();
     $this->build->setFinished(new \DateTime());
     // Clean up:
     $this->buildLogger->log(Lang::get('removing_build'));
     $this->build->removeBuildDirectory();
     $this->store->save($this->build);
 }
Exemple #5
0
 /**
  * Run the active build.
  */
 public function execute()
 {
     // Update the build in the database, ping any external services.
     $this->build->setStatus(Build::STATUS_RUNNING);
     $this->build->setStarted(new \DateTime());
     $this->store->save($this->build);
     $this->build->sendStatusPostback();
     $success = true;
     try {
         // Set up the build:
         $this->setupBuild();
         // Run the core plugin stages:
         foreach (array('setup', 'test') as $stage) {
             $success &= $this->pluginExecutor->executePlugins($this->config, $stage);
         }
         // Set the status so this can be used by complete, success and failure
         // stages.
         if ($success) {
             $this->build->setStatus(Build::STATUS_SUCCESS);
         } else {
             $this->build->setStatus(Build::STATUS_FAILED);
         }
         // Complete stage plugins are always run
         $this->pluginExecutor->executePlugins($this->config, 'complete');
         if ($success) {
             $this->pluginExecutor->executePlugins($this->config, 'success');
             $this->buildLogger->logSuccess(Lang::get('build_success'));
         } else {
             $this->pluginExecutor->executePlugins($this->config, 'failure');
             $this->buildLogger->logFailure(Lang::get('build_failed'));
         }
         // Clean up:
         $this->buildLogger->log(Lang::get('removing_build'));
         $cmd = 'rm -Rf "%s"';
         if (IS_WIN) {
             $cmd = 'rmdir /S /Q "%s"';
         }
         $this->executeCommand($cmd, $this->buildPath);
     } catch (\Exception $ex) {
         $this->build->setStatus(Build::STATUS_FAILED);
         $this->buildLogger->logFailure(Lang::get('exception') . $ex->getMessage());
     }
     // Update the build in the database, ping any external services, etc.
     $this->build->sendStatusPostback();
     $this->build->setFinished(new \DateTime());
     $this->store->save($this->build);
 }
Exemple #6
0
 /**
  * Create a build using an existing build as a template:
  */
 public function rebuild($buildId)
 {
     $copy = BuildFactory::getBuildById($buildId);
     if (empty($copy)) {
         throw new NotFoundException('Build with ID: ' . $buildId . ' does not exist.');
     }
     $build = new Build();
     $build->setProjectId($copy->getProjectId());
     $build->setCommitId($copy->getCommitId());
     $build->setStatus(Build::STATUS_NEW);
     $build->setBranch($copy->getBranch());
     $build->setCreated(new \DateTime());
     $build->setCommitterEmail($copy->getCommitterEmail());
     $build->setCommitMessage($copy->getCommitMessage());
     $build->setExtra(json_encode($copy->getExtra()));
     $build = $this->buildStore->save($build);
     header('Location: ' . PHPCI_URL . 'build/view/' . $build->getId());
     exit;
 }
Exemple #7
0
 /**
  * @param Build $copyFrom
  * @return \PHPCI\Model\Build
  */
 public function createDuplicateBuild(Build $copyFrom)
 {
     $data = $copyFrom->getDataArray();
     // Clean up unwanted properties from the original build:
     unset($data['id']);
     unset($data['status']);
     unset($data['log']);
     unset($data['started']);
     unset($data['finished']);
     $build = new Build();
     $build->setValues($data);
     $build->setCreated(new \DateTime());
     $build->setStatus(0);
     $build = $this->buildStore->save($build);
     $buildId = $build->getId();
     if (!empty($buildId)) {
         $build = BuildFactory::getBuild($build);
         $build->sendStatusPostback();
         $this->addBuildToQueue($build);
     }
     return $build;
 }