Apache DolphinScheduler Issue 撰写指南:从标题规范到模板化流程的完整贡献实践
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
在 Apache DolphinScheduler 社区中,Issue 是追踪 Feature、Bug 与改进任务的核心机制,也是从"提出想法"走向"代码合入"的第一道关口。本文基于仓库中的官方文档 Issue Notice 展开,系统讲解 Issue 的标题命名规范、模块名划分、仓库内真实的 Issue 模板定义(.github/ISSUE_TEMPLATE目录),以及贡献者在实现 Issue 前必须遵循的"先评审、后编码"流程。读完本文,你可以规范地为 DolphinScheduler 提交 Feature 请求、Bug 报告与改进建议,并理解社区如何组织、指派和推进这些 Issue。
Issue 在贡献流程中的定位
官方文档在 Preface 部分明确了 Issue 的三重角色:
- 任务追踪:Issues 用于追踪各类 Feature、Bug 与功能点,项目维护者通过 Issue 组织待完成的任务;
- 方案讨论场所:一个 Issue 中可以讨论的内容不限于功能本身,还包括 Bug 的成因分析、前期方案调研、实现设计与代码思路;
- PR 的前置审批:只有当 Issue 被 approve 之后,才需要对应的 Pull Request 去实现。
第 3 点是理解 DolphinScheduler 贡献体系的关键。这一流程定位可以从 参与贡献指南 中得到印证:该文档将代码贡献路径拆分为"Submit Guide-Issue Notice → Pull Request Notice → Commit Message Notice"三步,并把 Issue 须知 列为代码贡献的第一份必读文档。配套的 Pull Request Notice 进一步解释了这种分工的原因——PR 阶段原则上不再讨论代码实现方案(实现方案应在 Issue 中定稿),PR 评审只聚焦代码格式与规范,从而避免评审阶段因实现思路分歧而浪费时间。
对于对应大型 Feature 的 Issue,文档给出了一条明确建议:按功能模块等维度拆分成多个小的 Issue 逐一完成。在 DolphinScheduler 中,这类"需要正式设计方案"的大特性通常还会走 DSIP(DolphinScheduler Improvement Proposal)流程,其模板即 DSIP 模板,流程说明见 DSIP 文档。
Issue 标题规范:[类型][模块] 描述
文档规定的标题格式为:
[`Issue Type`][`Module Name`] `Issue Description`即标题由三部分构成:方括号包裹的Issue 类型、方括号包裹的模块名,以及空格后的Issue 描述。这样设计的目的是让维护者仅凭标题即可判断问题的性质与归属模块,为后续打标签、指派和归档提供依据。
Issue 类型:五类及其含义
| Issue 类型 | 含义 | 文档示例 |
|---|---|---|
| Feature | 期望的新功能和新特性 | [Feature][api] Add xxx api in xxx controller |
| Bug | 程序中存在的缺陷 | [Bug][api] Throw exception when xxx |
| Improvement | 对现有程序的改进,不限于代码格式、性能优化等 | [Improvement][server] Improve xxx between Master and Worker |
| Test | 专门针对测试用例的补充与完善 | [Test][server] Add xxx e2e test |
| Sub-Task | Feature 类的子任务,用于将大 Feature 拆分后逐项完成 | [Sub-Task][server] Implement xxx in xxx |
值得注意的是,Test与Sub-Task两个类型的存在直接呼应了文档的另外两条主张:测试完善是一类独立的贡献方向(仓库中设有专门的 E2E 测试模块 与 API 测试模块 api-test);大 Feature 应拆分为多个 Sub-Task 逐一落地。
模块名规范与仓库目录的对应关系
文档给出的模块名(Module Name)共 10 项:alert、api、service、dao、plugin、remote、server、ui、docs-zh、docs,并预留了"待补充"的扩展位。结合当前仓库的顶层目录结构,可以直观地理解每个模块名指向的代码范围:
| 模块名 | 文档定义 | 对应仓库目录(从源码结构看) |
|---|---|---|
alert | 报警模块 | dolphinscheduler-alert/ |
api | 应用接口层模块 | dolphinscheduler-api/ |
service | 应用服务层模块 | dolphinscheduler-service/ |
dao | 数据访问层模块 | dolphinscheduler-dao/ |
plugin | 插件模块 | dolphinscheduler-task-plugin/、dolphinscheduler-datasource-plugin/、dolphinscheduler-storage-plugin/ 等插件族 |
remote | 通信模块 | 当前仓库中不再存在独立的 remote 目录,从源码结构看,可推断此类 Issue 多指向任务 gRPC 通信相关代码(dolphinscheduler-task-grpc/) |
server | 服务器模块 | dolphinscheduler-master/、dolphinscheduler-worker/、dolphinscheduler-alert-server/、dolphinscheduler-standalone-server/ |
ui | 前端模块 | dolphinscheduler-ui/ |
docs-zh | 中文文档 | docs/docs/zh/ |
docs | 英文文档 | docs/docs/en/ |
例如,一个修改 Master 与 Worker 之间心跳逻辑的性能优化 Issue,按规范应命名为[Improvement][server] Improve xxx between Master and Worker——这正是文档 Improvement 一行给出的官方示例。
Issue 内容模板:仓库中的真实表单定义
Issue 须知 将内容模板指向了仓库中的 ISSUE_TEMPLATE 目录。该目录下的 YAML 文件就是维护者实际维护的结构化表单,逐一解析这些模板,比只看标题规范更能掌握"一个合格的 Issue 需要写什么"。
空白 Issue 已禁用:先选模板,再提问
config.yml 中设置了:
blank_issues_enabled: false contact_links: - name: Ask a question or get support url: https://github.com/apache/dolphinscheduler/discussions/ about: Ask a question or request support for using Apache DolphinScheduler这意味着仓库禁止提交无模板的空白 Issue:想提问或寻求使用支持的用户会被引导到 Discussions 区。只有确定是 Bug、Feature、改进或文档问题时,才进入正式 Issue 流程——这与 Issue 文档"只有 approve 后的 Issue 才有 PR"的审批思路一脉相承,从入口上过滤掉非任务型内容。
Bug 报告模板:可复现是硬性要求
bug-report.yml 预置的标题格式为"[Bug] [Module Name] Bug title",自动打上bug、Waiting for reply标签。正文包含以下必填项:
| 表单项 | 说明与要求 |
|---|---|
| Search before asking | 勾选确认已在 Issue 列表中搜索,未发现同类问题(强制勾选) |
| What happened | 描述问题发生的上下文与现象(必填文本) |
| What you expected to happen | 说明为什么认为该行为是错的;模板明确建议粘贴日志文本而非截图,便于后续检索(必填) |
| How to reproduce | 最小化、可精确复现的步骤;模板中警告"无法复现的 Issue 会被关闭",并建议先开 Discussion(必填) |
| Anything else | 发生频率、相关日志等补充信息,长日志可折叠展示 |
| Version | 版本下拉框,当前提供的选项为dev、3.3.0-alpha、3.3.1、3.3.2、3.4.0、3.4.1、3.4.2;模板说明仅接受 LTS 项目的 Bug 报告(见 bug-report.yml 版本字段) |
| Are you willing to submit PR? | 非必填,但欢迎贡献者顺手修复 |
| Code of Conduct | 同意遵守代码行为准则(强制勾选) |
对照 Issue 文档中"高质量 Bug"的要求——清晰标题、复现步骤、预期与实际表现、版本信息、优先级——可以看到 YAML 模板正是把这些软性要求固化成了强制表单字段,这是文档"提交前先在 Issue 列表查重、尽量提供完整重现步骤"两条建议的落地形式。
Feature 请求模板:聚焦用例而非实现
feature-request.yml 预置标题为"[Feature][Module Name] Feature title",核心字段为:
- Description:功能的简短描述;
- Use case:模板提示"描述你想达成什么,而不是告诉维护者你打算如何实现"——这与 Issue 文档"先讨论方案再实现"的流程定位一致,把设计讨论留在 Issue 阶段;
- Related issues:关联的其他 Issue;
- 以及同样的搜索去重确认、PR 意愿勾选与行为准则勾选。
其他三类模板
| 模板文件 | 预置标题 | 适用场景 |
|---|---|---|
| improvement-report.yml | [Improvement][Module Name] Improvement title | 现有程序的改进建议(代码、性能等) |
| document.yml | [Doc][Module Name] Documentation bug or improvement | 文档勘误与改进,需附文档链接 |
| dsip-request.yml | [DSIP-][Module Name] DSIP title | 需要正式设计评审的大特性,要求填写 Motivation、Design Detail、兼容性/弃用/迁移计划、Test Plan |
其中 DSIP 模板是"大 Feature 拆分与正式设计"流程的载体:如果一项改动涉及接口设计、数据库变更或兼容性迁移,应通过 DSIP 模板提交完整设计,而不是直接开普通 Feature Issue。
贡献者工作流:先评审,后实现
Issue 须知 的 Contributor 章节规定了一条"前置评审"纪律:
除特殊情况外,在完成 Issue 之前,建议先在 Issue 下或邮件列表中讨论并确定设计方案、代码实现思路。如果存在多种不同方案,建议通过邮件列表或 Issue 下投票决定;最终方案与代码实现思路被 approve 之后,再去实现。
这样做的主要目的,文档说得很直白:避免在 Pull Request 评审阶段因实现思路分歧或需要重构而浪费时间。结合仓库中的相邻文档,完整的协作链路是:
- 提交 Issue(按标题规范命名,按模板填写内容);
- 在 Issue 下与社区讨论方案,必要时发起投票,维护者 approve 方案;
- 认领时在 Issue 下回复(参与贡献指南 建议回复认领、设定提交期限,并向核心贡献者寻求指导);
- 新建分支开发,分支命名与 PR 标题遵循 Pull Request Notice 的规范——PR 类型与 Issue 类型一一映射,例如 Issue 类型
Bug对应 PR 类型Fix(如[Fix-3333][ui] Fix xxx),Issue 编号会显式写入 PR 标题; - 提交 PR,评审聚焦代码格式与规范,实现争议已在 Issue 阶段消化完毕。
这套"双段式"评审(Issue 审方案、PR 审代码)是大型特性尤其值得遵循的:它把最贵的人力(评审)花在了决策正确性上,而不是事后返工上。
用户不知道 Issue 属于哪个模块怎么办?
Issue 须知 的 Question 章节专门回答了这个高频场景:大多数提 Issue 的用户并不清楚问题归属哪个模块,这在开源社区中非常常见。官方给出的处理方式是:
- 提出 Issue 的用户不确定模块时,不必纠结;
- committer / contributor 通常清楚 Issue 影响的模块;
- 若该 Issue 被 approve 后确认有价值,committer 可以直接按涉及的具体模块修改 Issue 标题,或者留言请提交者自行修改为对应标题。
仓库中的 CODEOWNERS 文件印证了这种"模块—维护者"映射机制确实存在:其中逐目录声明了各模块的负责人,例如/dolphinscheduler-alert/对应报警模块维护者,/dolphinscheduler-dao/、/dolphinscheduler-dao-plugin/对应数据访问层维护者,/docs/对应文档维护者,/dolphinscheduler-master/、/dolphinscheduler-worker/对应服务器模块维护者。因此当 Issue 标题中的模块名被修正后,PR 阶段也会经由 CODEOWNERS 自动路由到正确的评审人。对贡献者而言,这条机制降低了"猜错模块名"的心理门槛:标题写得不精确没有关系,社区会在审批过程中修正。
实操自查清单
提交 DolphinScheduler Issue 前,可以对照以下清单快速自查:
- 标题:是否遵循
[Issue Type][Module Name] Description格式,类型取自 Feature / Bug / Improvement / Test / Sub-Task 五类,模块名取自 alert、api、service、dao、plugin、remote、server、ui、docs-zh、docs; - 模板:是否选择了正确的 YAML 模板(Bug / Feature / Improvement / Doc / DSIP),而非空白 Issue;
- 查重:是否已搜索现有 Issue,确认没有重复报告或重复提案;
- 可复现性(Bug 类):是否提供了最小化复现步骤、预期与实际表现、版本信息;
- 规模(Feature 类):大特性是否已考虑拆分为多个 Sub-Task,涉及接口/数据库/兼容性的改动是否应走 DSIP 模板;
- 流程(贡献者):是否先在 Issue 或邮件列表完成方案讨论并获得 approve,再动手写代码。
遵循这份规范,你的 Issue 不仅能被社区快速分类与认领,也为后续"方案评审 → 分支开发 → PR 合入"的完整贡献链路打下基础。
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考