Endless-zby/dsh-jenkins-plugin ↗★ 0
dsh-jenkins-plugin
Jenkins integration for DeepSeek Harness: a live build-progress panel in the Web GUI plus model-facing tools for triggering builds, reading stages and console logs, and browsing a build's workspace 适合需要在DSH内触发Jenkins构建、查看日志和工作区的研发人员。
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Endless-zby/dsh-jenkins-pluginREADME
Read the full README ↗Configuration
Static configuration is only the fallback layer: instances configured in the settings page win, and static configuration applies when no panel settings exist (as an instance with id config). baseUrl/username may be left empty — that is exactly the "configure everything in the panel" setup.

- id: jenkins
name: dsh-jenkins-plugin
config:
baseUrl: https://ci.example.com/jenkins
username: ci-bot
tokenRef: JENKINS_TOKEN
denyJobs: ['infra/*']
| Field | Default | Meaning |
|---|---|---|
baseUrl | empty | Jenkins root URL; empty means panel settings only |
username | empty | login name paired with the token |
tokenRef | JENKINS_TOKEN | credential reference holding the API token; resolved per call, so a rotation applies without a restart |
settingsFile | jenkins.json | panel settings file: an absolute path, or a name under the harness home |
tlsMode | verify | verify validates the certificate; allowSelfSigned accepts an untrusted one |
tlsCaFile | — | PEM bundle used to validate the certificate under verify |
timeoutMs | 15000 | bound on one HTTP request |
crumbMode | auto | auto fetches a CSRF crumb before mutating requests; off skips it |
denyJobs | [] | job paths that may never be triggered or cancelled; folder/* matches a folder |
allowTrigger | true | whether triggering builds is allowed |
allowCancel | false | whether cancelling builds is allowed |
progressIntervalMs | 3000 | stage polling interval for tracked builds |
logIntervalMs | 1500 | console-log polling interval for the build the panel shows |
idleBackoffMaxMs | 30000 | upper bound of the idle backoff |
queueTimeoutMs | 300000 | how long a build may stay queued before it reports a timeout |
maxTrackedBuilds | 5 | advisory cap on tracked builds (not enforced) |
retainMs | 600000 | how long a finished build stays in the tracking table |
historyCount | 10 | default build-history rows (max 50) |
maxLogBytes | 262144 | byte cap on one console-log response |
logReadBytes | 8388608 | byte window read from the controller per log call |
maxListingBytes | 4194304 | byte cap on one response of the recursive job walk |
maxWorkspaceEntries | 500 | entry cap on one workspace directory listing |
maxReadFileBytes | 1048576 | byte cap on one workspace file read |
notifyOnComplete | true | announce a followed build when it finishes |
notifyWakeOnFailure | false | hand a failed followed build to the session that followed it |
allowAnalyze | true | allow handing a failed build to the model |
analyzeLogBytes | 16384 | log-tail bytes handed to the model |
uiAutoOpenOnTrigger | true | open the panel on trigger (not active yet) |
maxLogBytes and logReadBytes are two different things because real Jenkins ignores ?start=: the read window has to be far larger than a page, or the "tail" you get back is really the head of the log. That is why this plugin reads a window and slices locally.