From c17090058e74e78fad675778ae5c1c1237b9b8a4 Mon Sep 17 00:00:00 2001 From: Andrew Block Date: Sun, 12 Feb 2017 21:49:14 -0600 Subject: [PATCH] Pipeline support for overriding credentials --- .../deployit/ci/RepositoryUtils.java | 12 +++++++++++ .../ci/workflow/XLDeployDeployStep.java | 20 ++++++++++++++++++- .../ci/workflow/XLDeployPublishStep.java | 20 ++++++++++++++++++- .../deployit/ci/XLDeployJenkinsFileITest.java | 14 ++++++++++--- .../resources/JenkinsFile-deployOverriding | 10 ++++++++++ ...xebialabs.deployit.ci.DeployitNotifier.xml | 0 .../config.xml | 0 7 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/JenkinsFile-deployOverriding rename src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/{shouldStartReleaseWithJenkinsFile => }/com.xebialabs.deployit.ci.DeployitNotifier.xml (100%) rename src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/{shouldStartReleaseWithJenkinsFile => }/config.xml (100%) diff --git a/src/main/java/com/xebialabs/deployit/ci/RepositoryUtils.java b/src/main/java/com/xebialabs/deployit/ci/RepositoryUtils.java index 5cc2540..3693cd0 100644 --- a/src/main/java/com/xebialabs/deployit/ci/RepositoryUtils.java +++ b/src/main/java/com/xebialabs/deployit/ci/RepositoryUtils.java @@ -1,5 +1,7 @@ package com.xebialabs.deployit.ci; +import com.cloudbees.plugins.credentials.CredentialsScope; +import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl; import com.google.common.collect.Ordering; import com.xebialabs.deployit.ci.Credential.SecondaryServerInfo; import com.xebialabs.deployit.ci.server.DeployitDescriptorRegistry; @@ -12,6 +14,16 @@ public class RepositoryUtils { + public static DeployitServer getDeployitServer(String credentialName, String overridingCredentialUsername, String overridingCredentialPassword, boolean overridingCredentialUseGlobalCredential) { + Credential overridingCredential = null; + + if (overridingCredentialUsername != null && overridingCredentialPassword != null) { + UsernamePasswordCredentialsImpl cred = new UsernamePasswordCredentialsImpl(CredentialsScope.GLOBAL,java.util.UUID.randomUUID().toString(), "Overriding Credential", overridingCredentialUsername, overridingCredentialPassword); + overridingCredential = new Credential(credentialName, cred.getUsername(), cred.getPassword(), cred.getId(), null, overridingCredentialUseGlobalCredential); + } + return getDeployitServer(credentialName, overridingCredential); + } + public static DeployitServer getDeployitServer(String credentialName, Credential overridingCredential) { Credential credential = findCredential(credentialName); DeployitNotifier.DeployitDescriptor descriptor = (DeployitNotifier.DeployitDescriptor) Hudson.getInstance().getDescriptor(DeployitNotifier.class); diff --git a/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployDeployStep.java b/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployDeployStep.java index 02cb471..abdc3ff 100644 --- a/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployDeployStep.java +++ b/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployDeployStep.java @@ -24,6 +24,9 @@ public class XLDeployDeployStep extends AbstractStepImpl { public final String serverCredentials; public final String packageId; public final String environmentId; + public String overridingCredentialUsername; + public String overridingCredentialPassword; + public boolean overridingCredentialUseGlobalCredential; @DataBoundConstructor public XLDeployDeployStep(String serverCredentials, String packageId, String environmentId) { @@ -32,6 +35,21 @@ public XLDeployDeployStep(String serverCredentials, String packageId, String env this.packageId = packageId; } + @DataBoundSetter + public void setOverridingCredentialUsername(String overridingCredentialUsername) { + this.overridingCredentialUsername = overridingCredentialUsername; + } + + @DataBoundSetter + public void setOverridingCredentialPassword(String overridingCredentialPassword) { + this.overridingCredentialPassword = overridingCredentialPassword; + } + + @DataBoundSetter + public void setOverridingCredentialUseGlobalCredential(boolean overridingCredentialUseGlobalCredential) { + this.overridingCredentialUseGlobalCredential = overridingCredentialUseGlobalCredential; + } + @Extension public static final class XLDeployDeployStepDescriptor extends AbstractStepDescriptorImpl { @@ -80,7 +98,7 @@ protected Void run() throws Exception { String resolvedPackageId = envVars.expand(step.packageId); JenkinsDeploymentListener deploymentListener = new JenkinsDeploymentListener(listener, false); JenkinsDeploymentOptions deploymentOptions = new JenkinsDeploymentOptions(resolvedEnvironmentId, VersionKind.Other, true, false , false, true); - DeployitServer deployitServer = RepositoryUtils.getDeployitServer(step.serverCredentials, null); + DeployitServer deployitServer = RepositoryUtils.getDeployitServer(step.serverCredentials, step.overridingCredentialUsername, step.overridingCredentialPassword, step.overridingCredentialUseGlobalCredential); deployitServer.deploy(resolvedPackageId,resolvedEnvironmentId,deploymentOptions,deploymentListener); return null; } diff --git a/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployPublishStep.java b/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployPublishStep.java index 70cdf46..e9075f8 100644 --- a/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployPublishStep.java +++ b/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployPublishStep.java @@ -23,12 +23,30 @@ public class XLDeployPublishStep extends AbstractStepImpl { public final String serverCredentials; public final String darPath; + public String overridingCredentialUsername; + public String overridingCredentialPassword; + public boolean overridingCredentialUseGlobalCredential; @DataBoundConstructor public XLDeployPublishStep(String darPath, String serverCredentials) { this.darPath = darPath; this.serverCredentials = serverCredentials; } + + @DataBoundSetter + public void setOverridingCredentialUsername(String overridingCredentialUsername) { + this.overridingCredentialUsername = overridingCredentialUsername; + } + + @DataBoundSetter + public void setOverridingCredentialPassword(String overridingCredentialPassword) { + this.overridingCredentialPassword = overridingCredentialPassword; + } + + @DataBoundSetter + public void setOverridingCredentialUseGlobalCredential(boolean overridingCredentialUseGlobalCredential) { + this.overridingCredentialUseGlobalCredential = overridingCredentialUseGlobalCredential; + } @Extension public static final class XLDeployPublishStepDescriptor extends AbstractStepDescriptorImpl { @@ -81,7 +99,7 @@ protected Void run() throws Exception { final String path = ArtifactView.findFilePathFromPattern(envVars.expand(step.darPath), ws, deploymentListener); RemoteAwareLocation location = getRemoteAwareLocation(path); try { - DeployitServer deployitServer = RepositoryUtils.getDeployitServer(step.serverCredentials, null); + DeployitServer deployitServer = RepositoryUtils.getDeployitServer(step.serverCredentials, step.overridingCredentialUsername, step.overridingCredentialPassword, step.overridingCredentialUseGlobalCredential); deployitServer.importPackage(location.getDarFileLocation(ws, deploymentListener, envVars)); } finally { location.cleanup(); diff --git a/src/test/java/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest.java b/src/test/java/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest.java index 07966c1..2494839 100644 --- a/src/test/java/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest.java +++ b/src/test/java/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest.java @@ -70,17 +70,25 @@ public void before() { @LocalData public void shouldStartReleaseWithJenkinsFile() throws Exception { WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "rest-o-rant-api"); - job.setDefinition(new CpsFlowDefinition(getJenkinsFileScript(), true)); + job.setDefinition(new CpsFlowDefinition(getJenkinsFileScript("Jenkinsfile"), true)); + jenkins.assertBuildStatus(Result.SUCCESS, job.scheduleBuild2(0).get()); + } + + @Test + @LocalData + public void shouldStartReleaseWithJenkinsFileOverridingDeployCredentials() throws Exception { + WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "rest-o-rant-api-override-deploy-creds"); + job.setDefinition(new CpsFlowDefinition(getJenkinsFileScript("Jenkinsfile-deployOverriding"), true)); jenkins.assertBuildStatus(Result.SUCCESS, job.scheduleBuild2(0).get()); } - private String getJenkinsFileScript() throws IOException { + private String getJenkinsFileScript(String fileName) throws IOException { String jenkinsFile = ""; try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { - Files.copy(Paths.get(getClass().getClassLoader().getResource("JenkinsFile").getFile()), outputStream); + Files.copy(Paths.get(getClass().getClassLoader().getResource(fileName).getFile()), outputStream); jenkinsFile = new String(outputStream.toByteArray()); } return jenkinsFile; diff --git a/src/test/resources/JenkinsFile-deployOverriding b/src/test/resources/JenkinsFile-deployOverriding new file mode 100644 index 0000000..ddab612 --- /dev/null +++ b/src/test/resources/JenkinsFile-deployOverriding @@ -0,0 +1,10 @@ + +node { + git url:'https://github.com/xebialabs/rest-o-rant-api.git' + sh './gradlew clean build' + env.WORKSPACE = pwd() + def projectVersion = 'v1' + xldCreatePackage artifactsPath: 'build', manifestPath: 'deployit-manifest.xml', darPath: '$JOB_NAME-$BUILD_NUMBER.dar' + xldPublishPackage serverCredentials: 'admin_credential', darPath: '$JOB_NAME-$BUILD_NUMBER.dar' + xldDeploy serverCredentials: 'admin_credential', overridingCredentialUsername: 'admin', overridingCredentialPassword: 'admin', packageId: 'Applications/$JOB_NAME/$BUILD_NUMBER.0', environmentId: 'Environments/localhost' +} \ No newline at end of file diff --git a/src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/shouldStartReleaseWithJenkinsFile/com.xebialabs.deployit.ci.DeployitNotifier.xml b/src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/com.xebialabs.deployit.ci.DeployitNotifier.xml similarity index 100% rename from src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/shouldStartReleaseWithJenkinsFile/com.xebialabs.deployit.ci.DeployitNotifier.xml rename to src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/com.xebialabs.deployit.ci.DeployitNotifier.xml diff --git a/src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/shouldStartReleaseWithJenkinsFile/config.xml b/src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/config.xml similarity index 100% rename from src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/shouldStartReleaseWithJenkinsFile/config.xml rename to src/test/resources/com/xebialabs/deployit/ci/XLDeployJenkinsFileITest/config.xml