Solución de problemas de los resultados de CodeQL

Completado

En esta unidad se proporcionan sugerencias para optimizar y solucionar problemas al trabajar con CodeQL y el análisis de código.

Optimización de los entornos de ejecución de análisis de CodeQL

Hay varias razones por las que el análisis de CodeQL puede tardar demasiado tiempo en completarse:

  • Si usa ejecutores autohospedados para el análisis de CodeQL, puede aumentar la memoria o el número de núcleos.
  • Los problemas pueden producirse cuando un repositorio contiene varios idiomas. Puede modificar el flujo de trabajo para usar una matriz que acelere el análisis de varios idiomas. El análisis de cada lenguaje se ejecuta en paralelo con el flujo de trabajo de análisis de CodeQL predeterminado. Es posible que tenga que configurar flujos de trabajo avanzados de forma similar si están configurados para ejecutar la inicialización y el análisis del lenguaje secuencialmente.
  • La cantidad de código que está analizando puede provocar tiempos de ejecución largos. El tiempo de análisis suele ser proporcional a la cantidad de código que se está analizando. Puede reducir el tamaño del código excluyendo el código de prueba o dividiendo el código en varios flujos de trabajo para analizar solo un subconjunto con cada examen.
  • Puede que quiera activar el análisis en el evento schedule solo si el análisis es demasiado lento durante los eventos push o pull_request.

Optimización de consultas CodeQL

Algunos problemas de rendimiento pueden surgir de consultas personalizadas. Puede encontrar problemas comunes y cómo solucionarlos en la documentación de CodeQL sobre cómo solucionar problemas de rendimiento de las consultas.

Estos son puntos importantes que debe tener en cuenta mientras trabaja con CodeQL y el lenguaje de consulta QL:

  • Los predicados y clases de CodeQL se evalúan para las tablas de bases de datos. Los predicados grandes generan tablas grandes con muchas filas, por lo que son costosas de calcular.
  • El lenguaje QL se implementa a través de operaciones de base de datos estándar y álgebra relacional, como combinación, proyección y unión.
  • Las consultas se evalúan de abajo arriba, lo que significa que un predicado no se evalúa hasta que se evalúan todos los predicados de los que depende.

Depuración de artefactos

Puede obtener artefactos para ayudarle a depurar problemas con el análisis de código CodeQL. Modifique el init paso del archivo de flujo de trabajo codeQL y establezca debug: true. Los artefactos de depuración se cargan en el flujo de trabajo y se ejecutan como un artefacto denominado debug-artifacts. Los datos contienen los registros de CodeQL, las bases de datos CodeQL y los archivos SARIF que genera el flujo de trabajo.

Solución de problemas de la extensión CodeQL para VS Code

Los archivos de registro de la extensión de VS Code tienen información detallada para ayudarle a solucionar problemas.

Los mensajes de progreso y error aparecen como notificaciones en la esquina inferior derecha del área de trabajo. Puede usar la lista desplegable Registro de extensión de CodeQL para seleccionar los registros que necesita.

Captura de pantalla que muestra la selección de registros en la vista Salida.

Mensajes de error comunes

Para solucionar problemas del flujo de trabajo de CodeQL, familiarícese con los siguientes mensajes de error comunes.

Error: "Error del servidor"

Si se produce un error en una ejecución de flujo de trabajo para el examen de código debido a un error de servidor, es posible que se produzca un problema de comunicación transitorio. Intente volver a ejecutar el flujo de trabajo. Si el problema persiste, póngase en contacto con el soporte técnico de GitHub.

Error: "Fuera del disco" o "Memoria insuficiente"

CodeQL podría quedarse sin espacio en disco o memoria en el ejecutor si los proyectos son demasiado grandes. Si es un ejecutor de Acciones de GitHub hospedado, póngase en contacto con el soporte técnico de GitHub para investigar el problema. Si es un ejecutor autohospedado, es posible que tenga que realizar ajustes en las especificaciones del servidor. Para obtener más información, consulte la documentación de CodeQL sobre el hardware recomendado para ejecutar CodeQL.

Error: 403 "Recurso no accesible por integración" al usar Dependabot

Dependabot se considera que no es de confianza cuando desencadena una ejecución de flujo de trabajo. El flujo de trabajo se ejecuta con ámbitos de solo lectura. La carga de los resultados del examen de código para una rama normalmente requiere security_events: write scope. Sin embargo, el examen de código siempre permite la carga de resultados cuando el pull_request evento desencadena la ejecución de la acción. Para las ramas de Dependabot, se recomienda usar el evento pull_request en lugar del evento push.

Un enfoque sencillo es realizar la ejecución al enviar cambios a la rama predeterminada y a cualquier otra rama importante de larga duración, así como solicitudes de incorporación de cambios abiertas en este conjunto de ramas.

Este es un ejemplo:

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

Error: "Se rechazó la carga SARIF debido a la configuración predeterminada"

Las cargas SARIF se bloquean cuando la configuración predeterminada de CodeQL está habilitada. Este error se produce cuando un proceso intenta cargar un archivo SARIF que contiene los resultados del análisis de CodeQL en un repositorio con la configuración predeterminada habilitada. El error también se produce si la carga se realiza a través de la API REST y la CLI de CodeQL. Este bloque está implementado para reducir el potencial de confusión del usuario cuando varios sistemas generan alertas de análisis de código similares.

Este error solo se produce para los archivos SARIF que contienen resultados que se crean mediante CodeQL. Para corregir este error, deshabilite CodeQL en el repositorio y vuelva a intentar cargar el archivo SARIF.

Lectura adicional

Para obtener más información sobre la solución de problemas, consulte la documentación de CodeQL para solucionar problemas de análisis de código.