使用-DataHub-动作将-DataHub-集成到-Jira-实用指南
使用 DataHub 动作将 DataHub 集成到 Jira:实用指南
原文:
towardsdatascience.com/integrating-datahub-into-jira-a-practical-guide-using-datahub-actions/
希望这篇文章可以作为如何将 DataHub 事件集成到您特定 Jira 流程中的通用模板。
目录
-
什么是 DataHub?
-
什么是 DataHub 动作?
-
开发自定义 Jira 动作
-
YAML 配置
-
定义我们的自定义动作类
-
运行我们的动作
-
-
总结
-
来源
什么是 DataHub?
DataHub 是一个支持数据发现、治理和 元数据 管理的数据目录。它提供了允许组织实现自己的 数据网格 的功能——一种分权的数据管理方法,使各个业务领域能够主动管理自己的数据质量/需求。
如 DataHub 这样的元数据平台因各种原因而极具价值:
-
跨领域数据发现和分析——数据消费者(例如:数据分析师/科学家)可以使用 DataHub 探索他们可以用于分析的相关数据集。为了帮助数据消费者理解跨各个领域的数据,每个领域都需要通过足够的业务背景来丰富他们的数据资产。
-
数据治理 ——DataHub 允许组织建立数据单一来源的真相,通过在数据资产上实施访问策略来加强安全性,并通过支持数据分类来确保合规性。
什么是 DataHub 动作?
在一个数据成熟的组织中,元数据始终在演变。因此,组织对元数据变化做出实时反应非常重要。
-
该框架允许您根据 DataHub 中发生的事件指定配置以触发某些动作。
-
常见用例可能包括在数据集发生变化时通知相关方,将元数据更改集成到组织工作流程中等。
DataHub 动作框架的常见用例之一是将元数据更改集成到组织特定的通知中。DataHub 为此提供了对某些第三方平台的原生支持,例如Slack和Teams。
在本文中,我们将探讨如何使用动作框架将 DataHub 元数据更改集成到 Jira 工作流程中。具体来说,我们将实现一个自定义动作,在创建新的data product时创建 Jira 工单。然而,这里的配置和代码可以很容易地修改,以触发其他 DataHub 事件的 Jira 工作流程。
开发自定义 Jira 动作
每个 DataHub 动作都在一个单独的pipeline中运行,这是一个持续运行的过程,重复以下步骤:从相关源轮询事件数据,对这些事件应用转换/过滤,并执行所需的动作。
-
我们可以通过 YAML 定义我们的动作管道配置。
-
我们可以通过扩展 DataHub 的基Action 类来定义执行自定义动作的逻辑。
让我们逐一了解这两个步骤。
YAML 配置
我们的 YAML 配置需要指定 4 个关键方面:
-
动作管道名称(应该是唯一的且静态的)
-
事件源配置
-
转换 + 过滤配置
-
动作配置
DataHub 动作有两种可能的事件源:
Kafka 是该框架的默认事件源。除非您使用的是 DataHub Cloud v0.3.7 以上的实例,否则您将处理来自 Kafka 的事件数据。
Kafka 事件源会发出两种类型的事件:
由于我们正在监听数据产品的创建,并且实体变更事件的 数据结构更容易处理,我们将过滤实体变更事件。
这是我们 YAML 文件的样子(jira_action.yaml)。
# jira_action.yaml
# 1\. Action Pipeline Name
# This may be whatever you like as long as it's unique.
name: "jira_action"
# 2\. Event Source - Where to source event data from.
# Kafka is the default event source (https://docs.datahub.com/docs/actions/sources/kafka-event-source).
source:
type: "kafka"
config:
connection:
bootstrap: ${KAFKA_BOOTSTRAP_SERVER:-localhost:9092}
schema_registry_url: ${SCHEMA_REGISTRY_URL:-http://localhost:8081}
# 3\. Filter - Filter events that reach the Action
# We'll listen for Data Product CREATE events.
# For more information about other events: https://docs.datahub.com/docs/actions/events/entity-change-event#entity-create-event
filter:
event_type: "EntityChangeEvent_v1"
event:
entityType: "dataProduct"
category: "LIFECYCLE"
operation: "CREATE"
# 4\. Action - What action to take on events.
# Here, we'll reference our custom Action file (jira_action.py).
action:
type: "jira_action:JiraAction"
config:
# Action-specific configs (map)
定义我们的自定义操作类
接下来,我们需要在自定义操作类中实现创建 Jira 工单的逻辑,我们将在单独的jira_action.py文件中定义它。
我们的操作类将扩展 DataHub 的基本操作类,它包括重写以下方法:
-
create()—在实例化操作时被调用。如果您在 YAML 文件中指定了任何特定于操作的配置,此方法将把这个配置作为字典传递给此操作的每个实例。 -
act()—当接收到事件时被调用。此方法将包含我们操作的核心逻辑,即创建 Jira 工单。 -
close()—当我们的操作管道关闭时被调用。
由于我们没有指定任何特定于操作配置,并且一旦我们的操作终止,我们不需要担心任何特殊的清理工作,我们的工作将主要涉及重写act()。
我们将使用Python Jira,它是围绕 Jira REST API 的 Python 包装器,以编程方式与我们的 Jira 实例交互。有关如何以编程方式与 Jira 交互的更多信息/示例,请查看文档。
这是我们代码的样子。
# jira_action.py
from datahub_actions.action.action import Action
from datahub_actions.event.event_envelope import EventEnvelope
from datahub_actions.event.event import Event
from datahub_actions.pipeline.pipeline_context import PipelineContext
from jira import JIRA
class JiraAction(Action):
@classmethod
def create(cls, config_dict: dict, ctx: PipelineContext) -> "Action":
"""
Shares any action-specific config across all instances of the action.
"""
return cls(ctx, config_dict)
def __init__(self, ctx: PipelineContext, config_dict: dict):
self.ctx = ctx
self.config = config_dict
def act(self, event: EventEnvelope) -> None:
"""
Create a Jira ticket when a data product is created in DataHub with its DataHub link.
We'll use the Python Jira API to programmatically interact with Jira (https://jira.readthedocs.io/index.html).
"""
event_object = event.event
entity_urn = event_object.entityUrn
# Extract DataHub link for data product
DATAHUB_DOMAIN = "http://localhost:9002/" # replace with link to your DataHub instance
data_product_link = f"{DATAHUB_DOMAIN}{entity_urn}"
# Authenticate into your Jira instance (https://jira.readthedocs.io/examples.html#authentication).
jira = JIRA(
token_auth="API token", # Self-Hosted Jira (e.g. Server): the PAT token
# basic_auth=("email", "API token"), # Jira Cloud: a username/token tuple
# basic_auth=("admin", "admin"), # a username/password tuple [Not recommended]
# auth=("admin", "admin"), # a username/password tuple for cookie auth [Not recommended]
)
# Create Jira issue (https://jira.readthedocs.io/examples.html#issues).
# For more info about the attributes you can specify in a Jira Issue,
# check out the Issue class (https://github.com/pycontribs/jira/blob/main/jira/resources.py)
issue_dict = {
'project': {}, # JIRA project to create issue under in dict form (ex: {'id': 123})
'summary': 'New Data Product',
'description': f'Data Product Link: {data_product_link}',
'issuetype': {}, # define issue type in dict form (ex: {'name': 'Bug'})
'reporter': '',
'assignee': ''
}
jira.create_issue(fields=issue_dict)
def close(self) -> None:
"""
Cleanup any processes happening inside the Action.
"""
pass
虽然这里的配置和代码是针对数据产品创建事件特定的,但它们可以被修改以将其他 DataHub 事件集成到 Jira 工作流程中,例如添加/删除标签、术语、域、所有者等。
-
您可以在这里找到不同实体变更事件的列表。
-
监听这些事件将涉及在 YAML 中更改 Filter 配置为特定实体变更事件的字段值。
例如,为了在数据集上创建一个Jira 工单,我们会在 YAML 中的 Filter 配置中做如下更新:
filter:
event_type: "EntityChangeEvent_v1"
event:
entityType: "dataset"
category: "TAG"
operation: "ADD"
运行我们的操作
现在我们已经创建了我们的操作配置和实现,我们可以通过将这些两个文件(jira_action.yaml和jira_action.py)放置在我们的 DataHub 实例相同的 python 运行时环境中来运行此操作。
然后,我们可以使用以下命令通过 CLI 运行我们的操作:
datahub actions -c jira_action.yaml
想要了解更多关于开发/运行自定义操作的信息,请查看文档。
总结
感谢阅读!为了简要回顾一下我们讨论的内容:
-
DataHub 是一个数据目录,它促进了高效的数据发现、管理和治理。
-
DataHub 提供自己的操作框架,以实时将元数据更改集成到组织工作流程中。
-
使用该框架,我们可以通过简单地定义 YAML 中的动作管道和自定义 Python 类中的实现逻辑来编写自己的动作,以便将 DataHub 事件集成到 Jira 工作流程中。
如果您在使用 DataHub 动作实现实时数据治理方面有任何其他想法/经验,我非常愿意在评论中听到!
来源
DataHub 动作:
Python Jira:

浙公网安备 33010602011771号