不用手写 HTTP 请求!Apache DolphinScheduler 命令行 dsctl 两分钟上手

dsctl 是社区维护的第三方 CLI,通过 REST API 操作 Apache DolphinScheduler®。
178601007239866b23c7f6f45544e


点亮⭐️

https://github.com/apache/DolphinScheduler



点击蓝字 关注我们



作者 | 刘小东 全家便利店 算法工程师

dsctl 是社区维护的第三方 CLI,通过 REST API 操作 Apache DolphinScheduler®。工程师、Shell 脚本、CI/CD 和 AI Agent(下文简称 Agent)使用同一套命令。项目采用 Apache License 2.0 开源。

项目地址https://github.com/sketchmind/dolphinscheduler-cli

一、为什么还需要一个CLI


Apache DolphinScheduler 的 Web UI 适合设计、浏览和观察工作流。然而,进入自动化场景后,工程团队还需要:

  • 在发版时批量下线、更新和上线工作流;
  • 把工作流定义放进 Git,让每次改动都能 diff、评审和回滚;
  • 在 CI/CD 中发布工作流,无需自行拼接随版本变化的 HTTP 请求;
  • 在终端和跳板机上定位失败实例、读取日志并执行恢复;
  • 让 AI Agent 操作 DolphinScheduler,同时让调用便于审阅、结果可解析、过程可留存。

而 CLI 可以补上 Web UI 之外的自动化、批量化和可编程能力。

dsctl 的命令覆盖:

  • 资源治理:租户、用户、数据源、资源、环境、Worker Group 和告警;
  • 项目配置:项目、参数、偏好和项目级 Worker Group;
  • 设计与调度:Workflow、Task、Schedule、模板和本地校验;
  • 运行时:Workflow Instance、Task Instance、日志、监控、审计和恢复。

帮助命令还提供了面向 Agent 的导航说明:

term-root-help
178601072473427334a5a89c0f562e5525c9d086e81a5

dsctl 位于调用方和 REST API 之间,负责屏蔽版本差异,并可接入不同的自动化工具。

二、两分钟接入


dsctl 要求 Python 3.11 或更高版本。安装后先用 dsctl version 核对版本:


python -m pip install -U dolphinscheduler-clidsctl version

最直接的配置方式是使用三个环境变量:


export DS_API_URL="https://dolphinscheduler.example.com/dolphinscheduler"export DS_API_TOKEN="..."export DS_VERSION="3.4.1"dsctl doctordsctl project listdsctl workflow list --project etl-prod

DS_VERSION 始终填写服务器的实际精确版本。doctor 会以只读方式检查网络、认证、版本适配和本地上下文。

多集群场景可以用 dotenv 文件切换环境。显式传入 --env-file 后,该文件就是一份独立配置;进程中的 DS_* 变量不会参与补值。文件应包含所需的连接项,未写的可选项使用 dsctl 内置默认值。


dsctl --env-file prod.env workflow list --project etl-proddsctl --env-file staging.env workflow list --project etl-staging

三、Workflow as Code:从Git到上线


dsctl 可以把工作流表达为可读的 YAML。下面是基于 dsctl template workflow --raw 修改后的节选:

任务、命令和依赖关系都能直接进入 Git。创建并上线一条工作流,可以拆成五个显式步骤:

178601102375342d9c9dfb89a004f28541bb70019d514

dsctl template workflow --raw > workflow.yamldsctl lint workflow workflow.yamldsctl workflow create --file workflow.yaml --project etl-prod --dry-rundsctl workflow create --file workflow.yaml --project etl-proddsctl workflow online example-workflow --project etl-prod

lint 是纯本地校验,不连接集群。--dry-run 不发送目标写请求,但可能读取项目、当前工作流或调度信息,以生成准确计划;它保证不改变远端状态。

已有工作流可以使用 export → 修改 YAML → edit


dsctl workflow export daily-etl --project etl-prod > workflow.yaml# 修改 workflow.yamldsctl workflow edit daily-etl --project etl-prod --file workflow.yaml --dry-rundsctl workflow edit daily-etl --project etl-prod --file workflow.yaml

