Skip to content

Instantly share code, notes, and snippets.

@v1v
Created June 18, 2020 12:27
Show Gist options
  • Save v1v/3f320fd2b2314842e0cbc19b43648fe8 to your computer and use it in GitHub Desktop.
Save v1v/3f320fd2b2314842e0cbc19b43648fe8 to your computer and use it in GitHub Desktop.
JenkinsPipelineSteps UserScript easily find failed and aborted steps
// ==UserScript==
// @name JenkinsPipelineSteps
// @version 1.5
// @description Add extra table with red steps in the top of the page
// @author Magnus Håkansson
// @match *://*/*/job/*/flowGraphTable/
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js
// @run-at document-end
// @grant none
// @license MIT
// ==/UserScript==
function addTable(tableId, status, header) {
jQuery('div#main-panel').prepend("<table id=" + tableId + " class='pane bigtable'>");
jQuery('table#' + tableId).append("<tr><th>Agent</th><th>Context</th><th>" + header + "</th><th>Arguments</th><th width='32'></th><th width='32'>Status</th></tr>");
jQuery("[alt='" + status + "']").parent().parent().each(function(index, element) {
// Ignore some nodes
if (jQuery(element).find('a:contains("Start of Pipeline - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Stage : Start - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Timestamps : Start - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Timestamps : Body : Start - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Enforce time limit : Start - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Enforce time limit : Body : Start - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Execute in parallel : Start - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Execution - ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Branch: Sense ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Set environment variables : ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Sets up Docker registry endpoint : ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Sets up Docker registry endpoint : ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Run build steps inside a Docker container : ")').size() == 1) { return; }
if (jQuery(element.firstChild).find('a:contains("Branch: ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Allocate node : ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Allocate workspace : ")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Branch: Run")').size() == 1) { return; }
if (jQuery(element).find('a:contains("Bind credentials to variables")').size() == 1) { return; }
var clone = element.cloneNode(true);
jQuery(clone).find('td:first').removeAttr('style');
var column = document.createElement("td");
var prevAll = jQuery(element).prevAll();
var branch = prevAll.find('a:contains("Branch:")').last();
column.textContent = branch.text();
clone.prepend(column);
var allocateNode = branch.parent().parent().next();
var allocateNodeLogUrl = allocateNode.find('a:last').attr("href");
var argumentNodeText = allocateNode.find('td:first').next().text();
jQuery.get(allocateNodeLogUrl, function(data) {
var agent = data.match(/Running\son.+>(.+)</)[1];
column = document.createElement("td");
var a = document.createElement("a");
a.textContent = agent + ' (' + argumentNodeText + ')';
column.prepend(a);
a.setAttribute('href', '/computer/' + agent);
clone.prepend(column);
});
jQuery('table#' + tableId).append(clone);
});
jQuery('div#' + tableId).insertAfter("</table>");
}
function removeRow(searchString) {
jQuery('a:contains("' + searchString + '")').parent().parent().each(function (index, element) {
element.parentNode.removeChild(element);
});
}
jQuery(document).ready(function(){
jQuery.noConflict();
addTable('Failed', 'Failed', 'Failed Steps');
addTable('Aborted', 'Aborted', 'Aborted Steps');
addTable('Executing', 'In progress', 'Executing Steps');
removeRow('Determine current directory');
removeRow('Unix-like');
removeRow('Bind credentials to variables : Body : Start');
removeRow('Allocate workspace : Body : Start');
removeRow('Allocate node : Body : Start');
});
@v1v
Copy link
Author

v1v commented Jun 18, 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment