Hello All,


I am working on Jenkins Plugin Development. I have a special Job type, that 
creates Free Style Projects on saving of the Project.

e.g: Jenkins > New Item/New Job > Enter Name (say "Special Project") and 
click "Build a Special Project" radio button > Click Save. On Clicking 
Save, the Free Style Projects (child Projects) would be created using the 
below code:

FreeStyleProject childProject = 
Jenkins.getInstance().createProject(FreeStyleProject.class,"newName");

FreeStyleProject childProject1 = 
Jenkins.getInstance().createProject(FreeStyleProject.class,"newName1");

I would like to trigger these childProject, childProject1 jobs when my 
"Special Project" is given a build (say by timer or by clicking "Build Now")

I tried the below code , but I get exception.

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
import hudson.model.Action;
import hudson.model.Build;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.model.AbstractBuild;
import hudson.model.Cause;
import hudson.model.FreeStyleProject;


public class SpecialBuild extends Build<SpecialProject, SpecialBuild> {


    public SpecialBuild(SpecialProject project) throws IOException {
        super(project);     
    }


    public SpecialBuild(SpecialProject job, Calendar timestamp) {
        super(job, timestamp);
    }

    public SpecialBuild(SpecialProject project, File buildDir)
            throws IOException {
        super(project, buildDir);
    }


    @Override
    public void run() {
        execute(new ChildExecution(this));

//      if I use the below code : Executors are dead.
//Exception in thread "Executor #1 for master" java.lang.NullPointerException
//  at hudson.model.AbstractProject.getLastBuild(AbstractProject.java:1089)
//  at hudson.model.AbstractProject.getLastBuild(AbstractProject.java:152)
//  at hudson.model.Job.isLogUpdated(Job.java:293)
//  at 
hudson.model.AbstractProject.getCauseOfBlockage(AbstractProject.java:1285)
//  at hudson.model.AbstractProject.isBuildBlocked(AbstractProject.java:1222)
//  at hudson.model.Queue.isBuildBlocked(Queue.java:1021)
//  at hudson.model.Queue.maintain(Queue.java:1080)
//  at hudson.model.Queue.pop(Queue.java:935)
//  at hudson.model.Executor.grabJob(Executor.java:297)
//  at hudson.model.Executor.run(Executor.java:211)
// 
//      execute(new RunExecution(){
//          
//          @Override
//          public Result run(BuildListener listener) throws Exception,
//                  hudson.model.Run.RunnerAbortedException {
//              System.out.println("Special main running");
//              if(project != null){
//                  List<FreeStyleProject> kids = project.getChildren();
//                  for(FreeStyleProjecteachKid : kids){
//                      eachKid.scheduleBuild2(0);
//                  }
//              }
//              
//              return Result.SUCCESS;
//          }
//
//          @Override
//          public void post(BuildListener listener) throws Exception {
//              // do nothing
//
//          }
//
//          @Override
//          public void cleanUp(BuildListener listener) throws Exception {
//              // do nothing
//
//          }
//      });

    }

    private class ChildExecution extends BuildExecution {

        private AbstractBuild build;

        public ChildExecution() {
            super();
        }

        public ChildExecution(SpecialBuild build){
            this.build= (AbstractBuild)build;
        }

        @Override
         public Result run(BuildListener listener) throws Exception {
            Result result = super.run(listener);
            System.out.println("Special main running");
            if(project != null){
                List<FreeStyleProject> kids = project.getChildren();
                for(FreeStyleProject eachKid : kids){
                    eachKid.scheduleBuild2(eachKid.getQuietPeriod(),new Cause(){
                        @Override
                        public String getShortDescription() {
                            return "Special job execution";
                        }

                    },new Action[1]);
                }
            }


            if (isAborted())
                return Result.ABORTED;
            if (isFailure())
                return Result.FAILURE;
            if (isUnstable())
                return Result.UNSTABLE;
            return result;

         }
        private boolean isAborted() {
            return evaluateResult(Result.FAILURE);
        }

        private boolean isFailure() {
            return evaluateResult(Result.UNSTABLE);
        }

        private boolean isUnstable() {
            return evaluateResult(Result.SUCCESS);
        }

