diff --git a/.gitignore b/.gitignore index d9faa59..3e126cd 100644 --- a/.gitignore +++ b/.gitignore @@ -66,4 +66,4 @@ work/ target # Maven Release Plugin -release.properties \ No newline at end of file +release.properties diff --git a/pom.xml b/pom.xml index e5c8db1..855827b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,11 +3,11 @@ org.jenkins-ci.plugins plugin - 1.580.1 + 3.19 aws-lambda - 0.6.0-SNAPSHOT + 0.6.1-SNAPSHOT hpi AWS Lambda Plugin @@ -45,8 +45,10 @@ - 1.11.64 - 2.0.0 + 1.11.160 + 8 + 2.60.3 + 2.0.0 @@ -55,7 +57,17 @@ aws-java-sdk-core ${aws.version} - + + org.jenkins-ci.plugins + credentials + 2.1.18 + + + org.jenkins-ci.plugins + plain-credentials + 1.3 + + com.amazonaws aws-java-sdk-lambda ${aws.version} @@ -68,7 +80,7 @@ org.jenkins-ci.plugins structs - 1.6 + 1.7 org.hamcrest @@ -82,6 +94,12 @@ 1.10.19 test + + + org.jenkins-ci.plugins + mailer + 1.18 + diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/publish/LambdaPublishBuildStepVariables.java b/src/main/java/com/xti/jenkins/plugin/awslambda/publish/LambdaPublishBuildStepVariables.java index 4ad5979..f8905bc 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/publish/LambdaPublishBuildStepVariables.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/publish/LambdaPublishBuildStepVariables.java @@ -55,7 +55,6 @@ public boolean getUseInstanceCredentials() { return useInstanceCredentials; } - @DataBoundSetter public void setAwsAccessKeyId(String awsAccessKeyId) { this.awsAccessKeyId = awsAccessKeyId; } @@ -64,7 +63,6 @@ public String getAwsAccessKeyId() { return this.awsAccessKeyId; } - @DataBoundSetter public void setAwsSecretKey(String awsSecretKey) { this.awsSecretKey = Secret.fromString(awsSecretKey).getEncryptedValue(); } diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStep.java b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStep.java index 7d5e5a8..ebf8ea9 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStep.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStep.java @@ -26,6 +26,8 @@ * #L% */ +import com.cloudbees.plugins.credentials.CredentialsProvider; +import com.cloudbees.plugins.credentials.common.IdCredentials; import com.xti.jenkins.plugin.awslambda.callable.DeployCallable; import com.xti.jenkins.plugin.awslambda.util.LambdaClientConfig; import hudson.Extension; @@ -41,6 +43,7 @@ import jenkins.tasks.SimpleBuildStep; import net.sf.json.JSONObject; import org.jenkinsci.Symbol; +import org.jenkinsci.plugins.plaincredentials.StringCredentials; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; @@ -66,6 +69,13 @@ public void setLambdaUploadBuildStepVariables(LambdaUploadBuildStepVariables Lam @Override public void perform(@Nonnull Run run, @Nonnull FilePath workspace, @Nonnull Launcher launcher, @Nonnull TaskListener listener) throws InterruptedException, IOException { + IdCredentials cred = CredentialsProvider.findCredentialById( + lambdaUploadBuildStepVariables.getCredentialsId(), + IdCredentials.class, + run); + StringCredentials c = (StringCredentials)cred; + lambdaUploadBuildStepVariables.setAwsAccessKeyId(c.getId()); + lambdaUploadBuildStepVariables.setAwsSecretKey(c.getSecret().getPlainText()); perform(lambdaUploadBuildStepVariables, run, workspace, launcher, listener); } diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables.java b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables.java index 7f93711..6a84f96 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables.java @@ -26,6 +26,10 @@ * #L% */ +import com.cloudbees.plugins.credentials.CredentialsMatchers; +import com.cloudbees.plugins.credentials.CredentialsProvider; +import com.cloudbees.plugins.credentials.common.StandardListBoxModel; +import com.cloudbees.plugins.credentials.domains.DomainRequirement; import com.xti.jenkins.plugin.awslambda.AWSLambdaDescriptor; import com.xti.jenkins.plugin.awslambda.util.ExpansionUtils; import com.xti.jenkins.plugin.awslambda.util.JenkinsProxy; @@ -33,15 +37,24 @@ import com.xti.jenkins.plugin.awslambda.util.Tokenizer; import hudson.EnvVars; import hudson.Extension; +import hudson.Util; import hudson.model.AbstractDescribableImpl; +import hudson.model.Item; +import hudson.model.Queue; +import hudson.model.queue.Tasks; +import hudson.security.ACL; import hudson.util.FormValidation; import hudson.util.ListBoxModel; import hudson.util.Secret; +import jenkins.model.Jenkins; import org.apache.commons.lang.StringUtils; +import org.jenkinsci.plugins.plaincredentials.StringCredentials; +import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.QueryParameter; +import java.util.Collections; import java.util.HashMap; /** @@ -70,6 +83,7 @@ public class LambdaUploadBuildStepVariables extends AbstractDescribableImpl emptyList(), + CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class))) + .includeCurrentValue(credentialsId); + } + + public FormValidation doCheckCredentialsId(@AncestorInPath Item item, + @QueryParameter String value) { + if (item == null && !Jenkins.getInstance().hasPermission(Jenkins.ADMINISTER) || + item != null && !item.hasPermission(Item.EXTENDED_READ)) { + return FormValidation.ok(); + } + + value = Util.fixEmptyAndTrim(value); + if (value == null) { + return FormValidation.ok(); + } + + for (ListBoxModel.Option o : CredentialsProvider + .listCredentials(StringCredentials.class, item, item instanceof Queue.Task + ? Tasks.getAuthenticationOf((Queue.Task) item) + : ACL.SYSTEM, + Collections. emptyList(), + CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class)))) { + if (StringUtils.equals(value, o.value)) { + return FormValidation.ok(); + } + } + // no credentials available, can't check + return FormValidation.warning("Cannot find any credentials with id " + value); + } + /** * This human readable name is used in the configuration screen. */ diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher.java b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher.java index 91d194e..aaae303 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher.java @@ -26,11 +26,14 @@ * #L% */ +import com.cloudbees.plugins.credentials.CredentialsProvider; +import com.cloudbees.plugins.credentials.common.IdCredentials; import com.xti.jenkins.plugin.awslambda.callable.DeployCallable; import com.xti.jenkins.plugin.awslambda.upload.LambdaUploadAction; import com.xti.jenkins.plugin.awslambda.upload.DeployConfig; import com.xti.jenkins.plugin.awslambda.upload.LambdaUploadVariables; import com.xti.jenkins.plugin.awslambda.util.LambdaClientConfig; +import hudson.EnvVars; import hudson.Extension; import hudson.FilePath; import hudson.Launcher; @@ -40,6 +43,7 @@ import hudson.tasks.Notifier; import hudson.tasks.Publisher; import net.sf.json.JSONObject; +import org.jenkinsci.plugins.plaincredentials.StringCredentials; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; @@ -63,9 +67,22 @@ public List getLambdaVariablesList() { public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) { boolean returnValue = true; + EnvVars environment; + try{environment = build.getEnvironment(listener);} + catch(Exception e){ + e.printStackTrace(); + } if (lambdaVariablesList != null){ for (LambdaUploadVariables lambdaVariables : lambdaVariablesList) { + IdCredentials cred = CredentialsProvider.findCredentialById( + lambdaVariables.getCredentialsId(), + IdCredentials.class, + build); + StringCredentials c = (StringCredentials)cred; + lambdaVariables.setAwsAccessKeyId(c.getId()); + lambdaVariables.setAwsSecretKey(c.getSecret().getPlainText()); + returnValue = returnValue && perform(lambdaVariables, build, launcher, listener); } } diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadVariables.java b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadVariables.java index 8b3a3c3..bd8b513 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadVariables.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadVariables.java @@ -26,6 +26,10 @@ * #L% */ +import com.cloudbees.plugins.credentials.CredentialsMatchers; +import com.cloudbees.plugins.credentials.CredentialsProvider; +import com.cloudbees.plugins.credentials.common.StandardListBoxModel; +import com.cloudbees.plugins.credentials.domains.DomainRequirement; import com.xti.jenkins.plugin.awslambda.AWSLambdaDescriptor; import com.xti.jenkins.plugin.awslambda.util.ExpansionUtils; import com.xti.jenkins.plugin.awslambda.util.JenkinsProxy; @@ -33,17 +37,24 @@ import com.xti.jenkins.plugin.awslambda.util.Tokenizer; import hudson.EnvVars; import hudson.Extension; -import hudson.model.AbstractDescribableImpl; -import hudson.model.Items; +import hudson.Util; +import hudson.model.*; +import hudson.model.queue.Tasks; +import hudson.security.ACL; import hudson.util.FormValidation; import hudson.util.ListBoxModel; import hudson.util.Secret; +import jenkins.model.Jenkins; import org.apache.commons.lang.StringUtils; +import org.jenkinsci.plugins.plaincredentials.StringCredentials; +import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.QueryParameter; +import java.util.Collections; import java.util.HashMap; +import java.util.UUID; /** * Describable containing Lambda post build action config, checking feasability of migrating it to upload package. @@ -72,6 +83,7 @@ public class LambdaUploadVariables extends AbstractDescribableImpl emptyList(), + CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class))) + .includeCurrentValue(credentialsId); + } + + public FormValidation doCheckCredentialsId(@AncestorInPath Item item, + @QueryParameter String value) { + if (item == null && !Jenkins.getInstance().hasPermission(Jenkins.ADMINISTER) || + item != null && !item.hasPermission(Item.EXTENDED_READ)) { + return FormValidation.ok(); + } + + value = Util.fixEmptyAndTrim(value); + if (value == null) { + return FormValidation.ok(); + } + + for (ListBoxModel.Option o : CredentialsProvider + .listCredentials(StringCredentials.class, item, item instanceof Queue.Task + ? Tasks.getAuthenticationOf((Queue.Task) item) + : ACL.SYSTEM, + Collections. emptyList(), + CredentialsMatchers.anyOf(CredentialsMatchers.instanceOf(StringCredentials.class)))) { + if (StringUtils.equals(value, o.value)) { + return FormValidation.ok(); + } + } + // no credentials available, can't check + return FormValidation.warning("Cannot find any credentials with id " + value); + } /** * This human readable name is used in the configuration screen. */ diff --git a/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables/config.jelly b/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables/config.jelly index 56f4e1c..0075800 100644 --- a/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables/config.jelly +++ b/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadBuildStepVariables/config.jelly @@ -1,18 +1,13 @@ - +
- - - - - - - - - + + + diff --git a/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher/config.jelly b/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher/config.jelly index 64f0ccf..eeb929f 100644 --- a/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher/config.jelly +++ b/src/main/resources/com/xti/jenkins/plugin/awslambda/upload/LambdaUploadPublisher/config.jelly @@ -1,4 +1,4 @@ - + @@ -6,11 +6,8 @@
- - - - - + +