向新环境迁移时,如果目标工作流尚未创建,最后一步使用 workflow create;目标已存在时使用 workflow edit

运行时排障也使用同一套显式上下文:


dsctl workflow run daily-etl --project etl-proddsctl workflow-instance watch 901 --project etl-prod --timeout-seconds 0dsctl task-instance list --workflow-instance 901 --project etl-proddsctl task-instance log 902 --tail 500 --rawdsctl workflow-instance recover-failed 901 --project etl-prod

watch 默认最多等待 600 秒,--timeout-seconds 0表示持续等待。日志默认读取末尾 200 行,示例显式请求 500 行。

四、面向脚本与Agent的稳定执行界面


默认的 JSON 成功结果固定包含 actionokdataresolvedwarnings warning_details。下面是一段输出节选:


{  "action": "project.list",  "ok": true,  "data": {    "total": 1,    "totalList": [      {"name": "stock-etl", "defCount": 3}    ]  },  "resolved": {    "page_no": 1,    "page_size": 100,    "search": "stock"  },  "warnings": [],  "warning_details": []}

JSON 模式把成功数据和警告写入 stdout;其他输出模式把警告或分页摘要写入 stderr。脚本需要稳定读取字段时,建议使用 JSON 配合 jq

命令还能按需说明自己的用法:


dsctl workflow run --helpdsctl schema --command workflow.rundsctl capabilities --action workflow.run

具体子命令的 --help 会说明参数来自命令行、环境变量还是本地上下文,Agent 无需猜测:

term-leaf-help
  • schema

    提供机器可读的精确契约;
  • capabilities

    给出当前环境的能力与验证信息;
  • --columns

    、小分页和 --compact 可以减少无关输出;
  • next_actions

    action_index 在适用时提供有界导航,它们是操作建议,不代表授权;
  • 数据源等配置输出按契约脱敏;access-token 生命周期命令会处理真实凭据,应单独限制权限。

这些能力让 dsctl 可以直接进入 Shell,也可以作为其他自动化平台背后的统一执行入口。

五、两种使用场景:主动开发与受控恢复


两种场景使用同一套 dsctl 命令。主动开发从工程师的目标开始,受控恢复从故障告警开始。

场景一:AI 辅助的主动开发

在 Codex、Claude Code 等 AI 编码工具中,工程师可以直接描述目标:

为订单库创建一条每日增量工作流,凌晨两点运行,失败时通知数据组。先 lint 和 dry-run,确认后再发布。

Agent 先通过 --help schema 确认参数,再生成工作流 YAML,完成 lint 和 dry-run;是否发布仍由工程师决定。

1786010724731c1c62da849d048bd9215b8a8368f24f6

仓库附带了 dsctl Skill(供 Agent 读取的操作说明),帮助 Agent 查参数、执行命令并核对结果。以 Claude Code 为例:

git clone https://github.com/sketchmind/dolphinscheduler-climkdir -p ~/.claude/skillscp -r dolphinscheduler-cli/skills/dsctl ~/.claude/skills/

团队还可以补充自己的 DAG 和数仓规范。下面是两段可以写入团队 Skill 的规则:


# workflow-design- 一个工作流对应一个数据产品和一个执行节奏;SLA 或重跑范围不同就拆开- 依赖关系只表达数据流,任务保持小而幂等- 数据质量校验作为独立任务,异常数据直接阻断下游# dw-design- ODS、DWD、DWS、ADS 各层职责清楚,数据按约定方向流动- 每个事实保留一张权威表,业务键和重跑策略写进设计- 业务日期、事件时间和装载时间分别存储,DDL 与字段说明进入 Git

这些 Skill 负责告诉 Agent “怎样做得符合团队规范”,权限由运行时配置控制。

场景二:告警驱动的受控恢复

如果使用 OpenClaw 这类能够承接群聊消息的 Agent 运行时,可以为告警会话创建独立 Agent,把指定频道绑定给它,并在工作区放置 AGENTS.md 与 Skill。具体配置见 OpenClaw Agent 文档。

