diff --git a/pom.xml b/pom.xml index 8fa2ce1..acac394 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ org.jenkins-ci.plugins aws-java-sdk - 1.11.119 + 1.11.248 diff --git a/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java b/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java index a2d6672..dd7cb02 100644 --- a/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java +++ b/src/main/java/com/amazonaws/codedeploy/AWSCodeDeployPublisher.java @@ -30,6 +30,7 @@ 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.GitHubLocation; import hudson.AbortException; import hudson.FilePath; @@ -85,6 +86,8 @@ public class AWSCodeDeployPublisher extends Publisher implements SimpleBuildStep private final String s3bucket; private final String s3prefix; + private final String githubRepository; + private final String githubCommitId; private final String applicationName; private final String deploymentGroupName; // TODO allow for deployment to multiple groups private final String deploymentConfig; @@ -117,6 +120,8 @@ public class AWSCodeDeployPublisher extends Publisher implements SimpleBuildStep public AWSCodeDeployPublisher( String s3bucket, String s3prefix, + String githubRepository, + String githubCommitId, String applicationName, String deploymentGroupName, String deploymentConfig, @@ -183,6 +188,9 @@ public AWSCodeDeployPublisher( } else { this.s3prefix = s3prefix; } + + this.githubRepository = githubRepository; + this.githubCommitId = githubCommitId; } @Override @@ -229,8 +237,15 @@ public void perform(@Nonnull Run build, @Nonnull FilePath workspace, @Nonnu if (workspace == null) { throw new IllegalArgumentException("No workspace present for the build."); } - final FilePath sourceDirectory = getSourceDirectory(workspace, envVars); - final RevisionLocation revisionLocation = zipAndUpload(aws, projectName, sourceDirectory, logger, envVars); + + RevisionLocation revisionLocation; + + if (!StringUtils.isEmpty(this.githubRepository) && !StringUtils.isEmpty(this.githubCommitId)) { + revisionLocation = createFromGitHub(); + } else { + final FilePath sourceDirectory = getSourceDirectory(workspace, envVars); + revisionLocation = zipAndUpload(aws, projectName, sourceDirectory, logger, envVars); + } registerRevision(aws, revisionLocation, logger, envVars); if ("onlyRevision".equals(deploymentMethod)){ @@ -398,6 +413,18 @@ private RevisionLocation zipAndUpload(AWSClients aws, String projectName, FilePa } } + private RevisionLocation createFromGitHub() { + GitHubLocation githubLocation = new GitHubLocation(); + githubLocation.setRepository(this.githubRepository); + githubLocation.setCommitId(this.githubCommitId); + + RevisionLocation revisionLocation = new RevisionLocation(); + revisionLocation.setRevisionType(RevisionLocationType.GitHub); + revisionLocation.setGitHubLocation(githubLocation); + + return revisionLocation; + } + private void registerRevision(AWSClients aws, RevisionLocation revisionLocation, PrintStream logger, Map envVars) { String applicationName = getApplicationNameFromEnv(envVars); @@ -661,6 +688,14 @@ public String getS3prefix() { return s3prefix; } + public String getGithubRepository() { + return githubRepository; + } + + public String getGithubCommitId() { + return githubCommitId; + } + public Long getPollingTimeoutSec() { return pollingTimeoutSec; } diff --git a/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/config.jelly b/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/config.jelly index 104cdb1..d3ba81d 100644 --- a/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/config.jelly +++ b/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/config.jelly @@ -18,6 +18,12 @@ + + + + + + diff --git a/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/help-githubCommitId.html b/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/help-githubCommitId.html new file mode 100644 index 0000000..3ea7aaa --- /dev/null +++ b/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/help-githubCommitId.html @@ -0,0 +1,3 @@ +
+ The GitHub commit id hash of the revision to be pushed to CodeDeploy. This is to be used in Pipeline mode. +
diff --git a/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/help-githubRepository.html b/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/help-githubRepository.html new file mode 100644 index 0000000..4fd2096 --- /dev/null +++ b/src/main/resources/com/amazonaws/codedeploy/AWSCodeDeployPublisher/help-githubRepository.html @@ -0,0 +1,3 @@ +
+ The GitHub repository used to pull the revision from. This is to be used in Pipeline mode. +
diff --git a/src/test/java/com/amazonaws/codedeploy/AWSCodeDeployPublisherTest.java b/src/test/java/com/amazonaws/codedeploy/AWSCodeDeployPublisherTest.java index 827ed97..7dfa65f 100644 --- a/src/test/java/com/amazonaws/codedeploy/AWSCodeDeployPublisherTest.java +++ b/src/test/java/com/amazonaws/codedeploy/AWSCodeDeployPublisherTest.java @@ -19,6 +19,8 @@ public void testRoundTripConfiguration() throws Exception { final AWSCodeDeployPublisher publisher = new AWSCodeDeployPublisher( "testBucket", "testPrefix", + "", + "", "testApplicationName", "testDeploymentGroupName", "testDeploymentConfig",