Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions src/main/java/com/xebialabs/deployit/ci/DeployitPerformer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<String, String> deploymentProperties = new HashMap<String, String>();
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;
Expand Down Expand Up @@ -181,4 +190,4 @@ public DeployitPerformerParameters(JenkinsPackageOptions packageOptions, List<Pa
this.verbose = verbose;
}
}
}
}
51 changes: 51 additions & 0 deletions src/main/java/com/xebialabs/deployit/ci/DeploymentProperty.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.xebialabs.deployit.ci;

import com.xebialabs.deployit.ci.server.DeployitDescriptorRegistry;
import com.xebialabs.deployit.ci.server.DeployitServer;
import com.xebialabs.deployit.ci.util.ListBoxModels;
import hudson.Extension;
import hudson.RelativePath;
import hudson.model.AbstractProject;
import hudson.model.Descriptor;
import hudson.util.ListBoxModel;
import org.kohsuke.stapler.AncestorInPath;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;

import java.util.Collection;

import static com.xebialabs.deployit.ci.PackageProperty.PackagePropertyDescriptor.ONLY_SIMPLE_EDITABLE_PROPERTIES;

public class DeploymentProperty extends NameValuePair {

@DataBoundConstructor
public DeploymentProperty(String propertyName, String propertyValue) {
super(propertyName, propertyValue);
}

@Extension
public static final class DescriptorImpl extends Descriptor<NameValuePair> {

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<String> properties = descriptorRegistry.getPropertiesForDeployableType(PROPERTY_TYPE, ONLY_SIMPLE_EDITABLE_PROPERTIES);
return ListBoxModels.of(properties);
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -57,18 +57,20 @@ public class JenkinsDeploymentOptions implements Describable<JenkinsDeploymentOp
public boolean skipMode;
public boolean testMode;
public boolean rollbackOnError;
public List<DeploymentProperty> 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<DeploymentProperty> deploymentProperties) {
this.generateDeployedOnUpgrade = generateDeployedOnUpgrade;
this.skipMode = skipMode;
this.testMode = testMode;
this.rollbackOnError = rollbackOnError;
this.environment = environment;
this.versionKind = versionKind;
this.deploymentProperties = deploymentProperties;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -87,7 +88,7 @@ private void verifyPackageExistInRemoteRepository(String deploymentPackage) {

}

public void deploy(String deploymentPackage, String environment) {
public void deploy(String deploymentPackage, String environment, Map<String, String> deploymentProperties) {
listener.debug(deploymentOptions.toString());

verifyPackageExistInRemoteRepository(deploymentPackage);
Expand All @@ -108,6 +109,11 @@ public void deploy(String deploymentPackage, String environment) {
deployment = deploymentService.prepareAutoDeployeds(deployment);
}

for (Map.Entry<String, String> 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);
Expand Down Expand Up @@ -264,4 +270,4 @@ private void startTaskAndWait(String taskId) {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<String, String> deploymentProperties, JenkinsDeploymentOptions deploymentOptions, JenkinsDeploymentListener listener);

DeployitCommunicator newCommunicator();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -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<String, String> 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);
}


Expand Down Expand Up @@ -141,4 +142,4 @@ public String getRegistryVersion() {
return getDescriptorRegistry().getVersion();
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,17 @@
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 {

public final String serverCredentials;
public final String packageId;
public final String environmentId;
public final String overrideCredentialId;
public final Map<String, String> deploymentProperties = null;

@DataBoundConstructor
public XLDeployDeployStep(String serverCredentials, String overrideCredentialId, String packageId,
Expand Down Expand Up @@ -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<String, String> deploymentProperties = step.deploymentProperties;
if (deploymentProperties == null) {
deploymentProperties = new HashMap<String, String>();
}
deployitServer.deploy(resolvedPackageId,resolvedEnvironmentId, deploymentProperties,deploymentOptions,deploymentListener);
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,25 @@
<f:entry title="${%Rollback on Error}" field="rollbackOnError" help="/plugin/deployit-plugin/help-rollbackonerror.html">
<f:checkbox/>
</f:entry>

<f:entry title="${%Deployment Properties}" description="Deployment Properties" field="deploymentProperties" help="/plugin/deployit-plugin/help-deployment-properties.html">
<f:repeatable var="property" field="deploymentProperties">
<table width="100%">
<f:entry title="${%Name}" field="propertyName">
<f:select />
</f:entry>

<f:entry title="${%Value}" field="propertyValue">
<f:textbox />
</f:entry>

<f:entry title="">
<div align="right">
<f:repeatableDeleteButton />
</div>
</f:entry>
</table>
</f:repeatable>
</f:entry>

</j:jelly>
3 changes: 3 additions & 0 deletions src/main/webapp/help-deployment-properties.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div xmlns="http://www.w3.org/1999/html">
Specify properties to set on the deployed package. You can use <a href="/env-vars.html">Jenkins Env variables</a>.
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
package com.xebialabs.deployit.ci.server;

import java.nio.charset.Charset;
import java.util.HashMap;

import org.junit.Test;

Expand All @@ -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);

Expand All @@ -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<String, String>());
fail("Expected exception after 5 failed attempts.");
} catch (MyTestValidationException e ) {
//success
Expand Down