前言¶
在智能体开发中,经常需要在代码仓库和 CI/CD 平台之间来回切换:列出流水线、触发构建、查看日志、处理合并冲突。这些操作分散在不同页面,打断会话的连贯性。DSH 插件的目标是把这些操作整合进会话里,让开发者直接用自然语言或工具命令管理流水线。
插件定位¶
yinfoyuan/dsh-cicd 是 DeepSeek Harness(DSH)的一个工作流插件,由维护者 yinfoyuan 开发。它把每个项目的 CI/CD 流水线接入 DSH 会话,当前内置平台适配器是阿里云云效 Flow。插件通过配置文件或 skill 与云效 OpenAPI 交互,提供列表、触发、跟踪、读日志、取消、查看合并冲突等能力。
核心能力¶
- 列出流水线:在项目会话中列出已配置的流水线及其最近运行状态。
- 触发流水线:用自然语言或工具命令触发流水线运行,支持多分支选择。
- 跟踪运行状态:触发后后台跟踪阶段变化和结束,通过 toast 通知。
- 读取日志:查看构建或部署日志,支持只读查看合并冲突文件。
- 取消运行:取消正在进行的流水线。
- 配置管理:通过设置页或配置文件管理云效 Token、组织、流水线展示名/环境/是否确认。
安装与启用¶
从 npm 安装(发布到 npm 后可用):
dsh plugin --profile desktop add dsh-cicd
本地仓库安装:
dsh plugin --profile desktop add link:<本仓库路径>
装完需要重启 DSH。Web 版把 desktop 换成 web。
快速接入¶
准备云效 Token¶
在云效 → 个人设置 → 个人访问令牌创建 pt- 开头的 token,权限包含:
- 流水线运行实例:读写
- 运行任务:只读
推荐在「设置 → 流水线配置 → 设置 Token」里粘贴,token 会写入 DSH 凭据存储。
用 skill 接入(推荐)¶
在项目会话里把云效流水线链接发出来:
把这条云效流水线接进来:https://devops.aliyun.com/organizations/
/flow/pipeline/
或者:
帮我把云效流水线 123456 接到这个项目,环境是 test,需要确认
模型会自动加载内置的 cicd-config skill,确认组织、key/展示名、环境、是否需要 confirm: true。确认后 skill 会写入或更新 .dsh/cicd.json,最后用 cicd_list 验证。
也可以显式调用:
skill cicd-config
手动配置(可选)¶
在项目根创建 .dsh/cicd.json:
{
"pipelines": {
"deploy-test": {
"type": "yunxiao",
"title": "部署测试环境",
"organizationId": "5ebbc0228123212b59xxxxx",
"pipelineId": "123456",
"environment": "test",
"confirm": true
}
}
}
organizationId 从带 /organizations/<organizationId>/ 的链接里取;pipelineId 是纯数字。
验证¶
在项目会话里:
列一下流水线
或直接调用 cicd_list。能看到刚接入的流水线和最近一次运行状态,就接好了。
配置字段¶
| 字段 | 必填 | 说明 |
|---|---|---|
type |
是 | 固定 yunxiao(也接受 devops / flow) |
title |
是 | 展示名,出现在列表、通知里 |
organizationId |
中心版必填 | 云效组织 ID |
pipelineId |
是 | 云效流水线数字 ID |
environment |
否 | 环境标签:development / test / staging / production |
confirm |
否 | true 时模型必须显式带 confirm:true 才能触发 |
branchMode |
否 | 多分支默认策略:append / replace / off |
params |
否 | 云效运行参数,按 JSON 对象传入 |
tokenEnv 可省略,默认 YUNXIAO_TOKEN。token 不会写进 cicd.json。
日常使用¶
| 说法 | 实际工具 |
|---|---|
| 列一下流水线 | cicd_list |
| 跑 deploy-test | cicd_run |
| 现在到哪一步了 | cicd_status |
| 看下失败日志 | cicd_logs |
| 取消这次运行 | cicd_cancel |
| 冲突在哪、哪些文件 | cicd_conflict(只读) |
触发类流水线(confirm: true)需要用户同意后,模型才会带 confirm: true 执行。
触发后立即返回 runId,后台跟踪阶段变化和结束,主动弹 toast。模型不要用 Start-Sleep / 循环 cicd_status 等结果;用户之后要查进度时再用 cicd_status(只查一次,不阻塞)。如果用户在触发之外还有后续诉求(结束后继续处理、关注冲突/异常):触发时带 followUp: true,终态或检测到冲突时会自动唤醒模型继续处理。
设置页¶
「设置 → 流水线配置」管理本地数据,不会修改云效上的流水线:
- 全局配置:云效 Token(绿点表示已配置)、桌宠/Toast 开关、多宠物时的通知宠物。
- 组织:添加/重命名/删除;组织 ID 创建后不可改。
- 流水线:按组织展示云效流水线,可改显示名称/环境/是否确认,或删除。
新增流水线先在云效创建,再通过配置文件或 cicd-config skill 加入。
运行记录¶
每次运行会在项目里写:
.dsh/cicd-runs/
<runId>.json # 运行状态、平台 runId、耗时等;status/cancel/conflict/最近运行会读它
<runId>.log # 仅本地 shell 流水线;云效日志实时从平台拉取,不落本地
这些是本地缓存,插件不会写或修改任何 .gitignore。想让它们不进 git,在项目根或 .dsh/ 下自己加:
.dsh/cicd-runs/
.dsh/cicd-branches.json
.dsh/cicd.json 不受影响,仍应正常提交。
多分支流水线¶
云效开启分支模式的流水线,cicd_run 默认弹窗选分支:
- 默认集合 = 云效上次运行的分支 ∪ 本地保留的分支 − 本地明确移除的分支。
- 勾选 = 保留,取消 = 本次移除。
- 本地记忆在
<项目>/.dsh/cicd-branches.json。 - 只有显式传
branches,或用户明确要求复用上次运行的分支集合时才跳过弹窗。
安全与数据¶
- token 只写入 DSH 凭据存储,或用进程环境变量;不读取项目
.env/.dsh/.env。 - 插件只调用配置里声明过的云效流水线。
confirm: true是部署类流水线的第二道门。- 不在日志、通知里输出 token。
- 插件完全在本机运行,没有中转服务、没有遥测。
- 没有统计上报,插件不向作者或任何第三方发送数据。
适用场景¶
适合使用阿里云云效 Flow,并希望在 DSH 会话里直接管理流水线的开发者。需要安装 DSH 插件环境,并确保有云效平台的访问令牌和对应流水线的执行权限。
插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
限制¶
- 只支持云效 Flow,其他平台后续按需求再加。
- 本地
shell流水线仅作为内部测试/辅助能力,不在设置页展示。 - 设置页不能新建云效流水线,只能编辑已有流水线的展示元数据。
- 合并冲突只读查看,不会自动合并或恢复运行。
结语¶
yinfoyuan/dsh-cicd 让 CI/CD 流水线管理从多平台切换变为会话内操作,减少上下文切换。通过配置文件或 skill 快速接入云效流水线,用自然语言或工具命令完成列表、触发、跟踪、读日志、取消、查看合并冲突等操作。
目录页:https://www.skillhub.cn/plugins/yinfoyuan/dsh-cicd
GitHub:https://github.com/yinfoyuan/dsh-cicd