blissful-infra jenkins
blissful-infra jenkins manages the shared Jenkins CI/CD server and your project pipelines. Jenkins is a shared service, one instance runs on your machine and all your blissful-infra projects register jobs with it.
Subcommands
Section titled “Subcommands”| Subcommand | Description |
|---|---|
jenkins start | Start the Jenkins server |
jenkins stop | Stop the Jenkins server |
jenkins status | Show Jenkins server status and running jobs |
jenkins add-project <name> | Register a project with Jenkins |
jenkins build <name> | Trigger a pipeline build for a project |
jenkins list | List all registered projects and their build status |
jenkins start
Section titled “jenkins start”blissful-infra jenkins start [--build] [--reset]Starts the Jenkins server if it is not already running.
Jenkins is a custom Docker image (blissful-jenkins:latest) built with all required plugins pre-installed. On first run the image is built automatically, this takes about 2 minutes and only happens once. Subsequent starts take a few seconds.
Jenkins data (jobs, build history, configuration) is persisted in ~/.blissful-infra/jenkins/ so it survives restarts.
Options
Section titled “Options”| Flag | Description |
|---|---|
--build | Force a rebuild of the Jenkins Docker image. Use this after plugin updates. |
--reset | Wipe the Jenkins Docker volumes and rebuild from scratch. Deletes all job history. |
What starts
Section titled “What starts”- Jenkins at
http://localhost:8081(admin/admin) - Docker registry at
localhost:5050, a local image registry for CI-built images
Jenkins is configured via JCasC (Jenkins Configuration as Code) so there is no manual setup wizard. All plugins, security settings, and the blissful-projects folder are provisioned automatically.
Waiting for readiness
Section titled “Waiting for readiness”The CLI waits up to 120 seconds for Jenkins to respond at /login before returning. If Jenkins does not become ready in time, the command fails with an error suggesting you check docker logs blissful-jenkins.
jenkins stop
Section titled “jenkins stop”blissful-infra jenkins stopStops the Jenkins containers with docker compose down. Data is preserved in the Docker volumes, the next jenkins start will restore the previous state.
jenkins status
Section titled “jenkins status”blissful-infra jenkins statusPrints whether Jenkins is running and, if so, the URL and credentials. Also checks whether the Docker registry container is up.
jenkins add-project
Section titled “jenkins add-project”blissful-infra jenkins add-project <name>Registers an existing blissful-infra project with Jenkins by creating a pipeline job.
Prerequisites
Section titled “Prerequisites”- Jenkins must be running (
blissful-infra jenkins startorblissful-infra dashboard) - The project directory must exist in the current working directory with a
blissful-infra.yaml - The project must have a
Jenkinsfileat eitherJenkinsfile(root) orbackend/Jenkinsfile
The Spring Boot template generates backend/Jenkinsfile automatically when you run blissful-infra start. If you used a different backend template, check whether it includes a Jenkinsfile.
What it does
Section titled “What it does”- Reads the Jenkinsfile location (
Jenkinsfileorbackend/Jenkinsfile) - Generates a Jenkins pipeline job XML that points to your project directory as the SCM source (using the local filesystem path as a Git remote. Jenkins polls the local repo)
- POSTs the job XML to
http://localhost:8081/job/blissful-projects/createItem?name=<name>with CSRF crumb injection - Falls back to the Jenkins root if the
blissful-projectsfolder does not exist
After registration, the job is visible at:
http://localhost:8081/job/blissful-projects/job/<name>
blissful-infra startcallsadd-projectautomatically after booting the stack. You only need to call it manually if start skipped it (e.g. Jenkins was down at the time) or if you created the project withblissful-infra create.- The job is idempotent, running
add-projectfor an already-registered project is a no-op.
jenkins build
Section titled “jenkins build”blissful-infra jenkins build <name>Triggers a new pipeline build for the named project. Equivalent to clicking “Build Now” in the Jenkins UI.
The CLI posts to http://localhost:8081/job/blissful-projects/job/<name>/build with a CSRF crumb. It does not wait for the build to complete, use blissful-infra pipeline <name> or open the Jenkins UI to monitor progress.
jenkins list
Section titled “jenkins list”blissful-infra jenkins listLists all jobs registered with Jenkins, their current status (success, failed, building, not built), and the timestamp of the last build.
Example output:
Name Status Last Build───────────────────────────────────────────────────────my-app success #3 (3/25/2026, 10:14:22 AM)fraud-detector failed #1 (3/24/2026, 4:02:11 PM)content-recommender not built -The Jenkinsfile
Section titled “The Jenkinsfile”Every Spring Boot project generated by blissful-infra includes a backend/Jenkinsfile. The pipeline stages are:
- Checkout: fetches the source from the local path configured in the job
- Build: runs
./gradlew buildinside the backend directory - Test: runs
./gradlew testand publishes JUnit results - Docker build: builds the backend Docker image and tags it with the build number
- Push: pushes the image to the local registry at
localhost:5050
The pipeline uses Docker-in-Docker so the Gradle build runs in an isolated container and the resulting image is pushed to your local registry.
Jenkins credentials reference
Section titled “Jenkins credentials reference”| Field | Value |
|---|---|
| URL | http://localhost:8081 |
| Username | admin |
| Password | admin |
| Registry | localhost:5050 |
| Data directory | ~/.blissful-infra/jenkins/ |