Skip to main content
Glama

readBuildArtifact

Retrieve content from Jenkins build artifacts like logs, reports, or binaries by specifying job path and artifact location. Supports text or base64 formats for different file types.

Instructions

Read the content of a specific build artifact

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
jobFullNameYesFull path of the Jenkins job
artifactPathYesRelative path to the artifact (e.g., "target/app.jar", "reports/test.xml")
buildNumberNoBuild number (optional, defaults to last build)
formatNoFormat for returning binary files (default: text). Use base64 for binary files.

Implementation Reference

  • The main asynchronous handler function that reads the content of a specific build artifact from Jenkins, handling text or base64 formats, JSON parsing for JSON files, and error cases.
    export async function readBuildArtifact(client, args) { const { jobFullName, artifactPath, buildNumber = null, format = "text", } = args; const jobPath = encodeJobPath(jobFullName); const buildPath = buildNumber || "lastBuild"; try { // Get the actual build number if using 'lastBuild' let actualBuildNumber = buildNumber; if (!buildNumber) { const buildResponse = await client.get( `/job/${jobPath}/${buildPath}/api/json?tree=number` ); if (buildResponse.status === 200) { actualBuildNumber = buildResponse.data.number; } else { throw new Error("Could not determine build number"); } } const artifactUrl = `/job/${jobPath}/${actualBuildNumber}/artifact/${artifactPath}`; const responseType = format === "base64" ? "arraybuffer" : "text"; const response = await client.get(artifactUrl, { responseType }); if (response.status === 200) { let content; const mimeType = getMimeType(artifactPath); if (format === "base64") { content = Buffer.from(response.data).toString("base64"); } else { content = response.data; const extension = artifactPath.split(".").pop().toLowerCase(); if ( extension === "json" || (typeof content === "string" && content.trim().startsWith("{")) ) { try { content = JSON.parse(content); } catch {} } } return success("readBuildArtifact", { artifact: { path: artifactPath, buildNumber: actualBuildNumber, mimeType, format, size: response.headers["content-length"] || null, content, }, }); } return failure( "readBuildArtifact", `Artifact not found: ${artifactPath} in build ${actualBuildNumber}`, { statusCode: response.status } ); } catch (error) { if (error.response && error.response.status === 404) { return failure( "readBuildArtifact", `Artifact not found: ${artifactPath}`, { statusCode: 404 } ); } return formatError(error, "readBuildArtifact"); } }
  • Input schema defining parameters for the readBuildArtifact tool: jobFullName (required), artifactPath (required), buildNumber (optional), format (text or base64).
    inputSchema: { type: "object", properties: { jobFullName: { type: "string", description: "Full path of the Jenkins job", }, artifactPath: { type: "string", description: 'Relative path to the artifact (e.g., "target/app.jar", "reports/test.xml")', }, buildNumber: { type: "integer", description: "Build number (optional, defaults to last build)", }, format: { type: "string", enum: ["text", "base64"], description: "Format for returning binary files (default: text). Use base64 for binary files.", }, }, required: ["jobFullName", "artifactPath"], },
  • Registration of the readBuildArtifact tool in the central toolRegistry, including name, description, inputSchema, and reference to the handler function.
    readBuildArtifact: { name: "readBuildArtifact", description: "Read the content of a specific build artifact", inputSchema: { type: "object", properties: { jobFullName: { type: "string", description: "Full path of the Jenkins job", }, artifactPath: { type: "string", description: 'Relative path to the artifact (e.g., "target/app.jar", "reports/test.xml")', }, buildNumber: { type: "integer", description: "Build number (optional, defaults to last build)", }, format: { type: "string", enum: ["text", "base64"], description: "Format for returning binary files (default: text). Use base64 for binary files.", }, }, required: ["jobFullName", "artifactPath"], }, handler: readBuildArtifact, },

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/umishra1504/Jenkins-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server