cancelQueuedBuild
Cancel pending Jenkins builds before execution to free resources and manage queue efficiently by specifying job name and optional queue ID.
Instructions
Cancel a pending/queued Jenkins build that hasn't started yet
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| jobFullName | Yes | Full path of the Jenkins job | |
| queueId | No | Specific queue item ID to cancel (optional, cancels all queued items for the job if not provided) |
Implementation Reference
- src/tools/queue-management.js:17-151 (handler)Main handler function for canceling queued Jenkins builds. Handles specific queueId or all queued items for a job by fetching queue, filtering, and canceling via API.export async function cancelQueuedBuild(client, args) { const { jobFullName, queueId = null } = args; const jobPath = encodeJobPath(jobFullName); try { // If queueId is provided, cancel that specific item if (queueId) { const cancelResponse = await client.post( `${client.baseUrl}/queue/cancelItem`, `id=${queueId}`, { headers: { "Content-Type": "application/x-www-form-urlencoded", }, } ); if ( isSuccessStatus(cancelResponse.status) || cancelResponse.status === 204 ) { return success("cancelQueuedBuild", { message: `Queue item #${queueId} cancelled successfully`, queueId, method: "direct", }); } else { return failure( "cancelQueuedBuild", `Failed to cancel queue item #${queueId}`, { statusCode: cancelResponse.status } ); } } // If no queueId provided, find and cancel all queued items for this job const queueResponse = await client.get( `${client.baseUrl}/queue/api/json` ); if (queueResponse.status !== 200) { return failure( "cancelQueuedBuild", "Failed to fetch queue information", { statusCode: queueResponse.status } ); } const queueItems = queueResponse.data.items || []; // Find items for this specific job const jobQueueItems = queueItems.filter((item) => { if (item.task && item.task.url) { const itemJobPath = item.task.url .replace(client.baseUrl, "") .replace(/^\//, "") .replace(/\/$/, ""); const targetJobPath = `job/${jobPath}`.replace(/\/$/, ""); return itemJobPath === targetJobPath; } if (item.task && item.task.name) { const jobName = jobFullName.split("/").pop(); return ( item.task.name === jobFullName || item.task.name === jobName ); } return false; }); if (jobQueueItems.length === 0) { return failure( "cancelQueuedBuild", `No queued builds found for job: ${jobFullName}`, { totalQueueItems: queueItems.length } ); } // Cancel all found queue items for this job const cancelResults = []; for (const item of jobQueueItems) { try { const cancelResponse = await client.post( `${client.baseUrl}/queue/cancelItem`, `id=${item.id}`, { headers: { "Content-Type": "application/x-www-form-urlencoded", }, } ); cancelResults.push({ queueId: item.id, success: isSuccessStatus(cancelResponse.status) || cancelResponse.status === 204, statusCode: cancelResponse.status, why: item.why || "No reason provided", inQueueSince: item.inQueueSince, params: item.params, }); } catch (error) { cancelResults.push({ queueId: item.id, success: false, error: error.message, }); } } const successCount = cancelResults.filter((r) => r.success).length; const allSuccess = successCount === cancelResults.length; return allSuccess ? success("cancelQueuedBuild", { message: `Successfully cancelled ${successCount} queued build(s) for ${jobFullName}`, cancelledItems: cancelResults, totalCancelled: successCount, totalFound: jobQueueItems.length, }) : failure( "cancelQueuedBuild", `Cancelled ${successCount} out of ${cancelResults.length} queued build(s)`, { cancelledItems: cancelResults, totalCancelled: successCount, totalFound: jobQueueItems.length, } ); } catch (error) { return formatError(error, "cancel queued build"); } }
- src/tools/index.js:271-291 (registration)Tool registration in the central registry, including name, description, input schema (jobFullName required, queueId optional), and handler reference.cancelQueuedBuild: { name: "cancelQueuedBuild", description: "Cancel a pending/queued Jenkins build that hasn't started yet", inputSchema: { type: "object", properties: { jobFullName: { type: "string", description: "Full path of the Jenkins job", }, queueId: { type: "integer", description: "Specific queue item ID to cancel (optional, cancels all queued items for the job if not provided)", }, }, required: ["jobFullName"], }, handler: cancelQueuedBuild, },
- src/tools/index.js:275-289 (schema)Input schema defining parameters for the cancelQueuedBuild tool.inputSchema: { type: "object", properties: { jobFullName: { type: "string", description: "Full path of the Jenkins job", }, queueId: { type: "integer", description: "Specific queue item ID to cancel (optional, cancels all queued items for the job if not provided)", }, }, required: ["jobFullName"], },