{"formatVersion":"1","kind":"dock_integration","slug":"jenkins-remote-api","title":"Jenkins Remote API","summary":"Import a Harbor-safe Jenkins starter set for job discovery, bounded build inspection, and approval-friendly job triggering.","description":"A Dock-hosted Jenkins Remote API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Jenkins action set for listing jobs, inspecting a bounded build record, and triggering a known job with explicit approval. Credentials remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"jenkins","name":"Jenkins","websiteUrl":"https://www.jenkins.io/doc/book/using/remote-access-api/"},"category":"Developer Tools","tags":["jenkins","ci","builds","jobs","automation"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Jenkins basic auth should be stored as a base64 username:apiToken value because Harbor's header_token mode emits a fixed Authorization prefix plus token string. Templates use input.path and input.query at execution time."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Jenkins Remote API","description":"Jenkins Remote API connection managed locally through Harbor.","baseUrl":"https://your-jenkins.example.com/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Basic"}],"actionTemplates":[{"slug":"list-jobs","label":"List Jobs","description":"List Jenkins jobs using the controller root API with a bounded field selection and optional depth control.","method":"GET","path":"/api/json","inputs":{"parameters":[{"name":"depth","in":"query","schema":{"type":"integer","minimum":0,"maximum":2},"default":1,"description":"Optional Jenkins API depth. Keep this low to avoid overly large controller responses."}],"staticQuery":{"tree":"jobs[name,url,color,lastBuild[number,url,result,timestamp],lastSuccessfulBuild[number,url],lastFailedBuild[number,url]],views[name,url]"}},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-job","label":"Get Job","description":"Fetch a bounded Jenkins job record for a known top-level job.","method":"GET","path":"/job/{jobName}/api/json","inputs":{"parameters":[{"name":"jobName","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Top-level Jenkins job name to inspect."}],"staticQuery":{"tree":"name,fullName,url,color,description,buildable,nextBuildNumber,lastBuild[number,url,result,timestamp],lastSuccessfulBuild[number,url],lastFailedBuild[number,url]"}},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-build","label":"Get Build","description":"Fetch a bounded Jenkins build record for a known top-level job and build reference.","method":"GET","path":"/job/{jobName}/{buildRef}/api/json","inputs":{"parameters":[{"name":"jobName","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Top-level Jenkins job name to inspect."},{"name":"buildRef","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Build number or Jenkins symbolic build ref such as lastBuild, lastSuccessfulBuild, or lastFailedBuild."}],"staticQuery":{"tree":"id,number,result,building,url,timestamp,duration,estimatedDuration,fullDisplayName,description,actions[parameters[name,value]],artifacts[fileName,relativePath]"}},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-builds","label":"List Builds","description":"List builds for a known Jenkins job using an explicit job path and bounded field selection.","method":"GET","path":"/job/{jobName}/api/json","inputs":{"parameters":[{"name":"jobName","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Top-level Jenkins job name to inspect."}],"staticQuery":{"tree":"name,builds[number,url,result,timestamp,duration]"}},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"trigger-job","label":"Trigger Job","description":"Trigger a known Jenkins job without parameters using an explicit top-level job path.","method":"POST","path":"/job/{jobName}/build","inputs":{"parameters":[{"name":"jobName","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Top-level Jenkins job name to trigger."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"trigger-job-with-parameters","label":"Trigger Job With Parameters","description":"Trigger a known parameterized Jenkins job using an explicit top-level job path and a bounded JSON request body.","method":"POST","path":"/job/{jobName}/buildWithParameters","inputs":{"parameters":[{"name":"jobName","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Top-level Jenkins job name to trigger."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"stop-build","label":"Stop Build","description":"Stop a running Jenkins build using explicit job and build identifiers.","method":"POST","path":"/job/{jobName}/{buildRef}/stop","inputs":{"parameters":[{"name":"jobName","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Top-level Jenkins job name."},{"name":"buildRef","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Build number or build reference."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"workflowTemplates":[{"slug":"job-health-check-and-trigger","title":"Job Health Check And Trigger","summary":"Future workflow template for listing jobs, checking a recent build, and operator-reviewed triggering of a known Jenkins job."}],"helpText":"Import to Harbor, configure local auth, then use list-jobs and get-build before enabling trigger-job. Keep trigger-job on approval unless your local policy explicitly allows bounded Jenkins execution.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Store the Jenkins credential as a base64 username:apiToken value so Harbor can emit Authorization: Basic <token>. These starter actions stay on fixed Jenkins controller routes and avoid parameterized builds, job creation, or config mutation in the first pass."}