updateBuild
Modify Jenkins build display names and descriptions to maintain accurate tracking and documentation of build processes.
Instructions
Update build display name and/or description
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| buildNumber | No | Build number (optional, defaults to last build) | |
| description | No | New description for the build | |
| displayName | No | New display name for the build | |
| jobFullName | Yes | Full path of the Jenkins job |
Implementation Reference
- src/tools/build-management.js:173-263 (handler)The main handler function that performs the updateBuild tool logic: fetches build info, attempts to update description via POST to submitDescription endpoint, notes displayName not supported via REST, returns success/failure with details.export async function updateBuild(client, args) { const { jobFullName, buildNumber = null, displayName = null, description = null, } = args; const jobPath = encodeJobPath(jobFullName); const buildPath = buildNumber || "lastBuild"; try { const buildInfo = await client.get( `${client.baseUrl}/job/${jobPath}/${buildPath}/api/json?tree=number,url,description` ); if (buildInfo.status !== 200) { return failure( "updateBuild", `Build not found: ${jobFullName}#${buildPath}`, { statusCode: buildInfo.status } ); } const actualBuildNumber = buildInfo.data.number; const buildUrl = buildInfo.data.url; const updates = []; // Update description if (description !== null && description !== undefined) { try { const formData = new URLSearchParams(); formData.append("description", description); const response = await client.post( `${client.baseUrl}/job/${jobPath}/${actualBuildNumber}/submitDescription`, formData.toString(), { headers: { "Content-Type": "application/x-www-form-urlencoded", }, } ); if (isSuccessStatus(response.status)) { updates.push({ field: "description", success: true, newValue: description, statusCode: response.status, }); } else { updates.push({ field: "description", success: false, error: `Failed with status ${response.status}`, }); } } catch (error) { updates.push({ field: "description", success: false, error: error.message, }); } } // Display name - not available via REST API if (displayName !== null && displayName !== undefined) { updates.push({ field: "displayName", success: false, error: "Not supported via REST API", workaround: "Use Jenkins Script Console with Groovy script", }); } return updates.some((u) => u.success) ? success("updateBuild", { buildNumber: actualBuildNumber, buildUrl, updates, }) : failure("updateBuild", "No updates applied", { buildNumber: actualBuildNumber, buildUrl, updates, }); } catch (error) { return formatError(error, "updateBuild"); } }
- src/tools/index.js:106-128 (schema)Input schema defining parameters for updateBuild: jobFullName (required), optional buildNumber, displayName, description.inputSchema: { type: "object", properties: { jobFullName: { type: "string", description: "Full path of the Jenkins job", }, buildNumber: { type: "integer", description: "Build number (optional, defaults to last build)", }, displayName: { type: "string", description: "New display name for the build", }, description: { type: "string", description: "New description for the build", }, }, required: ["jobFullName"], },
- src/tools/index.js:103-130 (registration)Tool registration in toolRegistry object, including name, description, inputSchema, and reference to the handler function imported from build-management.js.updateBuild: { name: "updateBuild", description: "Update build display name and/or description", inputSchema: { type: "object", properties: { jobFullName: { type: "string", description: "Full path of the Jenkins job", }, buildNumber: { type: "integer", description: "Build number (optional, defaults to last build)", }, displayName: { type: "string", description: "New display name for the build", }, description: { type: "string", description: "New description for the build", }, }, required: ["jobFullName"], }, handler: updateBuild, },