如果您使用的是 Jira,您就会知道如何处理数十张(如果不是数百张)票证。通知堆积如山,跟踪每张新票变得复杂,至少可以这么说。生成报告并为不每天使用 Jira 的人提供持续可见性也是一个很大的痛苦。

好吧,如果您的公司使用 Google 表格进行报告和跟踪,您可以将 Jira 集成到其中并进行设置,以便在创建新的 Jira 票证时,它会自动更新 Google 电子表格。现在,您所有的 Jira 票据都将放在一个易于查看的电子表格中,您可以在一个地方管理它们!

如何?只需使用Reshuffle连接器即可轻松创建集成。

在本文中,您将学习如何构建 Jira 到 Google 电子表格的集成,让人们使用他们已经熟悉的界面跟踪 Jira 工单。

让我们建造它

Reshuffle 使构建完成复杂任务的集成变得容易,因此您可以为企业和客户提供独特的体验和成果。

Reshuffle 是一个开源、轻量级和事件驱动的框架,可帮助您集成服务——这些集成和工作流是在 Reshuffle 应用程序中创建的。让您与这些服务交互的对象称为连接器。

在此示例中,您将看到一种在 Jira 和 Google 表格之间创建双向同步的简单方法。在 Jira 上创建的新问题将在电子表格中添加一个新行,其中包含来自 Jira 问题的基本字段。反过来,来自 Google 电子表格的更新也会更新 Jira 端的问题。

查看完整文档的链接:

  • [Atlassian Jira 连接器

  • 谷歌表格连接器

让我们从实例化 Reshuffle 应用程序和上面列出的两个连接器开始。

const app = new Reshuffle();
// Jira Config
const jira = new JiraConnector(app, {
  host: process.env.JIRA_HOST,
  protocol: process.env.JIRA_PROTOCOL, // 'http' or 'https'
  username: process.env.JIRA_USERNAME, // username or email
  password: process.env.JIRA_TOKEN,
  baseURL: process.env.RUNTIME_BASE_URL,
});

// Google Sheets Config
const googleSheets = new GoogleSheetsConnector(app, {
  credentials: {
    client_email: process.env.GOOGLE_CLIENT_EMAIL,
    private_key: process.env.GOOGLE_PRIVATE_KEY.replace(/\\n/g, "\n"),
  },
  sheetsId: process.env.GOOGLE_SHEET_ID,
});

进入全屏模式 退出全屏模式

现在我们已经配置了连接器,我们需要使用连接器 on() 方法定义我们想要监听的事件。对于 Jira,我们将倾听创建的任何新问题。我们将提取问题的 id、摘要、描述和状态。然后,我们将使用 Google 表格连接器将这些字段添加到我们的电子表格中。

jira.on({ jiraEvent: "jira:issue_created" }, async (event, app) => {
  //Extract Jira fields from event
  const {
    id,
    fields: {
      summary,
      description,
      status: { name },
    },
  } = event.issue;

  //Use google sheets connector to add these fields as a row in the spreadsheet
  const sheetId = 0;
  const values = [
    id,
    summary,
    description,
    name,
    event.issue.fields.assignee
      ? event.issue.fields.assignee.displayName
      : "Not Assigned",
  ];
  await googleSheets.addRow(sheetId, values);
});

进入全屏模式 退出全屏模式

JiraGif

下一步是将这个示例变成双向同步。为此,我们将设置第二个事件以使用 Google 表格连接器进行监听。连接器将监听对电子表格所做的更改并允许我们处理它们。

请注意空的{},无需为其提供选项,但请参阅文档了解所有可用选项。

在处理程序内部,我们将只处理对现有行所做的更改。我们可以提取前一行和当前行输入,以便稍后进行比较。

googleSheets.on({}, async (event, app) => {
  if (event.worksheetsChanged[0] && event.worksheetsChanged[0].rowsChanged[0]) {

    const { curr, prev } = event.worksheetsChanged[0].rowsChanged[0];

   //additional code to follow

  }

});

进入全屏模式 退出全屏模式

为了跟踪更改,我们使用一个对象来存储摘要和描述字段。更新状态字段需要做更多的工作,因此我们需要使用单独的 Jira 连接器操作来查找转换 ID。

// continuing from the code above
let updates = { fields: {} };
// Find transition Ids
let transitionId = {};
const { transitions } = await jira.sdk().listTransitions(curr["Issue ID"]);
for (const status of transitions) {
  if (!transitionId[status.name]) {
    transitionId[status.name] = status.id;
  }
}
// additional code to follow

进入全屏模式 退出全屏模式

我们现在可以遍历输入并通过比较值来检查是否有任何变化。

for (const key in prev) {
  //skipping assignee and issue id fields in this example
  if (prev[key] !== curr[key]) {
    if (key === "Assignee" || key === "Issue ID") {
      continue;
    }
    if (curr[key] in transitionId) {
      transitionId = { id: transitionId[curr[key]] };
      await jira.sdk().transitionIssue(curr["Issue ID"], {
        transition: {
          id: transitionId.id,
        },
      });
    } else {
      updates = {
        fields: { ...updates.fields, [[key.toLowerCase()]]: curr[key] },
      };
    }
  }
}
// updates description/summary field
await jira.sdk().updateIssue(curr["Issue ID"], updates);

进入全屏模式 退出全屏模式

最后,让我们通过启动 Reshuffle App 来启动集成:

app.start();

进入全屏模式 退出全屏模式

看看有多容易?您可以如此快速地完成此操作,并且确实可以更轻松地在 Google 表格中双向跟踪新的 Jira 票证。查看视频演示以查看它的实际效果!

现在,让它发生

随着您的开发人员和项目管理团队体验到使用集成应用程序的便利性,我们鼓励您考虑集成工作流还能在哪些方面使您的团队受益。有了这么多不同的工具,您越能将它们整合到一个通用界面中,人们就越容易完成工作。

Reshuffle 不断倾听客户的需求和愿望。没有看到您想要集成的服务的连接器?向@ReshuffleHQ发送推文,让我们知道您希望我们接下来开发哪个连接器。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