Compartir a través de


Solución de problemas de análisis de código

Por lo general, si se producen errores con la ejecución de CodeQL, la CLI de CodeQL notifica el estado de cada comando que se ejecuta como código de salida. El código de salida proporciona información para los comandos posteriores o para otras herramientas que se basan en la CLI de CodeQL. Para obtener más información sobre los detalles del código de salida, consulte Códigos de salida.

Prerrequisitos

Categoría Requisitos
Permisos - Para ver un resumen de todas las alertas de un repositorio: permisos de colaborador para el repositorio.
- Para descartar alertas en Seguridad Avanzada: permisos de administrador de Project.
- Para administrar permisos en Advanced Security: miembro del grupo Administradores de la colección de proyectos o del grupo Advanced Security: administrar configuración con el permiso configurado en Permitir.

Para obtener más información sobre los permisos de Advanced Security, consulte Administrar permisos de Advanced Security.

Error: comando de CodeQL "database finalize" (32)

Este error indica un problema al finalizar la creación de la base de datos de CodeQL, posiblemente debido a errores de extracción o a pasos de compilación que faltan.

Pasos para solucionar problemas:

  1. Comprobación de que el código existe y que está compilado
    • En el caso de los lenguajes compilados, compruebe que el proceso de compilación está compilando código y que está ejecutando entre las tareas AdvancedSecurity-Codeql-Init y AdvancedSecurity-Codeql-Analyze. Los comandos de compilación comunes y las marcas necesarias (como clean no-cache/no-daemon) se pueden encontrar aquí en Especificación de comandos de compilación.
    • En el caso de los lenguajes interpretados, confirme que hay código fuente para el idioma especificado en el proyecto.
  2. Comprobación de errores de extracción
    • Compruebe si los errores de extracción afectan al estado de la base de datos de CodeQL.
    • Revise el archivo de registro para ver si hay errores y advertencias de extracción para evaluar el estado general de la base de datos.
  3. Investigación de errores abrumadores
    • Si la mayoría de los archivos encuentran errores de extracción, investigue más para profundizar en la causa principal de la extracción incorrecta.

Error: script de autobuild (1)

Este error describe un error de compilación automática, lo que sugiere un problema con la configuración o definición del análisis de código.

Pasos para solucionar problemas:

  • Configuración de pasos de compilación

Error: directorios de codeQL no encontrados en la caché de herramientas del agente

Este error indica un problema con la instalación de CodeQL para agentes autohospedados.

Pasos para solucionar problemas:

Error: no se ha establecido la variable de canalización de lenguaje

Este error se produce al intentar ejecutar CodeQL sin establecer la variable de canalización que especifica qué lenguajes se analizarán.

Pasos para solucionar problemas:

  • Establecimiento de la variable de canalización de lenguaje
    • Asegúrese de que la variable de canalización de lenguaje esté configurada correctamente. Consulte las instrucciones de configuración que se indican en Configuración de GitHub Advanced Security para Azure DevOps.
    • Entre los lenguajes admitidos se encuentran los siguientes: csharp, cpp, go, java, javascript, python, ruby y swift.

CodeQL no devuelve ningún resultado

En esta sección se proporcionan instrucciones para situaciones en las que el análisis de CodeQL no produce ningún resultado.

Pasos para solucionar problemas:

  1. Comprobación de vulnerabilidades detectadas
    • Considere la posibilidad de que el código no tenga vulnerabilidades. Si se esperan vulnerabilidades pero no se detectan, continúe con la comprobación.
  2. Revisión de la configuración del conjunto de consultas
    • Confirme el conjunto de consultas que se está usando y considere la posibilidad de cambiar a un conjunto más completo si es necesario.
    • Como alternativa, se pueden crear conjuntos de consultas personalizados para el análisis personalizado.
  3. Ajuste de los permisos para ver los resultados
    • Asegúrese de que se conceden los permisos adecuados, al menos en el nivel de colaborador, para acceder a los resultados del análisis. Para obtener más información, consulte Permisos avanzados de seguridad.

Tiempo de espera de CodeQL

Si la AdvancedSecurity-Codeql-Analyze@1 tarea se muestra This job was abandoned ... we lost contact with the agent y usa un agente hospedado de Microsoft, la tarea alcanza el tiempo de espera integrado de seis horas para los agentes hospedados de pago. En su lugar, podría intentar ejecutar análisis en un agente autohospedado.

