api - 如何将数据从 Jenkins API 提取到 Google Sheet
问题描述
我想使用 Google Sheet Script 通过 Jenkins API 检索数据并将其存储在 Google Sheet
1) 使用 Jenkins API 将 Jenkins Job Builds 拉到 Google Sheet -完成
2) 将数据存储到 Google Sheet ???
(只需要“builds.subBuilds.buildNumber”和“builds.subBuilds.duration”值)
(需要纠正脚本中的错误)
function getJenkinsBuilds() {
// get the jenkins job
var response = UrlFetchApp.fetch('http://jenkins.[domain].co/job/Build+Deploy/api/json', {
'method': 'get',
'muteHttpExceptions' : true,
'headers' : {'Authorization' : 'Basic [tokan]'},
});
// parse the json reply and return builds
var data = JSON.parse(response);
var builds = data["builds"];
Logger.log(builds);
return builds;
};
// store predefined parameters from builds in the spreadsheet
function setDataToTable() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Jenkins');
var cell = sheet.getRange("A1");
var rows = [['buildNumber','duration'],['','']]; // I GUESS THE MISTAKE IS HERE?
sheet.getRange(cell.getRow(), cell.getColumn(), rows.length, rows[0].length).setValues(rows);
}
实际结果:
Log shows retrieved array with Builds objects, i.e.:
[19-10-10 16:18:16:937 AEDT] [{number=2081, subBuilds=[{jobName=...
'Jenkins' spreadsheet is empty.
预期结果:
Store "builds.subBuilds.buildNumber" and "builds.subBuilds.duration" values
in the Google Sheet ('Jenkins' spreadsheet), i.e.:
buildNumber duration
123 15sec
456 16sec
... ...
解决方案
我能够使其以以下方式工作:
function getJenkinsBuilds()
{
// get jenkins builds
var response = UrlFetchApp.fetch('http://jenkins.[domain].co/job/Build+Deploy/api/json', {
'method': 'get',
'muteHttpExceptions' : true,
'headers' : {'Authorization' : 'Basic [token]'}
});
// parse the json reply
var data = JSON.parse(response);
var builds = data["builds"];
var number = data['builds'][0]['number'];
var url = data['builds'][0]['url'];
Logger.log(number);
Logger.log(url);
// fill in the spreadsheet with data
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Jenkins');
var cell = sheet.getRange('A1');
var rows = [['BUILD']];
for (var i = 0; i < builds.length; i++)
{
var number = data['builds'][i]['number'];
var url = data['builds'][i]['url'];
rows.push(['=HYPERLINK("'+url+'","'+number+'")']);
Logger.log(number);
Logger.log(url);
sheet.getRange(cell.getRow(), cell.getColumn(), rows.length, rows[0].length).setValues(rows);
}
};
推荐阅读
- debugging - z390 断点、文件、parmfield
- c++ - struct timespec 可以重复用于 nanosleep 吗?
- python-3.x - 通过 Python 中的相似值合并两个嵌套字典列表
- c++ - 对类的未定义引用,常见答案尚未解决
- android - 使用 4 个数字的 Android 插值器
- python - 为什么 line != "\n" or line != "\r\n" or line !="\r" 不能过滤空行?
- buildroot - Buildroot 可以在不构建 Linux 内核的情况下构建根文件系统吗?
- python - 为什么字典在python中不按插入顺序返回键?
- yocto - 如何在 yocto 中启用 dbus-X11
- c# - Xamarin Forms - 如何在 ListView 中显示/绑定列表?