hudson.model.Executor类的使用及代码示例

x33g5p2x  于2022-01-19 转载在 其他  
字(12.2k)|赞(0)|评价(0)|浏览(109)

本文整理了Java中hudson.model.Executor类的一些代码示例,展示了Executor类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Executor类的具体详情如下:
包路径:hudson.model.Executor
类名称:Executor

Executor介绍

[英]Thread that executes builds.
[中]执行构建的线程。

代码示例

代码示例来源:origin: jenkinsci/jenkins

/**
 * Gets the one off {@link Executor} building this job, if it's being built.
 * Otherwise null.
 * @since 1.433 
 */
public @CheckForNull Executor getOneOffExecutor() {
  for( Computer c : Jenkins.getInstance().getComputers() ) {
    for (Executor e : c.getOneOffExecutors()) {
      if(e.getCurrentExecutable()==this)
        return e;
    }
  }
  return null;
}

代码示例来源:origin: jenkinsci/jenkins

@CheckForNull
public Node getNode() {
  return executor.getOwner().getNode();
}

代码示例来源:origin: jenkinsci/jenkins

/**
 * Looks up the currently running build, if known.
 * <p>While most {@link Run} implementations do add a {@link RunExecution} to the stack for the duration of the build,
 * those which have a different implementation of {@link Run#run} (or which do additional work after {@link Run#execute} completes)
 * may not consistently or ever keep an execution on the stack.
 * In such cases this method will return null, meaning that {@link CheckPoint#block(BuildListener, String)} and {@link CheckPoint#report} will do nothing.
 * @return a running build, or null if one has not been recorded
 */
synchronized @CheckForNull RunExecution peek() {
  Executor e = Executor.currentExecutor();
  if (e != null) {
    Stack<RunExecution> s = stack.get(e);
    if (s != null && !s.isEmpty()) {
      return s.peek();
    }
  }
  return null;
}

代码示例来源:origin: jenkinsci/jenkins

@Override
  public void run() {
    for( Executor e : executors )
      if(e.isIdle())
        e.interrupt();
  }
});

代码示例来源:origin: jenkinsci/jenkins

/**
 * Gets the current {@link Computer} that the build is running.
 * This method only works when called during a build, such as by
 * {@link hudson.tasks.Publisher}, {@link hudson.tasks.BuildWrapper}, etc.
 * @return the {@link Computer} associated with {@link Executor#currentExecutor}, or (consistently as of 1.591) null if not on an executor thread
 */
public static @Nullable Computer currentComputer() {
  Executor e = Executor.currentExecutor();
  return e != null ? e.getOwner() : null;
}

代码示例来源:origin: jenkinsci/jenkins

@Override
  public String toString() {
    return String.format("JobOffer[%s #%d]",executor.getOwner().getName(), executor.getNumber());
  }
}

代码示例来源:origin: jenkinsci/jenkins

/**
 * Finds the executor currently running a given process.
 * @param executable a possibly running executable
 * @return the executor (possibly a {@link OneOffExecutor}) whose {@link Executor#getCurrentExecutable} matches that,
 *          or null if it could not be found (for example because the execution has already completed)
 * @since 1.607
 */
@CheckForNull
public static Executor of(Executable executable) {
  Jenkins jenkins = Jenkins.getInstanceOrNull(); // TODO confirm safe to assume non-null and use getInstance()
  if (jenkins == null) {
    return null;
  }
  for (Computer computer : jenkins.getComputers()) {
    for (Executor executor : computer.getAllExecutors()) {
      if (executor.getCurrentExecutable() == executable) {
        return executor;
      }
    }
  }
  return null;
}

代码示例来源:origin: jenkinsci/jenkins

