Skip to main content

Solucionar problemas del ejecutor de CodeQL en tu sistema de IC

Si estás teniendo problemas con el CodeQL runner, puedes solucionarlos si utilizas estos tips.

Code scanning is available for organization-owned repositories in GitHub Enterprise Server. This feature requires a license for GitHub Advanced Security. Para más información, consulte "Acerca de GitHub Advanced Security".

Nota: CodeQL runner está en desuso. En GitHub Enterprise Server 3.0 y posterior, puede instalar la versión 2.6.3 de CodeQL CLI para reemplazar CodeQL runner.

Para más información, vea Ejecutor de CodeQL en desuso. Para obtener información sobre la migración a CodeQL CLI, vea "Migración del ejecutor de CodeQL a la CLI de CodeQL".

El comando init tarda demasiado

Antes de que el CodeQL runner pueda compilar y analizar código, necesita tener acceso al paquete de CodeQL, el cual contiene la CLI de CodeQL y las bibliotecas de CodeQL.

Al usar CodeQL runner por primera vez en la máquina, el comando init descarga el paquete CodeQL. Esta descarga puede demorar algunos minutos. El paquete de CodeQL se guarda en el caché entre las ejecuciones, así que si utilizas el CodeQL runner nuevamente en la misma máquina, no descargará el paquete de CodeQL nuevamente.

Para evitar esta descarga automática, puede descargar manualmente el paquete CodeQL en la máquina y especificar la ruta mediante la marca --codeql-path del comando init.

No se encontró código durante la compilación

Si se produce un error No source code was seen during the build en el comando analyze para CodeQL runner, esto indica que CodeQL no ha podido supervisar el código. Hay muchas razones que podrían explicar esta error.

  1. La detección automática del lenguaje identificó un lenguaje compatible, pero no hay código analizable en dicho lenguaje dentro del repositorio. Un ejemplo típico es cuando nuestro servicio de detección de lenguaje encuentra un archivo asociado a un lenguaje de programación específico, como un archivo .h o .gyp, pero en el repositorio no existe el código ejecutable correspondiente. Para solucionar el problema, puede definir manualmente los lenguajes que quiere analizar mediante la marca --languages del comando init. Para más información, vea "Configuración de CodeQL runner en el sistema de CI".

  2. Va a analizar un lenguaje compilado sin usar el comando autobuild y ejecuta los pasos de compilación después del paso init. Para que funcione la compilación, debes configurar el ambiente para que el CodeQL runner pueda monitorear el proceso de compilación. El comando init genera instrucciones sobre cómo exportar las variables de entorno necesarias, por lo que puedes copiar y ejecutar el script después de ejecutar el comando init.

    • En macOS y Linux:
      $ . codeql-runner/codeql-env.sh
    • En Windows, mediante el shell de comandos (cmd) o un archivo por lotes (.bat):
      > call codeql-runner\codeql-env.bat
    • En Windows, utilizando PowerShell:
      > cat codeql-runner\codeql-env.sh | Invoke-Expression

    Las variables de entorno también se almacenan en el archivo codeql-runner/codeql-env.json. Este archivo contiene solo un objeto de JSON que mapea las claves de variable de ambiente a valores. Si no puede ejecutar el script que ha generado el comando init, en su lugar puede usar los datos en formato JSON.

    Nota: Si ha usado la marca --temp-dir del comando init a fin de especificar un directorio personalizado para los archivos temporales, la ruta a los archivos codeql-env podría ser diferente.

  3. Va a analizar un lenguaje compilado en macOS sin usar el comando autobuild y ejecuta los pasos de compilación después del paso init. Si está habilitada la SIP (Protección Integral del Sistema, por sus siglas en inglés), que es lo predeterminado en las versiones más recientes de OSX, el análisis podría fallar. Para corregirlo, use la variable de entorno $CODEQL_RUNNER como prefijo del comando de compilación. Por ejemplo, si el comando de compilación es cmd arg1 arg2, debe ejecutar $CODEQL_RUNNER cmd arg1 arg2.

  4. El código se compila en un contenedor o en una máquina independiente. Si utilizas una compilación que ya esté en un contenedor o si terciarizas la compilación a otra máquina, asegúrate de ejecutar el CodeQL runner en el contenedor o en la máquina en donde toma lugar tu tarea de compilación. Para más información, vea "Ejecución del análisis de código de CodeQL en un contenedor".