Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JENKINS-37104# Matrix project handling #412

Merged
merged 2 commits into from
Aug 18, 2016
Merged
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
6 changes: 3 additions & 3 deletions blueocean-dashboard/src/main/js/redux/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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(
Expand Down Expand Up @@ -848,7 +848,7 @@ export const actions = {
));
};
},

resetTestDetails() {
return (dispatch) =>
dispatch({
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package io.jenkins.blueocean.rest.impl.pipeline;

/**
* @author Vivek Pandey
*/

import hudson.Extension;
import hudson.matrix.MatrixProject;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Neglected to add the corresponding dependency to blueocean-pipeline-api-impl/pom.xml, implicitly relying on htmlpublisher to provide it (no longer the case after jenkinsci/htmlpublisher-plugin#287).

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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public Resource resolve(Item context, Reachable parent, Item target) {
if(context == target && target instanceof WorkflowJob) {
return getPipeline(target,parent);
}

return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -258,5 +261,26 @@ public void pipelineJobCapabilityTest() throws Exception {
);
}

@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);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ public Collection<BlueActionProxy> getActions() {
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){
Expand Down