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
| Name | Required | Description | Default |
|---|---|---|---|
| jobFullName | Yes | Full path of the Jenkins job | |
| artifactPath | Yes | Relative path to the artifact (e.g., "target/app.jar", "reports/test.xml") | |
| buildNumber | No | Build number (optional, defaults to last build) | |
| format | No | Format for returning binary files (default: text). Use base64 for binary files. |
Implementation Reference
- src/tools/artifact-management.js:58-134 (handler)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"); } }
- src/tools/index.js:241-266 (schema)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"], },
- src/tools/index.js:238-268 (registration)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, },