Skip to content

Commit

Permalink
JENKINS-34876 Git Parameters not working for Pipeline projects and Je…
Browse files Browse the repository at this point in the history
…nkinsfile from SCM
  • Loading branch information
klimas7 committed Aug 31, 2016
1 parent 3885d16 commit 5fc8a95
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 16 deletions.
Expand Up @@ -375,9 +375,9 @@ private FilePathWrapper getTemporaryWorkspace() throws IOException {


private EnvVars getEnvironment(JobWrapper jobImplementationWrapper) throws IOException, InterruptedException { private EnvVars getEnvironment(JobWrapper jobImplementationWrapper) throws IOException, InterruptedException {
EnvVars environment = jobImplementationWrapper.getEnvironment(Jenkins.getInstance().toComputer().getNode(), TaskListener.NULL); EnvVars environment = jobImplementationWrapper.getEnvironment(Jenkins.getInstance().toComputer().getNode(), TaskListener.NULL);
if (jobImplementationWrapper.getSomeBuildWithWorkspace() != null) { EnvVars buildEnvironments = jobImplementationWrapper.getSomeBuildEnvironments();
EnvVars buildEnvVars = jobImplementationWrapper.getSomeBuildWithWorkspace().getEnvironment(TaskListener.NULL); if (buildEnvironments != null) {
environment.putAll(buildEnvVars); environment.putAll(buildEnvironments);
} }
EnvVars.resolve(environment); EnvVars.resolve(environment);
return environment; return environment;
Expand Down
@@ -1,12 +1,19 @@
package net.uaznia.lukanus.hudson.plugins.gitparameter.jobs; package net.uaznia.lukanus.hudson.plugins.gitparameter.jobs;


import java.util.logging.Level;
import java.util.logging.Logger;

import hudson.EnvVars;
import hudson.FilePath; import hudson.FilePath;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.model.Job; import hudson.model.Job;
import hudson.model.TaskListener;
import hudson.scm.SCM; import hudson.scm.SCM;


public class AbstractProjectJobWrapper extends AbstractJobWrapper { public class AbstractProjectJobWrapper extends AbstractJobWrapper {
private static final Logger LOGGER = Logger.getLogger(AbstractProjectJobWrapper.class.getName());

public AbstractProjectJobWrapper(Job job) { public AbstractProjectJobWrapper(Job job) {
super(job); super(job);
} }
Expand All @@ -22,7 +29,15 @@ public FilePath getSomeWorkspace() {
} }


@Override @Override
public AbstractBuild getSomeBuildWithWorkspace() { public EnvVars getSomeBuildEnvironments() {
return ((AbstractProject) getJob()).getSomeBuildWithWorkspace(); try {
AbstractBuild someBuildWithWorkspace = ((AbstractProject) getJob()).getSomeBuildWithWorkspace();
if (someBuildWithWorkspace != null) {
return someBuildWithWorkspace.getEnvironment(TaskListener.NULL);
}
} catch (Exception e) {
LOGGER.log(Level.SEVERE, Messages.AbstractProjectJobWrapper_GetEnvironmentsFromAbstractProject(), e);
}
return null;
} }
} }
Expand Up @@ -4,7 +4,6 @@


import hudson.EnvVars; import hudson.EnvVars;
import hudson.FilePath; import hudson.FilePath;
import hudson.model.AbstractBuild;
import hudson.model.Job; import hudson.model.Job;
import hudson.model.Node; import hudson.model.Node;
import hudson.model.ParametersDefinitionProperty; import hudson.model.ParametersDefinitionProperty;
Expand All @@ -22,7 +21,7 @@ public interface JobWrapper {


EnvVars getEnvironment(Node node, TaskListener taskListener) throws IOException, InterruptedException; EnvVars getEnvironment(Node node, TaskListener taskListener) throws IOException, InterruptedException;


AbstractBuild getSomeBuildWithWorkspace(); EnvVars getSomeBuildEnvironments();


int getNextBuildNumber(); int getNextBuildNumber();


Expand Down
@@ -1,17 +1,18 @@
package net.uaznia.lukanus.hudson.plugins.gitparameter.jobs; package net.uaznia.lukanus.hudson.plugins.gitparameter.jobs;


import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;


import hudson.EnvVars;
import hudson.FilePath; import hudson.FilePath;
import hudson.model.AbstractBuild;
import hudson.model.Job; import hudson.model.Job;
import hudson.model.TaskListener;
import hudson.model.TopLevelItem; import hudson.model.TopLevelItem;
import hudson.scm.SCM; import hudson.scm.SCM;
import jenkins.model.Jenkins; import jenkins.model.Jenkins;
import net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition;


public class WorkflowJobWrapper extends AbstractJobWrapper { public class WorkflowJobWrapper extends AbstractJobWrapper {
private static final Logger LOGGER = Logger.getLogger(WorkflowJobWrapper.class.getName()); private static final Logger LOGGER = Logger.getLogger(WorkflowJobWrapper.class.getName());
Expand All @@ -23,9 +24,7 @@ public WorkflowJobWrapper(Job job) {
@Override @Override
public SCM getScm() { public SCM getScm() {
try { try {
Class<?> workflowJobClazz = getJob().getClass(); Object definition = invokeGetMethodFromJob("getDefinition");
Method getDefinitionMethod = workflowJobClazz.getDeclaredMethod("getDefinition");
Object definition = getDefinitionMethod.invoke(getJob());


Class<?> cpsScmFlowDefinitionClazz = definition.getClass(); Class<?> cpsScmFlowDefinitionClazz = definition.getClass();
Method getScmMethod = cpsScmFlowDefinitionClazz.getMethod("getScm"); Method getScmMethod = cpsScmFlowDefinitionClazz.getMethod("getScm");
Expand All @@ -50,7 +49,27 @@ public FilePath getSomeWorkspace() throws IOException, InterruptedException {
} }


@Override @Override
public AbstractBuild getSomeBuildWithWorkspace() { public EnvVars getSomeBuildEnvironments() {
return null; //TODO Add implementation, perhaps is not necessary try {
Object lastBuild = invokeGetMethodFromJob("getLastBuild");
if (lastBuild != null) {
Class<?> workflowRunClazz = lastBuild.getClass();

Method getEnvironmentMethod = workflowRunClazz.getMethod("getEnvironment", TaskListener.class);
Object envVars = getEnvironmentMethod.invoke(lastBuild, TaskListener.NULL);
if (envVars instanceof EnvVars) {
return (EnvVars) envVars;
}
}
} catch (Exception e) {
LOGGER.log(Level.SEVERE, Messages.WorkflowJobWrapper_GetEnvironmentsFromWorkflowrun(), e);
}
return null;
}

private Object invokeGetMethodFromJob(String methodInvoke) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Class<?> workflowJobClazz = getJob().getClass();
Method getDefinitionMethod = workflowJobClazz.getDeclaredMethod(methodInvoke);
return getDefinitionMethod.invoke(getJob());
} }
} }
@@ -1,2 +1,4 @@
JobWrapperFactory.UnsupportedJobType=Unsupported job type. Class: {0} JobWrapperFactory.UnsupportedJobType=Unsupported job type. Class: {0}
WorkflowJobWrapper.GetWorkflowRepoScmFail=Get repo scm from Workflow job fail WorkflowJobWrapper.GetWorkflowRepoScmFail=Get repo scm from Workflow job fail
WorkflowJobWrapper.GetEnvironmentsFromWorkflowrun=Get environments from WorkflowRun fail
AbstractProjectJobWrapper.GetEnvironmentsFromAbstractProject=Get environments from AbstractProject fail
@@ -1,2 +1,4 @@
JobWrapperFactory.UnsupportedJobType=Niewspierany typ zadania. Class: {0} JobWrapperFactory.UnsupportedJobType=Niewspierany typ zadania. Class: {0}
WorkflowJobWrapper.GetWorkflowRepoScmFail=B\u0142\u0105d przy obs\u0142udze repo scm w WorkflowJob WorkflowJobWrapper.GetWorkflowRepoScmFail=B\u0142\u0105d przy obs\u0142udze repo scm w WorkflowJob
WorkflowJobWrapper.GetEnvironmentsFromWorkflowrun=Pobranie zmiennych z WorkflowRun zako\u0144czone niepowodzeniem
AbstractProjectJobWrapper.GetEnvironmentsFromAbstractProject=Pobranie zmiennych z AbstractProject zako\u0144czone niepowodzeniem

0 comments on commit 5fc8a95

Please sign in to comment.