Jenkins CI
Interact with a Jenkins CI server via its REST API.
Configuration
Run ./setup.sh from the repo root (recommended), or create config files manually:
mkdir -p ~/.boring/jenkins
echo 'https://your-jenkins.example.com' > ~/.boring/jenkins/url
echo 'your-username' > ~/.boring/jenkins/user
echo 'your-api-token' > ~/.boring/jenkins/token
chmod 600 ~/.boring/jenkins/token
Obtain an API token: Log in → Your Username → Configure → API Token → Add new Token → Generate.
Job path format
Paths use / to separate folders:
MyOrg/my-service/main— main branchMyOrg/my-service/PR-42— pull requestMyOrg/my-service/feature%2Fmy-branch— URL-encode slashes in branch names
Scripts
Build status
scripts/jenkins-build-status.sh <job-path> [build-number]
Test failures
scripts/jenkins-test-failures.sh <job-path> [build-number] [--full]
--full includes complete stack traces.
Console output
scripts/jenkins-console.sh <job-path> [build-number] [grep-pattern]
Trigger a build
scripts/jenkins-trigger.sh <job-path> [--param KEY=VALUE]...
Watch build progress
scripts/jenkins-watch.sh <job-path> [build-number]
Polls until the build finishes and exits 0 on success, 1 on failure.
Build history
scripts/jenkins-build-history.sh <job-path> [count]
Pipeline stages
scripts/jenkins-stages.sh <job-path> [build-number]
Shows stage names with pass/fail status (requires Pipeline plugin).
List jobs
scripts/jenkins-list-jobs.sh [folder-path] [--depth N]
Build queue
scripts/jenkins-queue.sh
Abort a build
scripts/jenkins-abort.sh <job-path> [build-number]
Raw API
scripts/jenkins-api.sh <endpoint> [curl-options...]
Typical workflow
S=scripts
$S/jenkins-build-status.sh "MyOrg/my-service/PR-42"
$S/jenkins-test-failures.sh "MyOrg/my-service/PR-42"
$S/jenkins-console.sh "MyOrg/my-service/PR-42" lastBuild "ERROR"
$S/jenkins-stages.sh "MyOrg/my-service/PR-42"
$S/jenkins-trigger.sh "MyOrg/my-service/PR-42"
$S/jenkins-watch.sh "MyOrg/my-service/PR-42"
API endpoints reference
Append to job URL:
/api/json— metadata/lastBuild/api/json— last build/lastBuild/consoleText— console/lastBuild/testReport/api/json— test results/build— trigger (POST)/buildWithParameters?KEY=VALUE— parameterized trigger (POST)/lastBuild/wfapi/describe— pipeline stages/stop— abort (POST)
Query params: tree=field[sub], depth=N