Skip to content

Jenkins plugin support #88

@ewega

Description

@ewega

Summary

Add Jenkins as a supported DevOps tool in the CLI. Jenkins is the most popular CI/CD server (~44% market share), providing deployment frequency and build data for DORA metrics.

Upstream Plugin

jenkins in incubator-devlake/backend/plugins/jenkins/

Property Value
Plugin slug jenkins
Auth BasicAuth only (username + password/API token)
Scope type Jobs (FullName string, path-based)
Scope ID field fullName
Default endpoint User-provided Jenkins server URL
Remote-scope API Yes
Connection test Yes

Dependencies

Blocked by:

Changes

  • Add ConnectionDef for jenkins in connectionRegistry:
    • AuthMethod: "BasicAuth"
    • NeedsUsername: true
    • UsernamePrompt: "Jenkins username"
    • UsernameEnvVars: []string{"JENKINS_USER", "JENKINS_USERNAME"}
    • Endpoint: "" (user must provide)
    • SupportsTest: true
    • TokenPrompt: "Jenkins API token or password"
    • EnvVarNames: []string{"JENKINS_TOKEN", "JENKINS_PASSWORD"}
    • EnvFileKeys: []string{"JENKINS_TOKEN", "JENKINS_PASSWORD"}
    • ScopeIDField: "fullName"
    • ScopeFunc: scopeJenkinsHandler
  • Implement scopeJenkinsHandler:
    • Use client.ListRemoteScopes("jenkins", connID, "", "") to browse job tree
    • Let user select jobs interactively or via --jobs flag
    • PUT selected jobs as scopes
  • Set Available: true

Acceptance Criteria

  • gh devlake configure connection add --plugin jenkins --username admin --endpoint https://jenkins.example.com creates a Jenkins connection
  • Jenkins appears in interactive plugin picker
  • Jenkins scopes list jobs for selection
  • Connection test works
  • go build ./..., go test ./..., go vet ./... pass

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions