diff --git a/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java b/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java index 922b940..650faef 100644 --- a/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java +++ b/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java @@ -30,6 +30,8 @@ import com.amazonaws.services.codedeploy.model.GetDeploymentRequest; import com.amazonaws.services.codedeploy.model.RegisterApplicationRevisionRequest; import com.amazonaws.services.codedeploy.model.S3Location; +import com.amazonaws.services.codedeploy.model.StopDeploymentRequest; +import com.amazonaws.services.codedeploy.model.StopDeploymentResult; import hudson.FilePath; import hudson.Launcher; @@ -210,6 +212,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListener lis } boolean success; + String deploymentId = null; try { @@ -222,10 +225,21 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListener lis RevisionLocation revisionLocation = zipAndUpload(aws, projectName, getSourceDirectory(build.getWorkspace()), envVars, deploymentGroupName); registerRevision(aws, revisionLocation); - String deploymentId = createDeployment(aws, revisionLocation, deploymentGroupName); + deploymentId = createDeployment(aws, revisionLocation, deploymentGroupName); success = waitForDeployment(aws, deploymentId); + } catch (InterruptedException e) { + + this.logger.println("User cancelling CodeDeploy job"); + try { + this.logger.println(stopDeployment(aws, deploymentId)); + } catch (Exception ex) { + this.logger.println(e.getMessage()); + e.printStackTrace(this.logger); + } + success = false; + } catch (Exception e) { this.logger.println("Failed CodeDeploy post-build step; exception follows."); @@ -368,6 +382,18 @@ private String createDeployment(AWSClients aws, RevisionLocation revisionLocatio return createDeploymentResult.getDeploymentId(); } + private String stopDeployment(AWSClients aws, String deploymentId) throws Exception { + + this.logger.println("Stopping deployment " + deploymentId); + + StopDeploymentResult stopDeploymentResult = aws.codedeploy.stopDeployment( + new StopDeploymentRequest() + .withDeploymentId(deploymentId) + ); + + return stopDeploymentResult.getStatus(); + } + private boolean waitForDeployment(AWSClients aws, String deploymentId) throws InterruptedException { if (!this.waitForCompletion) {