dsh-jenkins-plugin
Jenkins CI 集成:右侧栏实时构建进度面板、多实例设置页、五个面向模型的工具(列 job、构建状态、控制台日志、工作区、触发构建),以及构建失败时唤醒当初关注该 job 的那个会话。
安装
dsh plugin --profile web add dsh-jenkins-plugin
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-jenkins-plugin

DeepSeek Harness 的 Jenkins 插件:Web GUI 右侧栏里的实时构建面板,加上一组面向模型的 Jenkins 工具。
装完之后,你不再需要为了看一次构建进度而切到 Jenkins 页面:关注的 job 变成侧栏里的卡片,进度条实时走,构建结束发通知,失败了一键交给模型分析原因。
安装
推荐从 npm 安装(预构建产物,不需要任何构建授权):
dsh plugin --profile web add dsh-jenkins-plugin
装完重启 dsh web,打开设置 → Jenkins 填一个实例(地址 + 账号 + 密码/API token),Save 之后右栏就会出现 Jenkins 面板。
其他安装来源:
# tarball(离线/内部分发) dsh plugin --profile web add ./dsh-jenkins-plugin-0.1.0.tgz # git 源码:需要授权 allowBuilds 让 prepare 脚本构建(pnpm ≥10 默认拒绝) dsh plugin --profile web add github:<owner>/dsh-jenkins-plugin
git 安装拉的是源码而不是产物,所以必须在 profile 的 pnpm-workspace.yaml 里允许它的准备脚本:
allowBuilds: dsh-jenkins-plugin: true
那等于允许本包代码在安装时于你机器上执行,请只对可信源码授权并锁定 commit(github:<owner>/dsh-jenkins-plugin#<sha>)。想省掉这一步就用 npm 或 tarball。
你会得到什么
右栏面板(侧栏右侧的 Jenkins 页签)分两个模块:
- 我关注的 —— 每个关注的 job 一张卡片:状态点、构建号、状态标签、实时进度条、当前阶段名、本次构建的变更说明、Maven 项目的版本号(构建结束后可取到时)。卡片直接来自 SSE 推送,不是轮询页面。
- 所有 job —— 默认折叠,展开后每行末尾的 ☆/★ 一键关注。
点 job 或卡片继续下钻,全程不跳出面板:构建历史(可翻页)→ 构建详情(阶段条、内嵌控制台日志、测试摘要、变更集、产物列表)。产物下载是唯一会打开 Jenkins 页面的动作。
写操作都在面板内完成,并且是「按钮 → 行内二次确认 → 执行 → 就地显示结果」:
动作 · 说明
触发构建 · 参数化 job 有参数输入框(每行 KEY=VALUE)
重新构建 · 只对失败的构建出现,沿用上次构建的参数
中止构建 · allowCancel 默认关闭,开启后可用
交给 AI 分析 · 只对失败的构建出现,把失败日志尾部 + 阶段 + 变更集交给当前会话的模型,答案直接出现在对话里
denyJobs 里的 job 无论开关怎么设都拒绝,且一个请求都不会发到 Jenkins。
给模型用的工具(模型可以自己调用,不必你手点):
工具 · 作用
jenkins_jobs · 列 job 与状态,可选带最近构建历史
jenkins_build_status · 一个构建的结果、耗时、Pipeline 阶段、变更集、测试摘要
jenkins_log · 控制台日志,默认取尾部,可按 next_offset 续读
jenkins_workspace · 构建的工作空间目录或产物列表(读工作空间需要 Jenkins Workspace API 插件)
jenkins_build · 触发或中止构建(唯一的写工具;先过 denyJobs/allow.*,再要求操作者审批)
多实例:设置页里可以配多个 Jenkins,逐个「测试连接」通过才允许保存(任何一行连不上则整次保存被拒、零写入);面板底部可切换实例,当前实例用绿色标出。多实例的实例清单和关注列表存在 $DSH_HOME/jenkins.json。
完成通知:关注的 job 一有构建结束就用平台的后台作业机制发一次通知,同一次构建只通知一次。
失败唤醒(notifyWakeOnFailure,默认关):关注的 job 一旦失败,就把它交给「你当初关注它的那个会话」——发的是和按钮相同的那份日志尾部、失败阶段与提交,所以模型能在没人盯着构建列表的时候先说明原因,答案出现在你正在读的对话里。关注项记着是哪个会话关注的,所以通知不会跑错地方。只有真正的失败才唤醒(unstable、aborted 不算),同一次构建最多唤醒一次,会话已经关闭就静默跳过。allowAnalyze: false 也会关掉它——两者发给模型的是同一份日志。
权限与风险
装之前请如实了解这个插件会做什么:
- 网络:只向你配置的 Jenkins 地址发请求,没有别的外联。
- 凭据:Basic 认证,密码/API token 通过 DSH 自己的 credentials 服务存取(
tokenRef指向一个凭据引用)。插件自己的jenkins.json里只有地址、账号和凭据名,没有密码,密码也不会出现在工具输出、面板或日志里。 - 写操作:可以触发和中止构建。
allowTrigger默认开、allowCancel默认关,denyJobs可以硬封指定 job(含整个目录)。模型侧调用还要额外经过审批;面板上的点击是行内二次确认 + 同一份策略判定。 - 日志会进入模型上下文:「交给 AI 分析」和模型自己调
jenkins_log时,构建日志的内容会作为提示词的一部分送给模型。Jenkins 日志属于不可信输入——它可能包含任意文本(包括试图操纵模型的指令),请按此对待;默认只送失败日志的最后 16 KiB(analyzeLogBytes)。 - 本地状态:
$DSH_HOME/jenkins.json(实例清单 + 关注列表)、DSH credentials(密码)。 - 插件自己不会触发任何构建:只有你点按钮或模型显式调用才会。
兼容性
- Harness:针对
0.2.1-rc.3构建并验证。engines.dsh接受0.2.1-rc.3及后续0.2.x(>=0.2.1-rc.3 <0.3.0-0),@deepseek-ai/dsh-*的 peerDependencies 用^0.2.1-rc.3。不再支持旧0.1.x线:插件使用的 harness API 在其间有变化。 - Node:与 harness 一致,
^22.19.0 || >=24.0.0。 - 载体:面板是 Web GUI 的界面(
dsh web),在 Web 组合上验证过。 - Jenkins:在 Jenkins 2.176.2 上实测(FreeStyle 与 Maven job,777 个 job 的实例)。几条如实降级:
- Pipeline 阶段需要 Blue Ocean 的
wfapi端点;2.176.2 且没有 Pipeline job 时阶段列表为空,面板会退化成按耗时估算的进度条——这是"控制器没给阶段",不是面板坏了。 - 读工作空间需要 Jenkins Workspace API 插件;缺失时
jenkins_workspace会如实说明该 Jenkins 不支持。 - Maven 版本号取自
mavenArtifacts/api/json,只有 Maven job 有,且真实 2.176.2 上通常在构建结束后才产生,所以正在跑的 Maven 构建卡片上可能没有版本号(拿不到就不显示,绝不猜)。 - 产物没有大小:Jenkins 的
tree查询取不到 artifact size。 - 已知未完成:
uiAutoOpenOnTrigger(触发后自动展开面板)已接受但尚未生效;maxTrackedBuilds只是建议值,不硬性限制跟踪数量(关注列表是用户自己挑的)。
配置
静态配置只是回退层:面板设置页里配的实例优先,静态配置在没有面板设置时生效(实例 id 为 config)。baseUrl/username 可以留空——那正是"全部在面板里配"的用法。
- id: jenkins
name: dsh-jenkins-plugin
config:
baseUrl: https://ci.example.com/jenkins
username: ci-bot
tokenRef: JENKINS_TOKEN
denyJobs: ['infra/*']
字段 · 默认 · 含义
baseUrl · 空 · Jenkins 根地址;留空表示只用面板设置
username · 空 · 与 token 配对的登录名
tokenRef · JENKINS_TOKEN · 存放 API token 的凭据引用;每次调用现取,支持热轮换
settingsFile · jenkins.json · 面板设置文件:绝对路径,或 harness home 下的文件名
tlsMode · verify · verify 校验证书;allowSelfSigned 接受不受信任的证书
tlsCaFile · — · verify 模式下用于校验的自签 CA PEM
timeoutMs · 15000 · 单个 HTTP 请求的上限
crumbMode · auto · auto 在写请求前取 CSRF crumb;off 跳过
denyJobs · [] · 永不允许触发/中止的 job 路径;folder/* 匹配整个目录
allowTrigger · true · 是否允许触发构建
allowCancel · false · 是否允许中止构建
progressIntervalMs · 3000 · 跟踪构建的阶段轮询间隔
logIntervalMs · 1500 · 面板展示的构建的日志轮询间隔
idleBackoffMaxMs · 30000 · 没有进展时的退避上限
queueTimeoutMs · 300000 · 排队超过多久就报超时
maxTrackedBuilds · 5 · 跟踪表的建议上限(不强制)
retainMs · 600000 · 已结束构建留在跟踪表里的时长
historyCount · 10 · 构建历史默认条数(最大 50)
maxLogBytes · 262144 · 单次控制台日志返回的字
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:4,最后更新 2026-10-28