get_job_log
Retrieve pipeline job trace output to debug failed tests and analyze CI/CD failures in GitLab.
Instructions
Get the trace/log output for a specific pipeline job. Perfect for debugging failed tests and understanding CI/CD failures.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ID of the pipeline job (obtained from get_merge_request_pipeline) |
Implementation Reference
- tools/get_job_log.py:8-55 (handler)The primary handler function for the 'get_job_log' tool. Fetches the job trace from GitLab using the get_job_trace helper, formats the log output with Markdown including size info and truncation if necessary, and returns it as TextContent.async def get_job_log(gitlab_url, project_id, access_token, args): """Get the trace/log output for a specific pipeline job""" logging.info(f"get_job_log called with args: {args}") job_id = args["job_id"] try: status, log_data, error = await get_job_trace(gitlab_url, project_id, access_token, job_id) except Exception as e: logging.error(f"Error fetching job log: {e}") raise Exception(f"Error fetching job log: {e}") if status != 200: logging.error(f"Error fetching job log: {status} - {error}") raise Exception(f"Error fetching job log: {status} - {error}") if not log_data or len(log_data.strip()) == 0: result = f"# π Job Log (Job ID: {job_id})\n\n" result += "βΉοΈ No log output available for this job.\n\n" result += "This could mean:\n" result += "β’ The job hasn't started yet\n" result += "β’ The job was skipped\n" result += "β’ The log has been archived or deleted\n" return [TextContent(type="text", text=result)] # Format the output result = f"# π Job Log (Job ID: {job_id})\n\n" # Add log size info log_size_kb = len(log_data) / 1024 result += f"**π Log Size**: {log_size_kb:.2f} KB\n" result += f"**π Lines**: {log_data.count(chr(10)) + 1}\n\n" # Check if we need to truncate max_chars = 15000 # Keep logs reasonable for context if len(log_data) > max_chars: result += "## π Job Output (Last 15,000 characters)\n\n" result += "```\n" result += log_data[-max_chars:] result += "\n```\n\n" result += f"*β οΈ Note: Log truncated from {len(log_data):,} to " result += f"{max_chars:,} characters (showing last portion)*\n" else: result += "## π Job Output\n\n" result += "```\n" result += log_data result += "\n```\n" return [TextContent(type="text", text=result)]
- main.py:164-183 (schema)Input schema definition for the get_job_log tool within the list_tools response. Requires a 'job_id' integer parameter.Tool( name="get_job_log", description=( "Get the trace/log output for a specific pipeline " "job. Perfect for debugging failed tests and " "understanding CI/CD failures." ), inputSchema={ "type": "object", "properties": { "job_id": { "type": "integer", "minimum": 1, "description": ("ID of the pipeline job (obtained from " "get_merge_request_pipeline)"), } }, "required": ["job_id"], "additionalProperties": False, }, ),
- main.py:324-327 (registration)Tool dispatch logic in call_tool method that routes requests for 'get_job_log' to the handler function, passing config parameters.elif name == "get_job_log": return await get_job_log( self.config["gitlab_url"], self.config["project_id"], self.config["access_token"], arguments )
- tools/__init__.py:10-55 (registration)Re-export of the get_job_log handler from its module for convenient import in main.py.from .get_job_log import get_job_log from .get_merge_request_details import get_merge_request_details from .get_merge_request_pipeline import get_merge_request_pipeline from .get_merge_request_reviews import get_merge_request_reviews from .get_merge_request_test_report import get_merge_request_test_report from .get_pipeline_test_summary import get_pipeline_test_summary from .list_merge_requests import list_merge_requests from .reply_to_review_comment import create_review_comment, reply_to_review_comment, resolve_review_discussion __all__ = [ "list_merge_requests", "get_merge_request_reviews", "get_merge_request_details", "get_merge_request_pipeline", "get_merge_request_test_report", "get_pipeline_test_summary", "get_job_log", "get_branch_merge_requests", "reply_to_review_comment", "create_review_comment", "resolve_review_discussion", "get_commit_discussions", ]