Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Multiple Environment Functionality #57

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

<groupId>br.com.ingenieux.jenkins.plugins</groupId>
<artifactId>awseb-deployment-plugin</artifactId>
<version>0.3.16-SNAPSHOT</version>
<version>0.3.17-SNAPSHOT</version>
<packaging>hpi</packaging>

<name>AWS Elastic Beanstalk Deployment Plugin</name>
Expand Down Expand Up @@ -119,7 +119,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.68</version>
<version>1.11.68</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,17 @@
import com.cloudbees.plugins.credentials.domains.DomainRequirement;

import hudson.ProxyConfiguration;
import hudson.security.ACL;
import jenkins.model.Jenkins;
import org.apache.commons.lang.reflect.ConstructorUtils;
import org.apache.commons.lang.reflect.FieldUtils;

import javax.security.auth.login.CredentialNotFoundException;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.util.Collections;
import java.util.List;

import javax.security.auth.login.CredentialNotFoundException;

import hudson.security.ACL;
import jenkins.model.Jenkins;

import static org.apache.commons.lang.StringUtils.defaultString;
import static org.apache.commons.lang.StringUtils.isNotBlank;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.*;

import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.AncestorInPath;
Expand Down Expand Up @@ -65,7 +63,7 @@
import lombok.Getter;

/**
* AWS Elastic Beanstalk Deployment
* AWS Elastic Beanstalk Deployment Multiple Environments
*/
@SuppressWarnings({"unchecked", "deprecation"})
public class AWSEBDeploymentBuilder extends Builder implements BuildStep {
Expand Down Expand Up @@ -159,7 +157,7 @@ public class AWSEBDeploymentBuilder extends Builder implements BuildStep {
public AWSEBDeploymentBuilder(String credentialId, String awsRegion, String applicationName,
String environmentName, String bucketName, String keyPrefix,
String versionLabelFormat, String rootObject, String includes,
String excludes, boolean zeroDowntime, Integer sleepTime,
String excludes, boolean zeroDowntime, Integer sleepTime,
boolean checkHealth, Integer maxAttempts) {
this.credentialId = credentialId;
this.awsRegion = awsRegion;
Expand Down Expand Up @@ -234,7 +232,7 @@ public boolean isApplicable(Class<? extends AbstractProject> aClass) {
}

public String getDisplayName() {
return "AWS Elastic Beanstalk";
return "AWS Elastic Beanstalk Multiple Environments";
}

public AbstractIdCredentialsListBoxModel<?, ?> doFillCredentialIdItems(
Expand Down Expand Up @@ -282,10 +280,18 @@ public FormValidation doCheckEnvironmentName(@QueryParameter String value) {
return FormValidation.warning("Validation skipped due to parameter usage ('$')");
}

if (!value.matches("^\\p{Alpha}[\\p{Alnum}\\-]{0,39}$") || value.endsWith("-")) {
return FormValidation.error(
"Doesn't look like an environment name. Must be from 4 to 40 characters in length. The name can contain only letters, numbers, and hyphens. It cannot start or end with a hyphen");
if (value.contains(",")) {
if (!value.matches("^[\\p{Alpha}[\\p{Alnum}\\-]{0,39}]+(,\\p{Space}*[\\p{Alpha}[\\p{Alnum}\\-]{0,39}]+)*$") || value.endsWith("-")) {
return FormValidation.error(
"Doesn't look like properly comma separated environment names. Each must be from 4 to 40 characters in length. The name can contain only letters, numbers, and hyphens. It cannot start or end with a hyphen");
}
} else {
if (!value.matches("^\\p{Alpha}[\\p{Alnum}\\-]{0,39}$") || value.endsWith("-")) {
return FormValidation.error(
"Doesn't look like an environment name. Must be from 4 to 40 characters in length. The name can contain only letters, numbers, and hyphens. It cannot start or end with a hyphen");
}
}

return FormValidation.ok();
}

Expand Down Expand Up @@ -360,6 +366,9 @@ public FormValidation doValidateCoordinates(@QueryParameter("credentialId") Stri
}
}

List<String> environmentNames = Lists.<String>newArrayList(environmentName.split(","));


AWSClientFactory clientFactory = AWSClientFactory.getClientFactory(credentialId, awsRegion);

AWSElasticBeanstalk
Expand All @@ -371,8 +380,19 @@ public FormValidation doValidateCoordinates(@QueryParameter("credentialId") Stri
awsElasticBeanstalk.describeEnvironments(
new DescribeEnvironmentsRequest().withApplicationName(applicationName)
.withIncludeDeleted(false)
.withEnvironmentNames(environmentName));

.withEnvironmentNames(environmentNames));

// Check for one environment
if (describeEnvironmentsResult.getEnvironments().size() > 1) {
// List<String> environmentIds = new ArrayList<>();
// Integer size = describeEnvironmentsResult.getEnvironments().size();
// for (Integer i = 0; i < size; i++) {
// environmentIds.add(describeEnvironmentsResult.getEnvironments().get(i).getEnvironmentId());
// }
// Do something with the Ids?

return FormValidation.ok("Multiple environments found.");
}
if (1 == describeEnvironmentsResult.getEnvironments().size()) {
String
environmentId =
Expand All @@ -388,13 +408,13 @@ public FormValidation doValidateUpload(@QueryParameter("applicationName") String
@QueryParameter("keyPrefix") String keyPrefix,
@QueryParameter("versionLabelFormat") String versionLabelFormat) {
String objectKey = Utils.formatPath("%s/%s-%s.zip",
defaultIfBlank(keyPrefix, "<ERROR: MISSING KEY PREFIX>"),
defaultIfBlank(applicationName, "<ERROR: MISSING APPLICATION NAME>"),
defaultIfBlank(versionLabelFormat, "<ERROR: MISSING VERSION LABEL FORMAT>"));
defaultIfBlank(keyPrefix, "<ERROR: MISSING KEY PREFIX>"),
defaultIfBlank(applicationName, "<ERROR: MISSING APPLICATION NAME>"),
defaultIfBlank(versionLabelFormat, "<ERROR: MISSING VERSION LABEL FORMAT>"));

String targetPath = String.format("s3://%s/%s",
defaultIfBlank(bucketName, "[default account bucket for region]"),
objectKey);
defaultIfBlank(bucketName, "[default account bucket for region]"),
objectKey);

final String resultingMessage = format("Your object will be uploaded to S3 as: <code>%s</code> (<i>note replacements will apply</i>)", targetPath);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
package br.com.ingenieux.jenkins.plugins.awsebdeployment;

import com.cloudbees.jenkins.plugins.awscredentials.AmazonWebServicesCredentials;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException;

import java.io.IOException;
import java.io.Serializable;

import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException;

@NoArgsConstructor
@AllArgsConstructor
@Data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
import br.com.ingenieux.jenkins.plugins.awsebdeployment.cmd.DeployerChain;
import br.com.ingenieux.jenkins.plugins.awsebdeployment.cmd.DeployerContext;
import jenkins.security.MasterToSlaveCallable;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;

public class SlaveDeployerCallable extends MasterToSlaveCallable<Boolean, Exception>
implements Serializable {
Expand Down
Loading