        private boolean evaluateResult(Result result) {
            List<FreeStyleProject> children = project.getChildren();
            for (FreeStyleProject child : children) {
//              child.getLas
//              Class<FreeStyleProject> buildClass = child.getBuildClass();
//                if (!child.isRetry() && !child.isAbort()) {
//                    Result buildResult = child.getResult();
//                    if (buildResult != null && 
buildResult.isWorseThan(result)) {
//                        return true;
//                    }
//                }
//              buildClass.
            }
            return false;
        }

    }
}

Exception:

SEVERE: Executor threw an exception
java.lang.RuntimeException: Failed to serialize hudson.model.Actionable#actions 
for class hudson.model.FreeStyleBuild
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:208)
    at 
hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:176)
    at 
com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:135)
    at 
hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:161)
    at 
hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:102)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:82)
    at 
com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:37)
    at com.thoughtworks.xstream.XStream.marshal(XStream.java:898)
    at com.thoughtworks.xstream.XStream.marshal(XStream.java:887)
    at com.thoughtworks.xstream.XStream.toXML(XStream.java:860)
    at hudson.XmlFile.write(XmlFile.java:183)
    at hudson.model.Run.save(Run.java:1834)
    at hudson.model.Run.execute(Run.java:1721)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:246)
Caused by: java.lang.RuntimeException: Failed to serialize 
hudson.model.CauseAction#causes for class hudson.model.CauseAction
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:208)
    at 
hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:176)
    at 
com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:135)
    at 
hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:161)
    at 
hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:102)
    at hudson.util.XStream2$PassthruConverter.marshal(XStream2.java:364)
    at hudson.util.XStream2$AssociatedConverterImpl.marshal(XStream2.java:334)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:88)
    at 
com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:64)
    at 
com.thoughtworks.xstream.converters.collections.CollectionConverter.marshal(CollectionConverter.java:55)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84)
    at 
hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:217)
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:204)
    ... 18 more
Caused by: java.lang.RuntimeException: Failed to serialize 
com.SpecialBuild$ChildExecution$1#this$1 for class 
com.SpecialBuild$ChildExecution$1
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:208)
    at 
hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:176)
    at 
com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:135)
    at 
hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:161)
    at 
hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:102)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:88)
    at 
com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:64)
    at 
com.thoughtworks.xstream.converters.collections.CollectionConverter.marshal(CollectionConverter.java:55)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84)
    at 
hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:217)
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:204)
    ... 35 more
Caused by: java.lang.RuntimeException: Failed to serialize 
hudson.model.AbstractBuild$AbstractBuildExecution#launcher for class 
com.SpecialBuild$ChildExecution
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:208)
    at 
hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:176)
    at 
com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:135)
    at 
hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:161)
    at 
hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:102)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84)
    at 
hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:217)
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:204)
    ... 50 more
Caused by: java.lang.RuntimeException: Failed to serialize 
hudson.Launcher#listener for class hudson.Launcher$LocalLauncher
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:208)
    at 
hudson.util.RobustReflectionConverter$2.visit(RobustReflectionConverter.java:176)
    at 
com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:135)
    at 
hudson.util.RobustReflectionConverter.doMarshal(RobustReflectionConverter.java:161)
    at 
hudson.util.RobustReflectionConverter.marshal(RobustReflectionConverter.java:102)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
    at 
com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
    at 
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84)
    at 
hudson.util.RobustReflectionConverter.marshallField(RobustReflectionConverter.java:217)
    at 
hudson.util.RobustReflectionConverter$2.writeField(RobustReflectionConverter.java:204)
    ... 59 more
Caused by: com.thoughtworks.xstream.converters.ConversionException: Could not 
call hudson.model.StreamBuildListener.writeObject() : Could not call 
hudson.remoting.RemoteOutputStream.writeObject() : null


Also, I had gone through the MultiJob Jenkins Plugin 
https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin . But, there 
all the child jobs are executed via a separate Thread and not via Executors.

Could someone help me in this issue?

Thank you in advance!!



-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/ab9064a2-6235-4f53-823a-83cec615163b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to