jenkins-tui is a terminal UI for running Jenkins parameterized pipelines in bulk using value permutations.
It also exposes a small headless CLI for automation-oriented discovery and triggering:
listsearchparamstrigger
Tap and install:
brew tap bnainar/tap
brew install jenkins-tui- Loads Jenkins targets from
jenkins.yamlin your config directory - Browses folders/jobs lazily (Jenkins UI style)
- Supports multi-select for Jenkins
Choiceparams - Generates cartesian permutations (hard limit:
20runs) - Executes all generated runs with concurrency
4 - Tracks queue/build status until completion
- Opens selected build URL in browser (
o) - Caches folder listings with a 24h TTL for faster browsing
Default config path:
$XDG_CONFIG_HOME/jenkins-tui/jenkins.yaml- Fallback:
~/.config/jenkins-tui/jenkins.yaml
If the config file does not exist yet, the app still starts; press m to add targets in-app.
Override config path:
- Flag:
-config /absolute/path/to/jenkins.yaml - Env:
JENKINS_TUI_CONFIG=/absolute/path/to/jenkins.yaml
Config format:
jenkins:
- id: prod
host: https://jenkins.example.com
username: your-user
insecure_skip_tls_verify: false
credential:
type: keyring
ref: jenkins-tui/prodname is optional. When omitted, it defaults to the target id.
keyring: token is stored in OS keychain/keyring, YAML stores only reference.env:credential.refis an environment variable name containing the token.
Linux note:
keyringrequires a Secret Service backend.- If unavailable (for example headless sessions), use
credential.type: env.
On the server selection screen:
mopen target managementaadd targeteedit selected targettrotate selected target token (keyring targets)ddelete selected target
In parameter forms for Jenkins Choice fields:
spaceorxtoggles the currently highlighted optionctrl+atoggles select all / select none/enters filter mode
Filtering note:
- When a filter is active,
ctrl+aapplies to currently visible (filtered) options.
Default cache path:
$XDG_CACHE_HOME/jenkins-tui- Fallback:
~/.cache/jenkins-tui
Override cache path:
- Flag:
-cache-dir /absolute/path - Env:
JENKINS_TUI_CACHE_DIR=/absolute/path
Version info:
jenkins-tui -v(orjenkins-tui -version) prints version, commit, and build time.
The default mode is still the interactive TUI. For non-interactive use, call one of the explicit subcommands below.
List the Jenkins root:
jenkins-tui list --target prod --jsonList a specific folder:
jenkins-tui list \
--target prod \
--url "https://jenkins.example.com/job/App-v1/job/Operations" \
--prefix "App-v1/Operations" \
--jsonjenkins-tui search --target prod --query BullBoardConfigUpdate --limit 10 --jsonsearch depends on Jenkins suggest endpoints. If expected jobs are missing, use folder list traversal instead.
jenkins-tui params \
--target prod \
--job "https://jenkins.example.com/job/App-v1/job/Operations/job/BullBoardConfigUpdate" \
--jsonjenkins-tui trigger \
--target prod \
--job "https://jenkins.example.com/job/App-v1/job/Operations/job/BullBoardConfigUpdate" \
--param region=CA-CANADA \
--param reason="config update" \
--wait \
--jsonNotes:
triggerexpects a full Jenkins job URL.paramsandlistare read-only.triggersubmits a real Jenkins build.
Cache details:
- TTL:
24h - Cache key: Jenkins
host + username + folder URL
Build and run with Docker-based toolchain:
make runOverride config/cache for local runs:
make run CONFIG=/absolute/path/jenkins.yaml CACHE_DIR=/absolute/path/cacheRun tests:
make testBring up local Jenkins and seed a sample parameterized pipeline:
make docker-up
./dev/scripts/wait-jenkins.sh
./dev/scripts/create-token.sh > /tmp/jenkins.yamlThen export the token env var printed by the script and run:
JENKINS_TUI_CONFIG=/tmp/jenkins.yaml make runWhen running jenkins-tui in Docker, use http://host.docker.internal:8080 instead of http://localhost:8080.
make build— build binary in Docker (output for your OS)make run— build then run the binary on the hostmake run-docker— build and run entirely inside Dockermake test— run tests in Dockermake tidy— go mod tidy in Dockermake fmt— go fmt in Dockermake clean— remove built binarymake docker-up— start local Jenkins (dev)make docker-down— stop local Jenkinsmake docker-logs— follow Jenkins logs