Jenkins Context Retrieval¶
getCurrentContext Method Documentation¶
The getCurrentContext method is a core utility within the ChatbotApiAction class. It generates a cascading JSON payload that encapsulates the current state and context of the Jenkins environment, based on the page the user is currently viewing (inferred from the HTTP Referer header).
Method Signature¶
private JSONObject getCurrentContext(StaplerRequest2 request)
Parameters¶
request(StaplerRequest2): The incoming HTTP request from the user’s browser, which includes headers such as theRefererused to deduce the current UI path.
Returns¶
JSONObject: A structured JSON object containing the context payload. This object is populated progressively depending on the depth of the user’s current view (e.g., Global Dashboard -> Job -> Specific Build).
Logic and Data Flow¶
Base Initialization:
Initializes the root
JSONObject.Attempts to extract the current UI path using
getUIPath(request).Uses
GlobalAiDecoratorto map the path to a recognizablecurrentScreenname.
Level 1: Dashboard Context:
Unconditionally calls
addDashboardContext(rootNode)to append core system data, active plugins, controller (Master Node) hardware/memory stats, and agent online/offline status.
Level 2: Job Context:
Parses the
RefererURL to check if the user is currently navigating a specific job (/job/).Extracts the job name and verifies if the user has the required
Item.READpermissions for that specific job.If valid, calls
addJobContext(rootNode, targetJob)to append job-specific metadata (e.g., job type, health score, upstream/downstream dependencies, and configuration XML).
Level 3: Build Context:
If a specific build number is successfully parsed from the URL, it retrieves the corresponding
Runobject.Calls
addBuildContext(rootNode, targetRun)to append execution-specific details (e.g., status, duration, test results, parameters, execution node, SCM changes, and console log tails).
Error Handling:
If any parsing or retrieval step fails, it catches the exception and appends a
contextParsingErrorfield to the root JSON object, ensuring the context generation does not crash the proxy request.
Resulting JSON Structure (Conceptual)¶
Depending on how deep the user is navigating, the resulting payload will look similar to this:
{
"currentScreen": "Build Job Pipeline2",
"jenkinsVersion": "2.528.3",
"rootUrl": "http://localhost:8080/jenkins/",
"activePlugins": {
"user-guide-ai-chatbot": "999999-SNAPSHOT (private-b32bb79d-Claudio)",
"antisamy-markup-formatter": "173.v680e3a_b_69ff3",
"asm-api": "9.10.1-216.va_9256d3b_844b_",
// ...
},
"masterNode": {
"executors": 2,
"isOnline": true,
"systemInfo": {
"osName": "Windows 11",
"osArch": "amd64",
"osVersion": "10.0",
"javaVersion": "21.0.10",
"availableProcessors": 22,
"freeMemoryMB": 316,
"totalMemoryMB": 512,
"maxMemoryMB": 1024
}
},
"agentStats": {
"onlineAgents": 0,
"offlineAgents": 0
},
"jobDetails": {
"fullName": "Pipeline2",
"jobType": "WorkflowJob",
"url": "http://localhost:8080/jenkins/job/Pipeline2/",
"isBuildable": true,
"inQueue": false,
"healthScore": 50,
"configXml": "<?xml version='1.1' encoding='UTF-8'?>\n<flow-definition plugin=\"workflow-job@1571.1580.v18e46842c125\">\n <actions>\n <org.jenkinsci.plugins
...more",
"isPipeline": true
},
"buildDetails": {
"number": 2,
"result": "SUCCESS",
"duration": 2074,
"timestamp": 1785667366331,
"causes": [
"Started by user anonymous"
],
"consoleLogTail": "Started by user unknown or anonymous\n[Pipeline] Start of Pipeline\n[Pipeline] node\nRunning on Jenkins in...more",
"previousBuild": {
"number": 1,
"result": "FAILURE"
}
},
"contextParsingError": null
}