Skip to main content

Esta versión de GitHub Enterprise Server se discontinuará el 2026-04-09. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener rendimiento mejorado, seguridad mejorada y nuevas características, actualice a la versión más reciente de GitHub Enterprise Server. Para obtener ayuda con la actualización, póngase en contacto con el soporte técnico de GitHub Enterprise.

Análisis de código de CodeQL para lenguajes compilados

Comprenda cómo CodeQL analiza los lenguajes compilados, las opciones de compilación disponibles y aprenda a personalizar el proceso de generación de bases de datos si es necesario.

¿Quién puede utilizar esta característica?

Usuarios con acceso de escritura if advanced setup is already enabled

Code scanning está disponible para los tipos de repositorio siguientes:

  • Repositorios públicos en GitHub.com
  • Repositorios propiedad de la organización en GitHub Team, GitHub Enterprise Cloud, o GitHub Enterprise Server, con GitHub Advanced Security habilitados.

Nota:

El administrador del sitio debe habilitar code scanning antes de que puedas utilizar esta característica. Si quieres utilizar GitHub Actions para escanear tu código, el administrador de sitio también puede habilitar las GitHub Actions y configurar la infraestructura que se requiera. Para más información, consulta Configuración la digitalización de código para el dispositivo.

Comparación de modos de compilación

Característica del modo de compilaciónNingunoAutocompilaciónManual
Se usa de forma predeterminada y para la habilitación a nivel de organizaciónSí (C# y Java)Sí, donde none no se admiteNo
El análisis se realiza correctamente sin la configuración del usuarioVariableNo
Integridad del análisisCódigo generado no analizadoVariableControlado por el usuario
Precisión del análisisBuenoBuenoÓptima

Elegir un modo de compilación

Cuando se configura code scanning por primera vez o en varios repositorios, es mejor usar la configuración predeterminada. La configuración predeterminada usa el método más sencillo disponible para generar una CodeQL base de datos y analizar el código, de modo que pueda empezar a corregir las alertas lo antes posible. Una vez que haya resuelto las alertas iniciales, puede cambiar a la configuración avanzada con un proceso de compilación manual para repositorios de alto riesgo.

Para obtener información sobre el comportamiento específico autobuild del lenguaje, los requisitos del ejecutor y los detalles del modo de compilación para los lenguajes compilados, consulte Opciones y pasos de compilación de CodeQL para lenguajes compilados.

Uso de varios modos de compilación en un repositorio de varios lenguajes

En el caso de los repositorios con varios lenguajes compilados, puede usar diferentes modos de compilación para distintos lenguajes. Por ejemplo, si el repositorio contiene C/C++, C# y Java, es posible que desee proporcionar pasos de compilación manuales para un lenguaje (aquí C/C++). Este flujo de trabajo especifica un modo de compilación diferente para cada lenguaje.

strategy:
  matrix:
    include:
      # Analyzes C and C++ code using the commands in `Build C and C++ code`
      - language: c-cpp
        build-mode: manual
      # Analyzes C# code by automatically detecting a build
      - language: csharp
        build-mode: autobuild
      # Analyzes Java code directly from the codebase without a build
      - language: java-kotlin
        build-mode: none # analyzes Java only
steps:
- name: Checkout repository
  uses: actions/checkout@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
  name: Build C and C++ code
  run: |
    echo 'If you are using a "manual" build mode for one or more of the' \
      'languages you are analyzing, replace this with the commands to build' \
      'your code, for example:'
    echo ' make bootstrap'
    echo ' make release'
    exit 1

Para obtener información sobre los lenguajes, bibliotecas y marcos que se admiten en la versión más reciente de CodeQL, vea Lenguajes y marcos admitidos en la CodeQL documentación. Para obtener información sobre los requisitos del sistema para ejecutar la versión más reciente de CodeQL, consulte Requisitos del sistema en la CodeQL documentación.

Uso del none modo de compilación para CodeQL

Para C# y Java, CodeQL crea una base de datos sin necesidad de una compilación cuando se habilita la configuración predeterminada para code scanning a menos que el repositorio también incluya código de Kotlin. Si un repositorio contiene código de Kotlin además de Java código, la configuración predeterminada se habilita con el proceso de creación automática porque el análisis de Kotlin requiere una compilación.

La creación de una CodeQL base de datos sin una compilación puede producir resultados menos precisos que usar autobuild o pasos de compilación manuales si:

  • Los scripts de compilación no se pueden consultar para obtener información de dependencia y las estimaciones de dependencia son inexactas.
  • Normalmente, el repositorio genera código durante el proceso de compilación.

Para usar autobuild o pasos de compilación manual, puedes usar la configuración avanzada.

Nota:

Para el análisis de Java, si build-mode está establecido en none y el código de Kotlin se encuentra en el repositorio, no se analizará el código de Kotlin y se generará una advertencia. Consulte Opciones y pasos de compilación de CodeQL para lenguajes compilados.

Uso autobuild para CodeQL

La CodeQL acción usa autobuild para analizar los lenguajes compilados en los casos siguientes.

  • La configuración predeterminada está habilitada y el lenguaje no admite la compilación none (compatible con C# y Java).
  • La configuración avanzada está habilitada y el flujo de trabajo especifica build-mode: autobuild.
  • La configuración avanzada está habilitada y el flujo de trabajo tiene un paso de Autobuild para el lenguaje mediante la acción autobuild (github/codeql-action/autobuild@v4).

Use la opción build-mode.

# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
  matrix:
    include:
      # Analyze C and C++ code
      - language: c-cpp
        build-mode: autobuild
      # Analyze Go code
      - language: go
        build-mode: autobuild

steps:
  - uses: github/codeql-action/init@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}

Uso del paso Autobuild

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4

Especificar manualmente los pasos de compilación

Solo puede especificar los pasos de compilación manuales si ha habilitado la configuración avanzada, consulte Establecimiento de la configuración avanzada para el examen del código.

Si se produce un error en autobuild, o si quieres analizar otro conjunto de archivos de origen de los compilados por el proceso autobuild, tendrás que hacer lo siguiente:

  • Si el flujo de trabajo especifica un modo de compilación para el lenguaje, cambie el modo de compilación a manual.
  • Si el flujo de trabajo contiene un paso autobuild, elimine o convierta en comentario el paso autobuild en el flujo de trabajo.

Después, quita la marca de comentario del paso run y especifica manualmente el proceso de compilación que se va a usar. Para C/C++, C#, Go, Java, Kotlin y Swift, CodeQL analizará cualquier código fuente generado por los pasos de compilación que hayas especificado.

Actualiza el flujo de trabajo para definir build-mode como manual.

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"

Como alternativa, actualice el flujo de trabajo para convertir en comentario el paso "Autobuild".

    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4

Adición de comandos de compilación

Cuando la compilación manual está habilitada, quite la marca de comentario del paso run en el flujo de trabajo y agregue comandos de compilación adecuados para el repositorio. El paso run ejecuta herramientas de línea de comandos mediante el shell del sistema operativo. Puede modificar estos comandos y agregar más comandos para personalizar el proceso de compilación.

- run: |
    make bootstrap
    make release

Para obtener más información sobre la palabra clave run, consulta Sintaxis del flujo de trabajo para GitHub Actions.

Si ha agregado pasos de compilación manuales para lenguajes compilados y code scanning sigue sin funcionar en el repositorio, póngase en contacto con el administrador del sitio.