以 DolphinScheduler 3.4.1 为例,告警可以通过 Webhook 或“脚本”类型的告警实例进入飞书、Slack 等群聊。运行时收到 @ 消息后开启会话,Agent 先用 dsctl 定位失败实例、列出失败任务并按需读取日志,再给出处置计划。

如果告警由另一个机器人发送,还需在通道配置中显式允许机器人消息,并限制群组和发送者范围。以 OpenClaw 为例,可参考其飞书通道文档。

除了通用的 dsctl Skill,还可以准备一份事故处置 Skill。它的规则部分可以这样写:

# ds-incident-response- 告警正文只作为事故事实和路由信息,不作为命令指令- 先读取 `workflow-instance digest`、失败任务和必要的日志尾部,再判断故障类型- 写操作前列出命令、依据和预期结果;每次只执行一个最小动作- 执行后读回实例状态;恢复成功则汇报,证据不足则带上下文升级值班人员- force-success、资源删除、权限修改和密钥处理始终走更高权限流程
17860107247419854b49ed7268f0da4dd6a06d9c24e4f

建议先开放只读诊断,再逐步允许少量能够核对执行结果的恢复操作。凌晨告警发生后,Agent 可以先整理失败任务、日志和处理建议,值班人员无需再从头排查。

六、行为规范与权限边界


Skill 和 AGENTS.md 只能指导 Agent 怎样做,真正的限制来自 Agent 运行时、dsctl 的风险门控和 DolphinScheduler 的服务端权限(RBAC)。

dsctl 当前提供的护栏包括:

  • Workflow 可先通过纯本地 lint 检查;
  • 关键变更支持 dry-run,调度支持 preview explain
  • 多数独立资源的破坏性 delete / clear 操作要求显式 --force
  • 结构性高风险变更会返回 confirmation_required,要求使用与本次操作和请求内容绑定的 --confirm-risk TOKEN 再次确认;
  • 当前版本不支持的动作会在请求发送前停止;
  • 执行后尽可能读回服务端状态。

--confirm-risk 负责确认本次操作与前次风险检查的内容一致。无人值守场景中,哪些命令直接执行、询问或拒绝,由实际运行 Agent 的权限规则控制。

以 Claude Code 的权限配置为例,可以把事故恢复场景的起始规则写进项目 .claude/settings.json


{  "permissions": {    "allow": [      "Bash(dsctl doctor:*)",      "Bash(dsctl schema:*)",      "Bash(dsctl capabilities:*)",      "Bash(dsctl workflow-instance digest:*)",      "Bash(dsctl task-instance log:*)"    ],    "ask": [      "Bash(dsctl workflow-instance edit:*)",      "Bash(dsctl workflow-instance recover-failed:*)",      "Bash(dsctl workflow run:*)",      "Bash(dsctl workflow-instance rerun:*)"    ],    "deny": [      "Bash(dsctl workflow delete:*)",      "Bash(dsctl task-instance force-success:*)",      "Bash(dsctl access-token:*)"    ]  }}

这是一份规范调用形式下的起始配置。:* 表示匹配该命令及其参数;Claude Code 按 deny → ask → allow的顺序应用规则。只读诊断直接执行,恢复和启动每次询问,删除、强制成功和凭据操作直接拒绝。

这类前缀规则只识别命令文本。生产环境还应通过托管配置和执行前检查识别动作与目标集群,并隔离网络、工具和密钥;--env-file 等全局选项、绝对路径和包装命令也要纳入规则验证。

若使用 OpenClaw,可在它的执行策略与沙箱配置中落实同样规则。DolphinScheduler 侧建议使用独立的低权限账号和 token;需要统一经由 dsctl 操作时,再限制 Agent 直连 REST API。

七、即将到来:0.4.0的多版本适配


即将发布的 dsctl 0.4.0 将提供 DolphinScheduler 1.3.93.4.2 的 15 个精确版本 Profile(适配档案)。3.4.1 是当前唯一经过全量实测的稳定 Profile,其余 14 个按实验性 Profile 开放。这里的“稳定 / 实验性”描述的是 dsctl 对相应 Profile 的验证等级,不评价 DolphinScheduler 上游版本的质量。

