You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Apps Script调用JIRA Rest API向谷歌表格写入数据无输出排查

问题排查与修复方案

核心问题定位

  1. JQL语法错误:查询语句末尾多了一个多余的右括号),导致Jira无法解析该查询,返回空结果或错误响应。
  2. 缺失需求关键条件:原JQL没有筛选“15天未更新”的Bug,完全不符合核心需求。
  3. 调试手段缺失:脚本无任何日志输出,即使请求失败或返回空数据,也无法获取有效排查信息。
  4. 表头匹配风险:如果表格第一行的表头(如Issue Summary、Component/s)与代码中定义的键名存在大小写、空格差异,会导致数据匹配失败,最终写入空值。

修复后的完整代码

function getJiraIssues() {
  var username = "<my_jira_username>";
  var apiToken = "<my_jira_password>";
  // 修正JQL:移除多余括号,添加15天未更新的过滤条件
  var jqlQuery = "project=xyz AND issuetype = Bug AND updated <= '-15d'";

  var sheet = SpreadsheetApp.getActiveSheet();
  var headers = sheet.getRange(1, 1, 1, 8).getValues()[0];

  var options = {
    'method': 'get',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Basic ' + Utilities.base64Encode(username + ':' + apiToken)
    },
    // 临时注释这行,便于捕获HTTP异常
    // 'muteHttpExceptions': true
  };

  var url = 'https://<my_jira_instance>.jira.com/rest/api/2/search?jql=' + encodeURIComponent(jqlQuery);

  try {
    var response = UrlFetchApp.fetch(url, options);
    Logger.log('Jira响应状态码: ' + response.getResponseCode());
    
    if (response.getResponseCode() === 200) {
      var data = JSON.parse(response.getContentText());
      Logger.log('Jira返回问题总数: ' + data.total);

      var issues = data.issues.map(function(issue) {
        var issueData = {};

        issueData['Issue Summary'] = issue.fields.summary;
        issueData['Assignee'] = issue.fields.assignee ? issue.fields.assignee.displayName : '';
        issueData['Issue Key'] = issue.key;
        issueData['Issue Type'] = issue.fields.issuetype.name;
        issueData['Component/s'] = issue.fields.components.map(function(component) {
          return component.name;
        }).join(', ');
        issueData['Status'] = issue.fields.status.name;
        issueData['Created'] = issue.fields.created;
        issueData['Updated'] = issue.fields.updated;

        return issueData;
      });

      Logger.log('处理后待写入问题数量: ' + issues.length);

      if (issues.length > 0) {
        var row = sheet.getLastRow() + 1;
        var numRows = issues.length;
        var numCols = headers.length;

        sheet.getRange(row, 1, numRows, numCols).setValues(issues.map(function(issue) {
          return headers.map(function(header) {
            return issue[header] || ''; // 处理表头不匹配时的空值
          });
        }));
      } else {
        Logger.log('未找到符合条件的Bug');
      }
    } else {
      Logger.log('Jira请求失败,响应内容: ' + response.getContentText());
    }
  } catch (e) {
    Logger.log('请求异常: ' + e.toString());
  }
}

额外排查建议

  • 验证JQL有效性:手动在Jira搜索框中执行修正后的JQL,确认能返回预期的15天未更新Bug。
  • 检查表头一致性:核对表格第一行的表头与代码中issueData的键名完全一致(包括空格、大小写)。
  • 查看执行日志:脚本执行后,通过「查看 > 日志」查看输出信息,定位请求或数据处理环节的问题。
  • 确认权限与凭据:确保Jira的API Token有效,且Google Apps Script已获得UrlFetchApp的授权。

内容的提问来源于stack exchange,提问作者Jeff A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:29:59