Получить Jenkins Builds через API для Google Spreadsheet - получить параметры subBuilds и пометить сбойные параметры красным - PullRequest
0 голосов
/ 25 октября 2019

ОПИСАНИЕ:

Текущий код работает нормально для получения информации о сборках.
Однако я застрял с получением одного уровня глубже - subBuilds - и применением их состояния pass / fail в качестве цвета шрифта.
Сценарий приведен ниже:

1) Получить задание Jenkins и сохранить каждое «число» сборки (json response1)

GET http://jenkins.site.com/job/[job_name]/api/json  

{
    "builds": [{
        "number": "i"
    }]
}

2) Получить каждое построение задания Jenkins и сохранить «параметры» (json)response2)

GET http://jenkins.site.com/job/[job_name]/' + number + '/api/json

{
    "actions": [{
        "parameters": [{
            "name": "service1",
            "value": "true"
        }, {
            "name": "service2",
            "value": "true"
        }, {
            "name": "service3",
            "value": "false"
        }]
    }],
    "builds": [{
        "number": "i",
        "subBuilds": [{
            "jobName": "service1",
            "state": "success"
        }, {
            "jobName": "service2",
            "state": "failure"
        }]
    }]
}

3) Разобрать response2 -> "subBuilds" -> "state" и пометить сбойные службы красным ???

(обратите внимание, что все сервисы, следующие после сбоя, тоже не работают, поэтому они отсутствуют в response2 -> builds -> subBuilds)

Сценарий GOOGLE SHEET:

function getJenkinsBuilds() {

// get Jenkins Job

var response1 = UrlFetchApp.fetch('http://jenkins.site.com/job/[job_name]/api/json', {
    'method': 'get',
    'muteHttpExceptions': true,
    'headers': {
        'Authorization': 'Basic [token]'
    }
});

// parse response from Jenkins

var data1 = JSON.parse(response1);
var builds = data1['builds'];

// create variables for Google Spreadsheet

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('PULL');
var a1 = sheet.getRange('A1');
var b2 = sheet.getRange('B2');

var rows = [
    [
        'ENV',
        'BUILD',
        'BRANCH',

        'service 1',
        'service 2',
        'service 3'
    ]
];

// go through builds and get each build details - environment, branch, and 3 services deployed

for (var i = builds.length - 1; i >= 0; i--) {
    var number = data1['builds'][i]['number'];

    var response2 = UrlFetchApp.fetch('http://jenkins.site.com/job/[job_name]/' + number + '/api/json', {
        'method': 'get',
        'muteHttpExceptions': true,
        'headers': {
            'Authorization': 'Basic [token]'
        }
    });

    var data2 = JSON.parse(response2);
    var env = data2['actions'][0]['parameters'][0]['value'];
    var branch = data2['actions'][0]['parameters'][1]['value'];

    var service1 = data2['actions'][0]['parameters'][2]['value'];
    var service2 = data2['actions'][0]['parameters'][3]['value'];
    var service3 = data2['actions'][0]['parameters'][4]['value'];

    //save data to table

    if (number > b2.getValue()) {
        sheet.insertRowBefore(b2.getRow());

        rows.push([
            env,
            '=HYPERLINK("http://jenkins.site.com/job/[job_name]/' + number + '","' + number + '")',
            branch,
            service1,
            service2,
            service3
        ]);
        sheet.getRange(a1.getRow(), a1.getColumn(), rows.length, rows[0].length).setValues(rows);
    };
}
};

АКТУАЛЬНЫЙ ЛИСТ GOOGLE:

ENV, BUILD, BRANCH, service1, service2, service3  
envC, 37, branchX, false, true, true  
envB, 36, branchY, false, false, true  
envA, 35, branchX, true, true, false  

ОЖИДАЕМЫЙ ЛИСТ GOOGLE:

failed services should be marked with red,  
where failed services are:
1) response2 -> builds -> subBuilds -> state=failure  
or  
2) which are not listed under subBuilds in response2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...