用Tableau、Python、PostgreSQL和Airflow为Jira建立属于自己的报告工具

785 阅读6分钟

用Tableau、Python、PostgreSQL和Airflow为Jira建立你自己的报告工具

多个团队在同一个Jira服务管理环境中工作。不同的团队、issueetypes和配置增加了快速概览的复杂性。性能仪表板应该是所有人都可以访问的,特别是那些不在Jira中工作的人。因此,我们建立了一个小的解决方法,以创建令人敬畏的仪表盘来跟踪几个团队的工作情况。仪表板将在任何时候自动更新。通过这种方式,上面提到的所有软件产品的优点被结合起来。在我们的简单用例中,tableau仪表板将显示不同团队在一段时间内接收票据的情况。

我对Jira提供给我的报告视图并不满意。对各种内容的评估,如根据文本字段或描述中的个别关键词进行分类,在默认情况下是不可能的。你会比较快地达到系统的极限。由于我是Tableau的忠实粉丝,我想通过这种方式来解决这个问题,可惜直接链接是不可能的。这就是为什么我需要在这中间有一些其他的工具,以这样的方式来获得数据,以便我可以开始。最后的解决方案相对简单,即使它看起来是一个漫长的旅程。我很乐意给你介绍一下我是如何处理这个问题的,以及我是如何得出这个解决方案的。

你的团队是在Jira或Jira服务管理中工作?

Jira是一个用于计划、跟踪和管理你的敏捷和软件开发项目的软件。越来越多的Jira被用于经典的工程和开发项目中,以提高透明度,概述主题,并在团队成员中转移工作。我们的目的是创建一个概览,它不仅可以在不同的项目中发挥作用,还可以结合各个领域的内容,从而进行总体评价。标准的仪表盘视图很快就过时了。我对这些插件也不满意。

设置PostgreSQL来存储数据

PostgreSQL是一个极端强大的、开源的对象关系型数据库。在这种情况下,该数据库被用来存储Jira系统中的相关数据,以使tableau能够访问这些数据。对于我们的用例来说,一个有三列的表就足够了(Issue-Key,创建日期和项目)。问题关键将是 "id列",用于检查问题是否已经存在于数据库中。这很有用,因为每个密钥在Jira中只发出一次。关键列 _(ticketkey)和两个信息列(createdat,project)_都是 "字符变化 "的数据类型,因为问题关键和项目都可以由整数和字符串组成。

用Python将数据从Jira转移到数据库中

Python脚本可以用来通过Jira的rest API将数据传输到数据库中。关于如何查询Jira信息并将收集的数据写入数据库的代码示例,请查看我的代码。Github.以下是安排代码所需的导入,托管在airflow上。

import airflow

必须设置Postgres和Jira的连接,以后会在脚本中使用。Airflow需要知道如何连接到环境。Jira API和Postgres数据库的主机名、端口、登录名和密码等信息在用户界面的Admin->Connections部分处理。然后,python代码将引用连接对象的 "conn_id"。

jira_conn = JiraHook(“atc_sd_jira”).get_conn() 

现在这两个连接已经实现了,Jira中的票据可以被查询,并且建立了postgres连接以将这些信息写入其中。通过JQL(Jira查询语言),你可以定义你要查询的问题。有关信息,请阅读这个关于JQL的很酷的博客:搜索Jira的最灵活的方法

jql = “project in <project_name>\ 
issues = atc_conn.search_issues(jql,startAt=0, maxResults=0) 
results logging.info(‘Found Tickets for JQL: ‘ + str(issues.total))

为了逐个问题生成信息,设置了一个for循环来接收每个问题的字段值。现在执行的SQL试图插入这些值,如果有冲突(键已经存在),它会更新键列以外的字段(例如 "createdat"和 "project"列)。

for issue in issues:
Ticket_Key = issue.key
# SQL to insert new tickets and update the existing ones
cursor = conn.cursor()
              ON CONFLICT(ticketkey) DO UPDATE

请确保将您的更改提交给PostgreSQL,并通过以下命令关闭您的Postgres连接。

conn.commit() cursor.close() conn.close()

用Tableau准备数据

Tableau是一个可视化的分析平台,可以充分利用他们的数据。现在所有的数据都已经转移到数据库并保存起来。数据只有在能够被理解的情况下才是有用的。在我们的用例中,应该显示不同的团队/Jira-项目如何在一段时间内收到票据(X轴)。首先,必须建立与已创建的、现在已填充的数据库的连接。因此要确保已经安装了tableaupostgres连接器。启动Tableau,在连接下,选择PostgreSQL。然后填写相关信息,如服务器、端口、数据库(名称)和你的认证类型。

对于这个用例,只需建立一个有一列的小线图。DATETRUNC('day', [Createdat]) 和一个行。RUNNING_SUM(COUNT([Ticketkey]))如 果有必要,可以添加过滤器。

获取一段时间内创建的票据的计数总和

用颜色标记不同的项目,并在图中突出项目名称,在图中已经基本完成。通过这些设置,我们现在已经创建了以下图表。这当然可以根据需要进行扩展,但反映了我们的用例所需的一切。

项目A-C在一段时间内创建的问题

额外的工作簿可以被推送到服务器上,以使同事们能够访问它。因此,看一下tableau的文档,如何用简单的步骤发布你的工作簿

用Airflow刷新数据库

为了完成整个项目,我想简单介绍一下Airflow。为了在一个给定的时间表中更新数据库,Airflow被用来触发python脚本来更新数据库。我们使用Airflow来编写工作流程,作为任务的有向无环图(DAG)。Airflow调度器在一个工人阵列上执行python脚本,同时遵循指定的依赖关系。关于Airflow的更多信息,请看官方的Apache Airflow文档

上传代码后,请确保在管理区设置连接,就像我上面提到的那样。通过每周的数据更新,我们已经创建了一个有活力的、持续更新的仪表盘。

总结

虽然这个实现在创建链中有一些工具,但这个实现在展示和评估方面提供了很大的自由度。对我来说,这也是第一次测试,也是第一次成功的实施,但是一旦我把它放上去,我就可以反复重建,覆盖每一个应用。我希望我可以给你激励和第一个必要的基本信息来实现这个用例。