diff --git a/src/main/java/com/xebialabs/deployit/ci/DeployitPerformer.java b/src/main/java/com/xebialabs/deployit/ci/DeployitPerformer.java index 0a5778a..d4439ca 100644 --- a/src/main/java/com/xebialabs/deployit/ci/DeployitPerformer.java +++ b/src/main/java/com/xebialabs/deployit/ci/DeployitPerformer.java @@ -8,7 +8,9 @@ import java.io.File; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.google.common.base.Joiner; import com.google.common.base.Strings; @@ -127,8 +129,15 @@ public boolean doPerform() throws InterruptedException, IOException { final String versionId = Joiner.on("/").join(resolvedApplication, packageVersion); deploymentListener.info(Messages.DeployitNotifier_deploy(versionId, resolvedEnvironment)); + + Map deploymentProperties = new HashMap(); + if (deploymentParameters.deploymentOptions.deploymentProperties != null) { + for (DeploymentProperty deploymentProperty : deploymentParameters.deploymentOptions.deploymentProperties) { + deploymentProperties.put(deploymentProperty.propertyName, envVars.expand(deploymentProperty.propertyValue)); + } + } try { - deployitServer.deploy(versionId, resolvedEnvironment, deploymentParameters.deploymentOptions, deploymentListener); + deployitServer.deploy(versionId, resolvedEnvironment, deploymentProperties, deploymentParameters.deploymentOptions, deploymentListener); } catch (Exception e) { deploymentListener.error(Messages._DeployitNotifier_errorDeploy(e.getMessage())); return false; @@ -181,4 +190,4 @@ public DeployitPerformerParameters(JenkinsPackageOptions packageOptions, List { + + public static String PROPERTY_TYPE = "udm.DeployedApplication"; + + @Override + public String getDisplayName() { + return DeploymentProperty.class.getSimpleName(); + } + + public ListBoxModel doFillPropertyNameItems( + @QueryParameter(value = "credential") @RelativePath(value = "../..") String credentialExistingProps, + @QueryParameter(value = "credential") @RelativePath(value = "..") String credentialNewProps, + @AncestorInPath AbstractProject project) { + String creds = credentialExistingProps != null ? credentialExistingProps : credentialNewProps; + Credential overridingCredential = RepositoryUtils.retrieveOverridingCredentialFromProject(project); + // load type descriptor + DeployitServer deployitServer = RepositoryUtils.getDeployitServer(creds, overridingCredential); + DeployitDescriptorRegistry descriptorRegistry = deployitServer.getDescriptorRegistry(); + Collection properties = descriptorRegistry.getPropertiesForDeployableType(PROPERTY_TYPE, ONLY_SIMPLE_EDITABLE_PROPERTIES); + return ListBoxModels.of(properties); + } + + } + +} diff --git a/src/main/java/com/xebialabs/deployit/ci/JenkinsDeploymentOptions.java b/src/main/java/com/xebialabs/deployit/ci/JenkinsDeploymentOptions.java index 8837d7d..61a9ae8 100644 --- a/src/main/java/com/xebialabs/deployit/ci/JenkinsDeploymentOptions.java +++ b/src/main/java/com/xebialabs/deployit/ci/JenkinsDeploymentOptions.java @@ -57,18 +57,20 @@ public class JenkinsDeploymentOptions implements Describable deploymentProperties; public final VersionKind versionKind; public String version; @DataBoundConstructor - public JenkinsDeploymentOptions(String environment, VersionKind versionKind, boolean generateDeployedOnUpgrade, boolean skipMode, boolean testMode, boolean rollbackOnError) { + public JenkinsDeploymentOptions(String environment, VersionKind versionKind, boolean generateDeployedOnUpgrade, boolean skipMode, boolean testMode, boolean rollbackOnError, List deploymentProperties) { this.generateDeployedOnUpgrade = generateDeployedOnUpgrade; this.skipMode = skipMode; this.testMode = testMode; this.rollbackOnError = rollbackOnError; this.environment = environment; this.versionKind = versionKind; + this.deploymentProperties = deploymentProperties; } @Override diff --git a/src/main/java/com/xebialabs/deployit/ci/server/DeployCommand.java b/src/main/java/com/xebialabs/deployit/ci/server/DeployCommand.java index 9d0aa7c..751e640 100644 --- a/src/main/java/com/xebialabs/deployit/ci/server/DeployCommand.java +++ b/src/main/java/com/xebialabs/deployit/ci/server/DeployCommand.java @@ -26,6 +26,7 @@ import java.text.SimpleDateFormat; import java.util.GregorianCalendar; import java.util.List; +import java.util.Map; import org.apache.commons.lang.StringUtils; @@ -87,7 +88,7 @@ private void verifyPackageExistInRemoteRepository(String deploymentPackage) { } - public void deploy(String deploymentPackage, String environment) { + public void deploy(String deploymentPackage, String environment, Map deploymentProperties) { listener.debug(deploymentOptions.toString()); verifyPackageExistInRemoteRepository(deploymentPackage); @@ -108,6 +109,11 @@ public void deploy(String deploymentPackage, String environment) { deployment = deploymentService.prepareAutoDeployeds(deployment); } + for (Map.Entry deploymentProperty : deploymentProperties.entrySet()) { + listener.debug(String.format("Setting deployment property %s = %s", deploymentProperty.getKey(), deploymentProperty.getValue())); + deployment.getDeployedApplication().setProperty(deploymentProperty.getKey(), deploymentProperty.getValue()); + } + listener.debug(" dump Deployeds"); for (ConfigurationItem itemDto : deployment.getDeployeds()) { listener.debug(" - " + itemDto); @@ -264,4 +270,4 @@ private void startTaskAndWait(String taskId) { } } } -} \ No newline at end of file +} diff --git a/src/main/java/com/xebialabs/deployit/ci/server/DeployitServer.java b/src/main/java/com/xebialabs/deployit/ci/server/DeployitServer.java index e44fdb2..50efe82 100644 --- a/src/main/java/com/xebialabs/deployit/ci/server/DeployitServer.java +++ b/src/main/java/com/xebialabs/deployit/ci/server/DeployitServer.java @@ -1,6 +1,7 @@ package com.xebialabs.deployit.ci.server; import java.util.List; +import java.util.Map; import com.xebialabs.deployit.booter.remote.BooterConfig; import com.xebialabs.deployit.booter.remote.DeployitCommunicator; @@ -22,7 +23,7 @@ public interface DeployitServer { ConfigurationItem importPackage(String darFile); - void deploy(String deploymentPackage, String environment, JenkinsDeploymentOptions deploymentOptions, JenkinsDeploymentListener listener); + void deploy(String deploymentPackage, String environment, Map deploymentProperties, JenkinsDeploymentOptions deploymentOptions, JenkinsDeploymentListener listener); DeployitCommunicator newCommunicator(); diff --git a/src/main/java/com/xebialabs/deployit/ci/server/DeployitServerImpl.java b/src/main/java/com/xebialabs/deployit/ci/server/DeployitServerImpl.java index b979434..3b385fa 100644 --- a/src/main/java/com/xebialabs/deployit/ci/server/DeployitServerImpl.java +++ b/src/main/java/com/xebialabs/deployit/ci/server/DeployitServerImpl.java @@ -2,6 +2,7 @@ import java.util.Collections; import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -82,11 +83,11 @@ public ConfigurationItem importPackage(final String darFile) { } @Override - public void deploy(String deploymentPackage, String environment, JenkinsDeploymentOptions deploymentOptions, JenkinsDeploymentListener listener) { + public void deploy(String deploymentPackage, String environment, Map deploymentProperties, JenkinsDeploymentOptions deploymentOptions, JenkinsDeploymentListener listener) { DeploymentService deploymentService = getCommunicator().getProxies().getDeploymentService(); TaskService taskService = getCommunicator().getProxies().getTaskService(); RepositoryService repositoryService = getCommunicator().getProxies().getRepositoryService(); - new DeployCommand(deploymentService, taskService, repositoryService, deploymentOptions, listener).deploy(deploymentPackage, environment); + new DeployCommand(deploymentService, taskService, repositoryService, deploymentOptions, listener).deploy(deploymentPackage, environment, deploymentProperties); } @@ -141,4 +142,4 @@ public String getRegistryVersion() { return getDescriptorRegistry().getVersion(); } -} \ No newline at end of file +} 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 442f047..0333181 100644 --- a/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployDeployStep.java +++ b/src/main/java/com/xebialabs/deployit/ci/workflow/XLDeployDeployStep.java @@ -17,6 +17,9 @@ import org.jenkinsci.plugins.workflow.steps.StepContextParameter; import org.kohsuke.stapler.DataBoundConstructor; +import java.util.HashMap; +import java.util.Map; + public class XLDeployDeployStep extends AbstractStepImpl { @@ -24,6 +27,7 @@ public class XLDeployDeployStep extends AbstractStepImpl { public final String packageId; public final String environmentId; public final String overrideCredentialId; + public final Map deploymentProperties = null; @DataBoundConstructor public XLDeployDeployStep(String serverCredentials, String overrideCredentialId, String packageId, @@ -81,10 +85,14 @@ protected Void run() throws Exception { String resolvedEnvironmentId = envVars.expand(step.environmentId); String resolvedPackageId = envVars.expand(step.packageId); JenkinsDeploymentListener deploymentListener = new JenkinsDeploymentListener(listener, false); - JenkinsDeploymentOptions deploymentOptions = new JenkinsDeploymentOptions(resolvedEnvironmentId, VersionKind.Other, true, false , false, true); + JenkinsDeploymentOptions deploymentOptions = new JenkinsDeploymentOptions(resolvedEnvironmentId, VersionKind.Other, true, false , false, true, null); DeployitServer deployitServer = RepositoryUtils.getDeployitServerFromCredentialsId( step.serverCredentials, step.overrideCredentialId); - deployitServer.deploy(resolvedPackageId,resolvedEnvironmentId,deploymentOptions,deploymentListener); + Map deploymentProperties = step.deploymentProperties; + if (deploymentProperties == null) { + deploymentProperties = new HashMap(); + } + deployitServer.deploy(resolvedPackageId,resolvedEnvironmentId, deploymentProperties,deploymentOptions,deploymentListener); return null; } diff --git a/src/main/resources/com/xebialabs/deployit/ci/JenkinsDeploymentOptions/config.jelly b/src/main/resources/com/xebialabs/deployit/ci/JenkinsDeploymentOptions/config.jelly index 6eadd89..94c965f 100644 --- a/src/main/resources/com/xebialabs/deployit/ci/JenkinsDeploymentOptions/config.jelly +++ b/src/main/resources/com/xebialabs/deployit/ci/JenkinsDeploymentOptions/config.jelly @@ -21,5 +21,25 @@ + + + + + + + + + + + + + +
+ +
+
+
+
+
diff --git a/src/main/webapp/help-deployment-properties.html b/src/main/webapp/help-deployment-properties.html new file mode 100644 index 0000000..1d1cc6f --- /dev/null +++ b/src/main/webapp/help-deployment-properties.html @@ -0,0 +1,3 @@ +
+ Specify properties to set on the deployed package. You can use Jenkins Env variables. +
diff --git a/src/test/java/com/xebialabs/deployit/ci/server/DeployCommandTest.java b/src/test/java/com/xebialabs/deployit/ci/server/DeployCommandTest.java index 7dff88d..7850c4d 100644 --- a/src/test/java/com/xebialabs/deployit/ci/server/DeployCommandTest.java +++ b/src/test/java/com/xebialabs/deployit/ci/server/DeployCommandTest.java @@ -24,6 +24,7 @@ package com.xebialabs.deployit.ci.server; import java.nio.charset.Charset; +import java.util.HashMap; import org.junit.Test; @@ -48,7 +49,7 @@ public void shouldRetryTaskStatusCheckFiveTimesAfterExceptionOccurs() { DeploymentService deploymentService = mock(DeploymentService.class); TaskService taskService = mock(TaskService.class); RepositoryService repositoryService = mock(RepositoryService.class); - JenkinsDeploymentOptions jenkinsOptions = new JenkinsDeploymentOptions("test", VersionKind.Packaged, false, false, false, false); + JenkinsDeploymentOptions jenkinsOptions = new JenkinsDeploymentOptions("test", VersionKind.Packaged, false, false, false, false, null); JenkinsDeploymentListener jenkinsDeploymentListener = new JenkinsDeploymentListener(new StreamBuildListener(System.out, Charset.defaultCharset()), true); DeployCommand deployCommand = new DeployCommand(deploymentService, taskService, repositoryService, jenkinsOptions, jenkinsDeploymentListener); @@ -70,7 +71,7 @@ public void shouldRetryTaskStatusCheckFiveTimesAfterExceptionOccurs() { .thenThrow(new MyTestValidationException("Expect this to be rethrown")); try { - deployCommand.deploy("pkg", "test"); + deployCommand.deploy("pkg", "test", new HashMap()); fail("Expected exception after 5 failed attempts."); } catch (MyTestValidationException e ) { //success