How to Check Jenkins Build Status via CLI (Using cURL/REST API or Built-in Commands)


2 views

When automating CI/CD pipelines, checking build status through the command line becomes essential. Jenkins provides multiple ways to achieve this - either through its REST API or built-in CLI tools.

The most flexible approach is using Jenkins' JSON API with cURL:


# Get last build status of a specific job
curl -s "http://jenkins-server/job/MY_JOB_NAME/lastBuild/api/json" \
  --user username:api_token \
  | jq '.result'

Required parameters:

  • Replace jenkins-server with your Jenkins URL
  • MY_JOB_NAME with your job name
  • API token can be generated at Jenkins → People → User → Configure → API Token

Jenkins provides a built-in CLI client (JAR file):


# Download CLI client
wget http://jenkins-server/jnlpJars/jenkins-cli.jar

# Check build status
java -jar jenkins-cli.jar -s http://jenkins-server/ \
  -auth username:api_token \
  build MY_JOB_NAME -v -s

For advanced users, Groovy scripts can be executed remotely:


echo "println Jenkins.instance.getItem('MY_JOB_NAME').lastBuild.result" \
  | java -jar jenkins-cli.jar -s http://jenkins-server/ \
  groovy =

Here's a complete bash script to monitor build status:


#!/bin/bash
JENKINS_URL="http://jenkins-server"
JOB_NAME="deploy-production"
BUILD_STATUS=$(curl -s "$JENKINS_URL/job/$JOB_NAME/lastBuild/api/json" \
  --user $USER:$API_TOKEN | jq -r '.result')

case $BUILD_STATUS in
  "SUCCESS") echo "Build succeeded!";;
  "FAILURE") echo "Build failed!";;
  "ABORTED") echo "Build aborted!";;
  *) echo "Build status: $BUILD_STATUS";;
esac

For developers who need to monitor Jenkins builds without the web UI, the REST API provides comprehensive access. The API returns JSON data containing all build information including status, duration, and artifacts.


# Basic curl command to check build status
curl -s -u username:apiToken "http://jenkins-server/job/job-name/lastBuild/api/json"

# Sample response structure:
{
  "_class": "hudson.model.FreeStyleBuild",
  "building": false,
  "result": "SUCCESS",
  "timestamp": 1634567890123,
  "url": "http://jenkins-server/job/job-name/123/",
  "changeSets": [...]
}

Several approaches exist for CLI-based monitoring:


# 1. Using Jenkins CLI client (deprecated but still functional)
java -jar jenkins-cli.jar -s http://jenkins-server/ build job-name -v

# 2. Parsing JSON output with jq
curl -s "http://jenkins-server/job/job-name/lastBuild/api/json" | jq -r '.result'

# 3. Checking build status via Python script
import requests
response = requests.get('http://jenkins-server/job/job-name/api/json',
                       auth=('user','apiToken'))
print(response.json()['lastBuild']['result'])

For frequent monitoring, consider this Bash script template:


#!/bin/bash
JENKINS_URL="http://jenkins-server"
JOB_NAME="your-job-name"
USER="username"
API_TOKEN="your-api-token"

status=$(curl -s -u $USER:$API_TOKEN "$JENKINS_URL/job/$JOB_NAME/lastBuild/api/json" \
         | jq -r '.result')

case $status in
  "SUCCESS") echo "Build succeeded" ;;
  "FAILURE") echo "Build failed" ;;
  "UNSTABLE") echo "Build unstable" ;;
  "null") echo "Build in progress" ;;
  *) echo "Unknown status: $status" ;;
esac

For specific use cases:


# Check specific build number
BUILD_NUM=42
curl -s "$JENKINS_URL/job/$JOB_NAME/$BUILD_NUM/api/json" | jq '.result'

# Pipeline-specific status check
curl -s "$JENKINS_URL/job/$JOB_NAME/lastBuild/wfapi/describe" | jq '.status'

When implementing API access:

  • Always use API tokens instead of passwords
  • Consider network encryption (HTTPS)
  • Implement proper error handling for connection issues
  • Cache credentials securely when scripting