Permisos de tarea de examen de código

La tarea de compilación de análisis de código usa la identidad de canalización para llamar a las API de REST de Advanced Security. De forma predeterminada, las canalizaciones del mismo proyecto tienen acceso para cargar el archivo SARIF generado mediante la ejecución de análisis de CodeQL. Si estos permisos se quitan de la cuenta de servicio de compilación o si tiene una configuración personalizada, por ejemplo, una canalización hospedada en un proyecto diferente al del repositorio, conceda estos permisos manualmente.

Pasos para solucionar problemas:

  • Conceda el permiso Advanced Security: View alerts y Advanced Security: Manage and dismiss alerts a la cuenta de servicio de compilación que se usa en la canalización, que para las canalizaciones con ámbito de proyecto es [Project Name] Build Service ([Organization Name]), y para canalizaciones con ámbito de recopilación es Project Collection Build Service ([Organization Name]).

Publicación de resultados del análisis de código en el repositorio no deseado

Si tiene una definición de canalización hospedada en un repositorio y el código fuente que va a examinar GitHub Advanced Security estaba en otro, los resultados se pueden procesar y enviar al repositorio incorrecto, publicar en el repositorio que contiene la definición de canalización en lugar del repositorio de código fuente.

Para habilitar el enrutamiento de resultados previsto, establezca la variable de entorno de la canalización advancedsecurity.publish.repository.infer: true para inferir el repositorio desde el cual publicar en el directorio de trabajo.

trigger:
  - main

resources:
  repositories:
    # PipelineRepo: The repository containing the pipeline definition.
    # This is optional and only needed if you plan to reference files or scripts from this repo.
    - repository: PipelineRepo
      type: git
      name: DevOpsPipelineRepo
      ref: refs/heads/main
      trigger:
        - main
    # SourceRepo: The repository where scanning and publishing will occur.
    - repository: SourceRepo
      type: git
      name: code-to-analyze-repo
      ref: refs/heads/main
      trigger:
        - main

jobs:
  - job: "CodeQLScan"
    displayName: "CodeQL Scanning with Inferred Publishing"
    variables:
      # Enable repository inference
      advancedsecurity.publish.repository.infer: true
    steps:
      # Checkout the SourceRepo
      - checkout: SourceRepo

      # Initialize CodeQL
      - task: AdvancedSecurity-Codeql-Init@1
        displayName: "Initialize CodeQL"
        inputs:
          languages: "python,javascript" # Adjust based on repository languages

      # Perform CodeQL analysis
      - task: AdvancedSecurity-Codeql-Analyze@1
        displayName: "Analyze Code with CodeQL"

Instalación manual del lote CodeQL en el agente autohospedado

Instale la agrupación CodeQL en la caché de herramientas del agente mediante el script de instalación de la arquitectura, disponible en GitHub. Estos scripts requieren que la $AGENT_TOOLSDIRECTORY variable de entorno se establezca en la ubicación del directorio de herramientas del agente en el agente, por ejemplo, C:/agent/_work/_tool. Como alternativa, puede implementar manualmente los pasos siguientes:

  1. Elija la última agrupación de versiones de CodeQL en GitHub.
  2. Descargue y descomprima la agrupación en el siguiente directorio dentro del directorio de herramientas del agente, normalmente ubicado en _work/_tool: ./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/. Con la versión actual de v2.16.0, la carpeta se llamaría ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/. Más información sobre el directorio de herramientas del agente.
  3. Cree un archivo vacío llamado x64.complete dentro de la carpeta ./CodeQL/0.0.0-[codeql-release-bundle-tag]. Siguiendo el ejemplo anterior, la ruta de acceso del archivo final al archivo x64.complete debería ser ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete.

¿Cómo puedo definir explícitamente el repositorio para publicar alertas de análisis de código?

  • Use la variable de entorno de canalización advancedsecurity.publish.repository.infer: true para deducir el repositorio para publicar desde el repositorio en el directorio de trabajo.
  • Como otra opción, si no desactive explícitamente un repositorio o use un alias para desactive el repositorio, use la variable . advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['YourRepositoryAlias']) ]

Para obtener más información, consulte las notas de la versión.