@Override public void tearDown(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws IOException, InterruptedException { LOG.info("Shutting down slave"); listener.getLogger().println("Shutting down slave '" + slaveName + "'."); final Node slaveNode = Jenkins.getInstance().getNode(slaveName); if (isNull(slaveNode)) { throw new IllegalStateException("Can't get node " + slaveName); } final DockerSlaveSingle node = (DockerSlaveSingle) slaveNode; try { node.terminate(); } catch (Throwable e) { LOG.error("Can't terminate node", e); CloudStatistics.ProvisioningListener.get().onFailure(node.getId(), e); } } }
LOG.error("Error in provisioning; template='{}' for cloud='{}'", t, getDisplayName(), ex); get().onFailure(id, ex); throw Throwables.propagate(ex); } finally {
public void cleanCloudStatistics() { Jenkins jenkins = Jenkins.getInstance(); Set<ProvisioningActivity.Id> plannedNodesSet = new HashSet<>(); for (NodeProvisioner.PlannedNode node : jenkins.unlabeledNodeProvisioner.getPendingLaunches()) { if (node instanceof TrackedItem) { plannedNodesSet.add(((TrackedItem) node).getId()); } } for (Label l : jenkins.getLabels()) { for (NodeProvisioner.PlannedNode node : l.nodeProvisioner.getPendingLaunches()) { if (node instanceof TrackedItem) { plannedNodesSet.add(((TrackedItem) node).getId()); } } } for (Node node : jenkins.getNodes()) { if (node instanceof TrackedItem) { plannedNodesSet.add(((TrackedItem) node).getId()); } } Collection<ProvisioningActivity> activities = CloudStatistics.get().getNotCompletedActivities(); for (ProvisioningActivity activity : activities) { if (activity.getCurrentPhase().equals(ProvisioningActivity.Phase.PROVISIONING) && !plannedNodesSet.contains(activity.getId())) { Exception e = new Exception(String.format("Node %s has lost. Mark as failure", activity.getId().toString())); CloudStatistics.ProvisioningListener.get().onFailure(activity.getId(), e); } } }
} catch (AzureCloudException e) { if (isProvisionOutside) { CloudStatistics.ProvisioningListener.get().onFailure(provisioningId, e);
@Restricted(NoExternalUse.class) public @Nonnull JCloudsSlave provisionSlave(JCloudsSlaveTemplate template) throws IOException, Openstack.ActionFailed{ CloudStatistics.ProvisioningListener provisioningListener = CloudStatistics.ProvisioningListener.get(); ProvisioningActivity.Id id = new ProvisioningActivity.Id(this.name, template.name); JCloudsSlave node; try { provisioningListener.onStarted(id); node = template.provisionSlave(this, id); provisioningListener.onComplete(id, node); } catch (Throwable ex) { provisioningListener.onFailure(id, ex); throw ex; } Jenkins.getActiveInstance().addNode(node); return node; }