private List<Node> getPollingNodeListRequiredNoWS(XTriggerLog log) { AbstractProject project = (AbstractProject) job; //The specified trigger node must be considered first if (triggerLabel != null) { log.info(String.format("Looking for a node to the restricted label %s.", triggerLabel)); if ("master".equalsIgnoreCase(triggerLabel)) { log.info("Restrict on master label. Polling on master."); return Arrays.asList(getMasterNode()); } Label targetLabel = Hudson.getInstance().getLabel(triggerLabel); return getNodesLabel(project, targetLabel); } return candidatePollingNode(log); }
private List<Node> getPollingNodesWithExecutors(XTriggerLog log) { List<Node> result = new ArrayList<Node>(); List<Node> nodes = getPollingNodeList(log); for (Node node : nodes) { if (node != null && eligibleNode(node)) { result.add(node); } else if (node != null) { log.info(String.format("Finding %s but it is not eligible.", node.getDisplayName())); } } return result; }
protected Action[] getScheduledXTriggerActions(Node pollingNode, XTriggerLog log) throws XTriggerException { Action[] actions = getScheduledActions(pollingNode, log); int nbNewAction = actions.length + 1; Action[] newActions = new Action[nbNewAction]; for (int i = 0; i < actions.length; i++) { newActions[i] = actions[i]; } try { newActions[newActions.length - 1] = new XTriggerCauseAction(FileUtils.readFileToString(getLogFile())); } catch (IOException ioe) { throw new XTriggerException(ioe); } return newActions; }
private List<Node> getPollingNodeNoPreviousBuild(XTriggerLog log) { AbstractProject project = (AbstractProject) job; Label targetLabel = getTargetLabel(log); if (targetLabel != null) { return getNodesLabel(project, targetLabel); } return null; }
private List<Node> getPollingNodeList(XTriggerLog log) { log.info("Looking nodes where the poll can be run."); List<Node> nodes; if (requiresWorkspaceForPolling()) { nodes = getPollingNodeListRequiredWS(log); } else { nodes = getPollingNodeListRequiredNoWS(log); } if (nodes == null || nodes.size() == 0) { log.info("Can't find any eligible slave nodes."); log.info("Trying to poll on master node."); nodes = Arrays.asList(getMasterNode()); } return nodes; }
try { StreamTaskListener listener = new StreamTaskListener(getLogFile()); log = new XTriggerLog(listener); if (requirePollingNode()) { changed = checkIfModified(pollingNode, log); changed = checkIfModified(log); log.info("Changes found. Scheduling a build."); AbstractProject project = (AbstractProject) job; project.scheduleBuild(0, new XTriggerCause(triggerName, getCause(), true), getScheduledXTriggerActions(null, log)); } else { log.info("No changes.");
private List<Node> getPollingNodeListRequiredWS(XTriggerLog log) { AbstractProject project = (AbstractProject) job; //The specified trigger node must be considered first if (triggerLabel != null) { log.info(String.format("Looking for a polling node to the restricted label %s.", triggerLabel)); if ("master".equalsIgnoreCase(triggerLabel)) { log.info("Polling on master."); return Arrays.asList(getMasterNode()); } Label targetLabel = Hudson.getInstance().getLabel(triggerLabel); return getNodesLabel(project, targetLabel); } //Search for the last built on log.info("Looking for the last built on node."); Node lastBuildOnNode = project.getLastBuiltOn(); if (lastBuildOnNode == null) { return getPollingNodeNoPreviousBuild(log); } return Arrays.asList(lastBuildOnNode); }
@Override public void run() { AbstractProject project = (AbstractProject) job; XTriggerDescriptor descriptor = getDescriptor(); ExecutorService executorService = descriptor.getExecutor(); XTriggerLog log = null; try { StreamTaskListener listener = new StreamTaskListener(getLogFile()); log = new XTriggerLog(listener); if (Hudson.getInstance().isQuietingDown()) { log.info("Jenkins is quieting down."); } else if (!project.isBuildable()) { log.info("The job is not buildable. Activate it to poll again."); } else if (!unblockConcurrentBuild && project.isBuilding()) { log.info("The job is building. Waiting for next poll."); } else { Runner runner = new Runner(getName()); executorService.execute(runner); } } catch (Throwable t) { LOGGER.log(Level.SEVERE, "Severe error during the trigger execution " + t.getMessage()); t.printStackTrace(); } finally { if (log != null) { log.closeQuietly(); } } }
@Override public void start(BuildableItem project, boolean newInstance) { super.start(project, newInstance); XTriggerLog log = new XTriggerLog(new StreamTaskListener(new NullStream())); Node pollingNode = getPollingNode(log); if (pollingNode == null) { log.info("Can't find any complete active node."); log.info("Checking again in next polling schedule."); log.info("Waiting for next schedule."); offlineSlaveOnStartup = true; return; } if (pollingNode.getRootPath() == null) { log.info("The running slave might be offline at the moment."); log.info("Waiting for next schedule."); offlineSlaveOnStartup = true; return; } try { start(pollingNode, project, newInstance, log); } catch (XTriggerException xe) { LOGGER.log(Level.SEVERE, "Can't initialize trigger", xe); } }
private List<Node> candidatePollingNode(XTriggerLog log) { log.info("Looking for a candidate node to run the poll."); AbstractProject project = (AbstractProject) job; Label targetLabel = getTargetLabel(log); if (targetLabel != null) { return getNodesLabel(project, targetLabel); } else { return Jenkins.getInstance().getNodes(); } }