DeepSeek Harness 插件:把 CI/CD 流水线接进会话

前言

在智能体开发中,经常需要在代码仓库和 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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye