Пример #1
0
 public JoinAction(
     JoinTrigger joinTrigger, BuildTrigger buildTrigger, ArrayList<String> otherDownstream) {
   this.pendingDownstreamProjects = new LinkedList<String>();
   if (buildTrigger != null) {
     for (AbstractProject project : buildTrigger.getChildProjects()) {
       if (!project.isDisabled()) {
         this.pendingDownstreamProjects.add(project.getName());
       }
     }
   }
   for (String proj : otherDownstream) {
     this.pendingDownstreamProjects.add(proj.trim());
   }
   this.joinProjects = joinTrigger.getJoinProjectsValue();
   this.joinPublishers = joinTrigger.getJoinPublishers();
   this.evenIfDownstreamUnstable = joinTrigger.getEvenIfDownstreamUnstable();
   this.completedDownstreamProjects = new LinkedList<String>();
   this.consideredBuilds = new LinkedList<String>();
   this.overallResult = Result.SUCCESS;
 }
Пример #2
0
  public synchronized void checkPendingDownstream(
      AbstractBuild<?, ?> owner, TaskListener listener) {
    if (pendingDownstreamProjects.isEmpty()) {
      listener.getLogger().println("All downstream projects complete!");
      Result threshold = this.evenIfDownstreamUnstable ? Result.UNSTABLE : Result.SUCCESS;
      if (this.overallResult.isWorseThan(threshold)) {
        listener.getLogger().println("Minimum result threshold not met for join project");
      } else {
        // Construct a launcher since CopyArchiver wants to get the
        // channel from it. We use the channel of the node where the
        // splitProject was built on.
        final Launcher launcher = new NoopLauncher(listener, owner);

        for (Publisher pub : this.joinPublishers) {
          try {
            pub.perform(owner, launcher, (BuildListener) listener);
          } catch (InterruptedException e) {
            e.printStackTrace();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
        if (!JoinTrigger.canDeclare(owner.getProject())) {
          List<AbstractProject> projects = Items.fromNameList(joinProjects, AbstractProject.class);
          for (AbstractProject project : projects) {
            listener.getLogger().println("Scheduling join project: " + project.getName());
            project.scheduleBuild(new JoinCause(owner));
          }
        }
      }
    } else {
      listener
          .getLogger()
          .println(
              "Project "
                  + owner.getProject().getName()
                  + " still waiting for "
                  + pendingDownstreamProjects.size()
                  + " builds to complete");
    }
  }