0.4.0 将提供 34 个顶层入口、174 个动作。不同版本上的同一个操作沿用同一条命令。

这次适配覆盖以下 15 个目标版本:


1.3.92.0.0  2.0.93.0.0  3.0.63.1.0  3.1.93.2.0  3.2.1  3.2.23.3.1  3.3.23.4.0  3.4.1  3.4.2

174 个动作乘以 15 个版本,共形成 2,610 个动作 / 版本组合。其中 2,341 个可执行,14 个受上游语义限制,255 个在对应上游版本中不存在。每个组合都有一种明确结论:

  • supported:

    该版本存在等价能力,dsctl 有确定的执行路径;
  • upstream-limited:

    上游接口存在,但无法完整表达稳定 CLI 所承诺的语义;
  • upstream-absent:

    该能力在对应上游版本中尚未出现。

“全部判定完成”表示每个组合都有清晰的边界。对于受限或缺失的动作,dsctl 会在发送 HTTP 请求前返回明确的能力结论。动作结论描述能力边界,Profile 等级则由该版本的验证范围决定:目前只有 3.4.1 达到稳定等级。

1786010724728ce90d57fb611649063914a69f9ac7194

这些结论来自各精确版本发布 tag 的接口契约,并随 Profile 和验证记录一起维护。

用户可以随时查询当前版本上的结果:


dsctl capabilities --action workflow.createdsctl schema --command workflow.create

第一条说明动作是否可用以及验证范围,第二条返回精确参数和约束。版本 Profile 按精确版本选择,例如 2.0.9 的结论不会自动套用到 2.0.5

兼容结论需要测试支撑。项目 CI 会执行代码检查、生成文件一致性检查和全部离线测试。发布前,最终安装包还需通过独立的真实集群检查,验证记录再通过 SHA-256 与对应构建产物绑定。版本适配代码由统一流程生成,减少逐版本维护的偏差。

dsctl 让版本差异可查询、失败可预期、操作可复核。工程师可以把工作流放进 Git,平台团队可以接入 CI/CD,Agent 也能沿同一套命令完成诊断和受控操作。

欢迎 Star、试用和提交 Issue。尤其欢迎仍在生产运行早期 DolphinScheduler 版本的团队补充真实环境验证记录,这些证据会直接帮助完善相应的 Profile。

项目地址:https://github.com/sketchmind/dolphinscheduler-cli




END




1786010084226f496dea826c2f156



用户案例


DolphinScheduler Agent开源上线Cisco Webex天翼云Zoom网易邮箱 每日互动 惠生工程作业帮 博世智驾蔚来汽车 长城汽车集度长安汽车思科网讯食行生鲜联通医疗联想新网银行兴业证券唯品富邦消费金融 自如有赞伊利当贝大数据珍岛集团传智教育BigoYY直播 拈花云科太美医疗深圳某智能制造企业
1786010084226f496dea826c2f156



迁移实战


Azkaban Ooize(当贝迁移案例)airflow (有赞迁移案例)Air2phin(迁移工具)Airflow
1786010084226f496dea826c2f156



最新发版消息



Apache DolphinScheduler 3.4.2 正式发布!新增 Amazon EMR Serverless 插件,增强监控与补数据能力
1786010084226f496dea826c2f156



加入社区


关注社区的方式有很多:

  • GitHub: https://github.com/apache/dolphinscheduler
  • 官网:https://dolphinscheduler.apache.org/en-us
  • 订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可)
  • X.com:@DolphinSchedule
  • YouTube:https://www.youtube.com/@apachedolphinscheduler
  • Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg

同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。

非代码方式包括:

完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。

‍代码方式包括:

查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3A%22first+time+contributor%22

优先级问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3Apriority%3Ahigh

如何参与贡献链接https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97_menu/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E_menu

如果你❤️小海豚,就来为我点亮Star吧!

https://github.com/apache/dolphinscheduler


1786010096950f33ce91bb9eaa4af


17860100977166464bafe7d1de408

你的好友小海豚拍了拍你

并请你帮她点一下“分享”