public Builder with(@CheckForNull Computer computer) {
  if (computer == null) {
    return this;
  }
  if (computer.isOnline()) {
    final List<Executor> executors = computer.getExecutors();
    final boolean acceptingTasks = computer.isAcceptingTasks();
    for (Executor e : executors) {
      definedExecutors++;
      onlineExecutors++;
      if (e.getCurrentWorkUnit() != null) {
        busyExecutors++;
      } else {
        idleExecutors++;
        if (acceptingTasks) availableExecutors++;
      }
    }
  } else {
    final int numExecutors = computer.getNumExecutors();
    definedExecutors += numExecutors;
    if (computer.isConnecting()) {
      connectingExecutors += numExecutors;
    }
  }
  return this;
}

代码示例来源:origin: jenkinsci/jenkins

public @CheckForNull CauseOfBlockage getCauseOfBlockage(BuildableItem item) {
  Node node = getNode();
  if (node == null) {
    return CauseOfBlockage.fromMessage(Messages._Queue_node_has_been_removed_from_configuration(executor.getOwner().getDisplayName()));
    return CauseOfBlockage.fromMessage(Messages._Queue_executor_slot_already_in_use());
  if (executor.getOwner().isOffline()) {
    return new CauseOfBlockage.BecauseNodeIsOffline(node);
  if (!executor.getOwner().isAcceptingTasks()) { // Node.canTake (above) does not consider RetentionStrategy.isAcceptingTasks
    return new CauseOfBlockage.BecauseNodeIsNotAcceptingTasks(node);

代码示例来源:origin: org.jenkins-ci.plugins.workflow/workflow-durable-task-step

@Override public String getStatus() {
  // Yet another copy of the same logic; perhaps this should be factored into some method returning a union of Queue.Item and PlaceholderExecutable?
  for (Queue.Item item : Queue.getInstance().getItems()) {
    if (item.task instanceof PlaceholderTask && ((PlaceholderTask) item.task).context.equals(getContext())) {
      return "waiting for " + item.task.getFullDisplayName() + " to be scheduled; blocked: " + item.getWhy();
    }
  }
  Jenkins j = Jenkins.getInstance();
  if (j != null) {
    COMPUTERS: for (Computer c : j.getComputers()) {
      for (Executor e : c.getExecutors()) {
        Queue.Executable exec = e.getCurrentExecutable();
        if (exec instanceof PlaceholderTask.PlaceholderExecutable && ((PlaceholderTask.PlaceholderExecutable) exec).getParent().context.equals(getContext())) {
          return "running on " + c.getName();
        }
      }
    }
  }
  return "node block appears to be neither running nor scheduled";
}

代码示例来源:origin: org.jenkins-ci.plugins.workflow/workflow-durable-task-step

@Override
public void stop(Throwable cause) throws Exception {
  for (Queue.Item item : Queue.getInstance().getItems()) {
    // if we are still in the queue waiting to be scheduled, just retract that
    if (item.task instanceof PlaceholderTask && ((PlaceholderTask) item.task).context.equals(getContext())) {
      Queue.getInstance().cancel(item);
      break;
    }
  }
  Jenkins j = Jenkins.getInstance();
  if (j != null) {
    // if we are already running, kill the ongoing activities, which releases PlaceholderExecutable from its sleep loop
    // Similar to Executor.of, but distinct since we do not have the Executable yet:
    COMPUTERS: for (Computer c : j.getComputers()) {
      for (Executor e : c.getExecutors()) {
        Queue.Executable exec = e.getCurrentExecutable();
        if (exec instanceof PlaceholderTask.PlaceholderExecutable && ((PlaceholderTask.PlaceholderExecutable) exec).getParent().context.equals(getContext())) {
          PlaceholderTask.finish(((PlaceholderTask.PlaceholderExecutable) exec).getParent().cookie);
          break COMPUTERS;
        }
      }
    }
  }
  // Whether or not either of the above worked (and they would not if for example our item were canceled), make sure we die.
  super.stop(cause);
}

代码示例来源:origin: org.jenkins-ci.plugins/pipeline-build-step

private @CheckForNull String running(@Nonnull Executor e) {
  Queue.Executable exec = e.getCurrentExecutable();
  if (exec instanceof Run) {
    Run<?,?> run = (Run) exec;
    for (BuildTriggerAction.Trigger trigger : BuildTriggerAction.triggersFor(run)) {
      if (trigger.context.equals(getContext())) {
        return "running " + run;
      }
    }
  }
  return null;
}

代码示例来源:origin: jenkinsci/jenkins

@Override
  public void buildEnvironmentFor(Job j, EnvVars env, TaskListener listener) throws IOException, InterruptedException {
    Jenkins jenkins = Jenkins.getInstance();
    String rootUrl = jenkins.getRootUrl();
    if(rootUrl!=null) {
      env.put("JENKINS_URL", rootUrl);
      env.put("HUDSON_URL", rootUrl); // Legacy compatibility
      env.put("JOB_URL", rootUrl+j.getUrl());
    }

    String root = jenkins.getRootDir().getPath();
    env.put("JENKINS_HOME", root);
    env.put("HUDSON_HOME", root);   // legacy compatibility

    Thread t = Thread.currentThread();
    if (t instanceof Executor) {
      Executor e = (Executor) t;
      env.put("EXECUTOR_NUMBER", String.valueOf(e.getNumber()));
      if (e.getOwner() instanceof MasterComputer) {
        env.put("NODE_NAME", "master");
      } else {
        env.put("NODE_NAME", e.getOwner().getName());
      }
      Node n = e.getOwner().getNode();
      if (n != null)
        env.put("NODE_LABELS", Util.join(n.getAssignedLabels(), " "));
    }
  }
}

代码示例来源:origin: jenkinsci/jenkins

Queue queue = Queue.getInstance();
    if (this instanceof Queue.Task) {
      queue.cancel((Queue.Task) this);
    for (Queue.Item i : queue.getItems()) {
      Item item = Tasks.getItemOf(i.task);
      while (item != null) {
    for (Computer c : Jenkins.getInstance().getComputers()) {
      for (Executor e : c.getAllExecutors()) {
        final WorkUnit workUnit = e.getCurrentWorkUnit();
        final Executable executable = workUnit != null ? workUnit.getExecutable() : null;
        final SubTask subtask = executable != null ? getParentOf(executable) : null;
            while (item != null) {
              if (item == this) {
                buildsInProgress.put(e, e.getCurrentExecutable());
                e.interrupt(Result.ABORTED);
                break;
          if (!entry.getKey().isAlive()
              || entry.getValue() != entry.getKey().getCurrentExecutable()) {
            iterator.remove();
          entry.getKey().interrupt(Result.ABORTED);
Jenkins.getInstance().rebuildDependencyGraphAsync();

代码示例来源:origin: jenkinsci/jenkins

onStartBuilding();
try {
      Computer computer = Computer.currentComputer();
      Charset charset = null;
      if (computer != null) {
        charset = computer.getDefaultCharset();
        this.charset = charset.name();
      logger = createLogger();
      listener = createBuildListener(job, logger, charset);
      listener.started(getCauses());
      Authentication auth = Jenkins.getAuthentication();
      if (!auth.equals(ACL.SYSTEM)) {
        String id = auth.getName();
    } catch( InterruptedException e) {
      result = Executor.currentExecutor().abortResult();
      listener.getLogger().println(Messages.Run_BuildAborted());
      Executor.currentExecutor().recordCauseOfInterruption(Run.this,listener);
      LOGGER.log(Level.INFO, this + " aborted", e);
    } catch( Throwable e ) {

代码示例来源:origin: jenkinsci/jenkins

@Override
public boolean cancel(boolean mayInterruptIfRunning) {
  Queue q = Jenkins.getInstance().getQueue();
  synchronized (q) {
    synchronized (this) {
      if(!executors.isEmpty()) {
        if(mayInterruptIfRunning)
          for (Executor e : executors)
            e.interrupt();
        return mayInterruptIfRunning;
      }
      return q.cancel(task);
    }
  }
}

代码示例来源:origin: jenkinsci/jenkins-test-harness

/**
 * Waits until Jenkins finishes building everything, including those builds in the queue, or fail the test
 * if the specified timeout milliseconds is exceeded.
 */
protected void waitUntilNoActivityUpTo(int timeout) throws Exception {
  long startTime = System.currentTimeMillis();
  int streak = 0;
  while (true) {
    Thread.sleep(100);
    if (isSomethingHappening())
      streak=0;
    else
      streak++;
    if (streak>2)   // the system is quiet for a while
      return;
    if (System.currentTimeMillis()-startTime > timeout) {
      List<Executable> building = new ArrayList<Executable>();
      for (Computer c : jenkins.getComputers()) {
        for (Executor e : c.getExecutors()) {
          if (e.isBusy())
            building.add(e.getCurrentExecutable());
        }
      }
      throw new AssertionError(String.format("Jenkins is still doing something after %dms: queue=%s building=%s",
          timeout, Arrays.asList(jenkins.getQueue().getItems()), building));
    }
  }
}

代码示例来源:origin: jenkinsci/instant-messaging-plugin

private int getBusyExecutors() {
  int busyExecutors = 0;
  Computer[] computers = Jenkins.getInstance().getComputers();
  for (Computer compi : computers) {
    
    for (Executor executor : compi.getExecutors()) {
      if (executor.isBusy()) {
        busyExecutors++;
      }
    }
  }
  
  return busyExecutors;
}

代码示例来源:origin: jenkinsci/tfs-plugin

private void cancelPreviousPullRequestBuilds(Job job, TeamPullRequestMergedDetailsAction pullReqeuestMergedDetails, Queue queue) {
  RunList<?> allBuilds = job.getBuilds();
  for (Run run : allBuilds) {
    TeamPullRequestMergedDetailsAction cause = run.getAction(TeamPullRequestMergedDetailsAction.class);
    if (cause != null && run.isBuilding()) {
      if (cause instanceof TeamPullRequestMergedDetailsAction &&
          cause.gitPullRequest.getPullRequestId() == pullReqeuestMergedDetails.gitPullRequest.getPullRequestId()) {
        LOGGER.info("Canceling previously triggered Job: " + run.getFullDisplayName());
        Executor executor = run.getExecutor();
        if (executor != null)
          executor.doStop();
        Queue.Item item = queue.getItem(run.getQueueId());
        if (item != null)
          queue.cancel(item);
      }
    }
  }
}

代码示例来源:origin: jenkinsci/workflow-cps-plugin

/**
 * Verify that we kill endlessly recursive NonCPS code cleanly and don't leave remnants.
 * This is a bit of extra caution to go along with {@link #endlessRecursion()} to ensure
 *  we don't trigger other forms of failure with the StackOverflowError.
 */
@Test
@Ignore  /** Intermittent failures because triggers a longstanding unrelated SandboxResolvingClassloader bug
       resolved in https://github.com/jenkinsci/script-security-plugin/pull/160 */
public void endlessRecursionNonCPS() throws Exception {
  Assume.assumeTrue(!Functions.isWindows());  // Sidestep false failures specific to a few Windows build environments.
  String script = "@NonCPS def getThing(){return thing == null}; \n" +
      "node { echo getThing(); } ";
  WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "recursion");
  job.setDefinition(new CpsFlowDefinition(script, true));
  // Should have failed with error about excessive recursion depth
  WorkflowRun r = jenkins.assertBuildStatus(Result.FAILURE, job.scheduleBuild2(0).get());
  Assert.assertTrue("No queued FlyWeightTask for job should remain after failure", jenkins.jenkins.getQueue().isEmpty());
  for (Computer c : jenkins.jenkins.getComputers()) {
    for (Executor ex : c.getExecutors()) {
      if (ex.isBusy()) {
        fail(ex.getCurrentExecutable().toString());
      }
    }
  }
}

相关文章