createDeployment() 공개 메소드

public createDeployment ( ) : DNDeployment
리턴 DNDeployment
예제 #1
0
 /**
  * Deployment form submission handler.
  *
  * Initiate a DNDeployment record and redirect to it for status polling
  *
  * @param SS_HTTPRequest $request
  *
  * @return SS_HTTPResponse
  * @throws ValidationException
  * @throws null
  */
 public function startDeploy(SS_HTTPRequest $request)
 {
     // Ensure the CSRF Token is correct
     if (!$this->checkCsrfToken($request)) {
         // CSRF token didn't match
         return $this->httpError(400, 'Bad Request');
     }
     // Performs canView permission check by limiting visible projects
     $project = $this->getCurrentProject();
     if (!$project) {
         return $this->project404Response();
     }
     // Performs canView permission check by limiting visible projects
     $environment = $this->getCurrentEnvironment($project);
     if (!$environment) {
         return $this->environment404Response();
     }
     // Initiate the deployment
     // The extension point should pass in: Project, Environment, SelectRelease, buildName
     $this->extend('doDeploy', $project, $environment, $buildName, $data);
     // Start the deployment based on the approved strategy.
     $strategy = new DeploymentStrategy($environment);
     $strategy->fromArray($request->requestVar('strategy'));
     $deployment = $strategy->createDeployment();
     $deployment->start();
     return json_encode(array('url' => Director::absoluteBaseURL() . $deployment->Link()), JSON_PRETTY_PRINT);
 }
 /**
  * Begin a new deployment
  *
  * @return boolean
  */
 protected function startDeploy()
 {
     $this->Status = 'Started';
     $this->Doing = 'Deployment';
     $this->log("{$this->Title} starting deployment");
     // Check environment and SHA
     $pipeline = $this->Pipeline();
     $environment = $pipeline->Environment();
     if (empty($environment) || !$environment->exists()) {
         $this->log("No available environment for {$this->Title}");
         $this->markFailed();
         return false;
     }
     if (empty($pipeline->SHA)) {
         $this->log("No available SHA for {$this->Title}");
         $this->markFailed();
         return false;
     }
     // Skip deployment for dry run
     if ($this->Pipeline()->DryRun) {
         $this->log("[Skipped] Create DNDeployment for SHA " . $pipeline->SHA);
         $this->write();
         return true;
     }
     // Initialise deployment
     $strategy = new DeploymentStrategy($environment, array('sha' => $pipeline->SHA));
     $deployment = $strategy->createDeployment();
     $previousStep = $pipeline->findPreviousStep();
     $deployment->DeployerID = $previousStep && $previousStep->ResponderID ? $previousStep->ResponderID : $pipeline->AuthorID;
     $deployment->write();
     $deployment->start();
     $pipeline->CurrentDeploymentID = $deployment->ID;
     $pipeline->write();
     $this->write();
     return true;
 }
예제 #3
0
 /**
  * Deployment form submission handler.
  *
  * @deprecated 2.0.0 - moved to DeployDispatcher
  *
  * Initiate a DNDeployment record and redirect to it for status polling
  *
  * @param \SS_HTTPRequest $request
  *
  * @return SS_HTTPResponse
  * @throws ValidationException
  * @throws null
  */
 public function startDeploy(\SS_HTTPRequest $request)
 {
     $token = SecurityToken::inst();
     // Ensure the submitted token has a value
     $submittedToken = $request->postVar(\Dispatcher::SECURITY_TOKEN_NAME);
     if (!$submittedToken) {
         return false;
     }
     // Do the actual check.
     $check = $token->check($submittedToken);
     // Ensure the CSRF Token is correct
     if (!$check) {
         // CSRF token didn't match
         return $this->httpError(400, 'Bad Request');
     }
     // Performs canView permission check by limiting visible projects
     $project = $this->getCurrentProject();
     if (!$project) {
         return $this->project404Response();
     }
     // Performs canView permission check by limiting visible projects
     $environment = $this->getCurrentEnvironment($project);
     if (!$environment) {
         return $this->environment404Response();
     }
     // Initiate the deployment
     // The extension point should pass in: Project, Environment, SelectRelease, buildName
     $this->extend('doDeploy', $project, $environment, $buildName, $data);
     // Start the deployment based on the approved strategy.
     $strategy = new DeploymentStrategy($environment);
     $strategy->fromArray($request->requestVar('strategy'));
     $deployment = $strategy->createDeployment();
     // Bypass approval by going straight to Queued.
     $deployment->getMachine()->apply(DNDeployment::TR_QUEUE);
     return json_encode(['url' => Director::absoluteBaseURL() . $deployment->Link()], JSON_PRETTY_PRINT);
 }
 /**
  * Begin a new deployment
  *
  * @return boolean
  */
 protected function startRevertDeploy()
 {
     $this->Status = 'Started';
     $this->Doing = 'Deployment';
     $this->log("{$this->Title} starting revert deployment");
     // Skip deployment for dry run
     if ($this->Pipeline()->DryRun) {
         $this->log("[Skipped] Create DNDeployment");
         $this->write();
         return true;
     }
     // Get old deployment from pipeline
     $pipeline = $this->Pipeline();
     $previous = $pipeline->PreviousDeployment();
     if (empty($previous) || empty($previous->SHA)) {
         $this->log("No available SHA for {$this->Title}");
         $this->markFailed();
         return false;
     }
     // Initialise deployment
     $strategy = new DeploymentStrategy($pipeline->Environment(), array('sha' => $pipeline->SHA, 'leaveMaintenancePage' => $this->doRestoreDB()));
     $deployment = $strategy->createDeployment();
     $deployment->DeployerID = $pipeline->AuthorID;
     $deployment->write();
     $deployment->start();
     $this->RollbackDeploymentID = $deployment->ID;
     $this->write();
     return true;
 }
예제 #5
0
 /**
  *
  * @return SS_HTTPResponse
  */
 protected function createDeploy()
 {
     if (!$this->record->canDeploy($this->getMember())) {
         return $this->message('You are not authorized to do that on this environment', 403);
     }
     $reqBody = $this->getRequestBody();
     if ($reqBody === null) {
         return $this->message('the request body did not contain a valid JSON object.', 400);
     }
     if (empty($reqBody['release'])) {
         return $this->message('deploy requires a {"release": "sha1"} in the body of the request.', 400);
     }
     $strategy = new DeploymentStrategy($this->record, array('sha' => $reqBody['release']));
     $deploy = $strategy->createDeployment();
     $deploy->start();
     $location = Director::absoluteBaseURL() . $this->Link() . '/deploy/' . $deploy->ID;
     $output = array('message' => 'Deploy queued as job ' . $deploy->ResqueToken, 'href' => $location);
     $response = $this->getAPIResponse($output);
     $response->setStatusCode(201);
     $response->addHeader('Location', $location);
     return $response;
 }