JENKINS-37104# Matrix project handling (#412)
* JENKINS-37104# Matrix project handling - Bare minimum support for Matrix project. Ensures it doesn't break. - For matrix project, self href points to classic URL path ("/job/:name") - Adds hudson.matrix.MatrixProject capability - UI to check hudson.matrix.MatrixProject capability and if present create a link using returned self href, so that when user clicks on it, he gets redirected to classic Matrix job page. * Reverting removal of matrix project test dependency, favorite tests fail as Favorite plugin idepends on matrix project plugin and has reference to MatrixConfiguration.
This commit is contained in:
parent
40c56c0801
commit
05537ffadc
|
@ -260,7 +260,7 @@ export const actions = {
|
|||
return (dispatch) => {
|
||||
const baseUrl = config.getAppURLBase();
|
||||
// TODO: update this code to call /search with organizationName once JENKINS-36273 is ready
|
||||
const url = `${baseUrl}/rest/search/?q=type:pipeline;excludedFromFlattening:jenkins.branch.MultiBranchProject`;
|
||||
const url = `${baseUrl}/rest/search/?q=type:pipeline;excludedFromFlattening:jenkins.branch.MultiBranchProject,hudson.matrix.MatrixProject`;
|
||||
|
||||
return dispatch(actions.generateData(
|
||||
url,
|
||||
|
@ -281,7 +281,7 @@ export const actions = {
|
|||
const pipelines = getState().adminStore.pipelines;
|
||||
const baseUrl = config.getAppURLBase();
|
||||
// TODO: update this code to call /search with organizationName once JENKINS-36273 is ready
|
||||
const url = `${baseUrl}/rest/search/?q=type:pipeline;excludedFromFlattening:jenkins.branch.MultiBranchProject`;
|
||||
const url = `${baseUrl}/rest/search/?q=type:pipeline;excludedFromFlattening:jenkins.branch.MultiBranchProject,hudson.matrix.MatrixProject`;
|
||||
|
||||
if (!pipelines) {
|
||||
return dispatch(actions.generateData(
|
||||
|
@ -848,7 +848,7 @@ export const actions = {
|
|||
));
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
resetTestDetails() {
|
||||
return (dispatch) =>
|
||||
dispatch({
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
package io.jenkins.blueocean.rest.impl.pipeline;
|
||||
|
||||
/**
|
||||
* @author Vivek Pandey
|
||||
*/
|
||||
|
||||
import hudson.Extension;
|
||||
import hudson.matrix.MatrixProject;
|
||||
import hudson.model.Item;
|
||||
import io.jenkins.blueocean.rest.Reachable;
|
||||
import io.jenkins.blueocean.rest.annotation.Capability;
|
||||
import io.jenkins.blueocean.rest.hal.Link;
|
||||
import io.jenkins.blueocean.rest.model.BluePipeline;
|
||||
import io.jenkins.blueocean.rest.model.BluePipelineContainer;
|
||||
import io.jenkins.blueocean.rest.model.BlueRun;
|
||||
import io.jenkins.blueocean.rest.model.BlueRunContainer;
|
||||
import io.jenkins.blueocean.rest.model.Resource;
|
||||
import io.jenkins.blueocean.service.embedded.rest.AbstractRunImpl;
|
||||
import io.jenkins.blueocean.service.embedded.rest.BluePipelineFactory;
|
||||
import io.jenkins.blueocean.service.embedded.rest.PipelineFolderImpl;
|
||||
|
||||
/**
|
||||
* @author Vivek Pandey
|
||||
*/
|
||||
@Capability("hudson.matrix.MatrixProject")
|
||||
public class MatrixProjectImpl extends PipelineFolderImpl {
|
||||
|
||||
private final MatrixProject matrixProject;
|
||||
|
||||
public MatrixProjectImpl(MatrixProject folder, Link parent) {
|
||||
super(folder, parent);
|
||||
this.matrixProject = folder;
|
||||
}
|
||||
|
||||
@Extension(ordinal = 1)
|
||||
public static class PipelineFactoryImpl extends BluePipelineFactory{
|
||||
|
||||
@Override
|
||||
public MatrixProjectImpl getPipeline(Item item, Reachable parent) {
|
||||
if (item instanceof MatrixProject) {
|
||||
return new MatrixProjectImpl((MatrixProject) item, parent.getLink());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Resource resolve(Item context, Reachable parent, Item target) {
|
||||
MatrixProjectImpl project = getPipeline(context, parent);
|
||||
if (project!=null) {
|
||||
if(context == target){
|
||||
return project;
|
||||
}
|
||||
Item nextChild = findNextStep(project.matrixProject,target);
|
||||
for (BluePipelineFactory f : all()) {
|
||||
Resource answer = f.resolve(nextChild, project, target);
|
||||
if (answer!=null)
|
||||
return answer;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BluePipeline getDynamic(String name) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BluePipelineContainer getPipelines() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getNumberOfFolders() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getNumberOfPipelines() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Link getLink() {
|
||||
return new Link("/"+ matrixProject.getUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlueRunContainer getRuns() {
|
||||
return null; //TODO: matrix build have run but we are not returning any for now. to be fixed when full matrix build support is defined.
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlueRun getLatestRun() {
|
||||
if(matrixProject.getLastBuild() == null){
|
||||
return null;
|
||||
}
|
||||
return AbstractRunImpl.getBlueRun(matrixProject.getLastBuild(), this);
|
||||
}
|
||||
}
|
|
@ -36,6 +36,7 @@ public class PipelineImpl extends AbstractPipelineImpl {
|
|||
if(context == target && target instanceof WorkflowJob) {
|
||||
return getPipeline(target,parent);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package io.jenkins.blueocean.rest.impl.pipeline;
|
||||
|
||||
import com.mashape.unirest.http.HttpResponse;
|
||||
import hudson.matrix.Axis;
|
||||
import hudson.matrix.MatrixBuild;
|
||||
import hudson.matrix.MatrixProject;
|
||||
import hudson.model.FreeStyleBuild;
|
||||
import hudson.model.FreeStyleProject;
|
||||
import hudson.model.Result;
|
||||
|
@ -258,5 +261,26 @@ public class PipelineApiTest extends PipelineBaseTest {
|
|||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void matrixProjectTest() throws Exception{
|
||||
MatrixProject mp = j.jenkins.createProject(MatrixProject.class, "mp1");
|
||||
mp.getAxes().add(new Axis("os", "linux", "windows"));
|
||||
mp.getAxes().add(new Axis("jdk", "1.7", "1.8"));
|
||||
|
||||
MatrixBuild matrixBuild = mp.scheduleBuild2(0).get();
|
||||
j.assertBuildStatusSuccess(matrixBuild);
|
||||
|
||||
List<Map> pipelines = get("/search/?q=type:pipeline;excludedFromFlattening:jenkins.branch.MultiBranchProject,hudson.matrix.MatrixProject", List.class);
|
||||
Assert.assertEquals(1, pipelines.size());
|
||||
|
||||
Map p = pipelines.get(0);
|
||||
|
||||
Assert.assertEquals("mp1", p.get("name"));
|
||||
|
||||
String href = getHrefFromLinks(p, "self");
|
||||
|
||||
Assert.assertEquals("/job/mp1/", href);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -184,7 +184,7 @@ public class AbstractRunImpl<T extends Run> extends BlueRun {
|
|||
return AbstractPipelineImpl.getActionProxies(run.getAllActions(), this);
|
||||
}
|
||||
|
||||
protected static BlueRun getBlueRun(Run r, Reachable parent){
|
||||
public static BlueRun getBlueRun(Run r, Reachable parent){
|
||||
for(BlueRunFactory runFactory:BlueRunFactory.all()){
|
||||
BlueRun blueRun = runFactory.getRun(r,parent);
|
||||
if(blueRun != null){
|
||||
|
|
Loading…
Reference in New Issue