{"meta":{"title":"Análisis de código de CodeQL para lenguajes compilados","intro":"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.","product":"Seguridad y calidad del código","breadcrumbs":[{"href":"/es/code-security","title":"Seguridad y calidad del código"},{"href":"/es/code-security/how-tos","title":"How-tos"},{"href":"/es/code-security/how-tos/find-and-fix-code-vulnerabilities","title":"Búsqueda y corrección de vulnerabilidades de código"},{"href":"/es/code-security/how-tos/find-and-fix-code-vulnerabilities/manage-your-configuration","title":"Administración de la configuración"},{"href":"/es/code-security/how-tos/find-and-fix-code-vulnerabilities/manage-your-configuration/codeql-code-scanning-for-compiled-languages","title":"CodeQL para lenguajes compilados"}],"documentType":"article"},"body":"# Análisis de código de CodeQL para lenguajes compilados\n\nComprenda 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.\n\n## Comparación de modos de compilación\n\n<div class=\"ghd-tool rowheaders\">\n\n| Característica del modo de compilación                                        | Ninguno                      | Autocompilación               | Manual                    |\n| ----------------------------------------------------------------------------- | ---------------------------- | ----------------------------- | ------------------------- |\n| Se usa de forma predeterminada y para la habilitación a nivel de organización | Sí (C/C++, C#, Java y Rust)  | Sí, donde `none` no se admite | No                        |\n| El análisis se realiza correctamente sin la configuración del usuario         | Sí                           | Variable                      | No                        |\n| Integridad del análisis                                                       | Código generado no analizado | Variable                      | Controlado por el usuario |\n| Precisión del análisis                                                        | Bueno                        | Bueno                         | Óptima                    |\n\n</div>\n\n## Elegir un modo de compilación\n\nCuando 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.\n\nPara 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](/es/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages).\n\n## Uso de varios modos de compilación en un repositorio de varios lenguajes\n\nEn 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.\n\n```yaml\nstrategy:\n  matrix:\n    include:\n      # Analyzes C and C++ code using the commands in `Build C and C++ code`\n      - language: c-cpp\n        build-mode: manual\n      # Analyzes C# code by automatically detecting a build\n      - language: csharp\n        build-mode: autobuild\n      # Analyzes Java code directly from the codebase without a build\n      - language: java-kotlin\n        build-mode: none # analyzes Java only\nsteps:\n- name: Checkout repository\n  uses: actions/checkout@v5\n\n# Initializes CodeQL tools and creates a codebase for analysis.\n- name: Initialize CodeQL\n  uses: github/codeql-action/init@v4\n  with:\n    languages: ${{ matrix.language }}\n- if: ${{ matrix.build-mode == 'manual' }}\n  name: Build C and C++ code\n  run: |\n    echo 'If you are using a \"manual\" build mode for one or more of the' \\\n      'languages you are analyzing, replace this with the commands to build' \\\n      'your code, for example:'\n    echo ' make bootstrap'\n    echo ' make release'\n    exit 1\n```\n\nPara 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](https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks) 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](https://codeql.github.com/docs/codeql-overview/system-requirements/#additional-software-requirements) en la CodeQL documentación.\n\n## Habilitar el almacenamiento en caché de dependencias para CodeQL\n\nEn el caso de los flujos de trabajo de configuración predeterminados, el almacenamiento en caché de dependencias solo está habilitado para GitHublos ejecutores hospedados en repositorios públicos y privados.\n\nEn el caso de los flujos de trabajo de configuración avanzada, el almacenamiento en caché de dependencias está deshabilitado de forma predeterminada. Para habilitar el almacenamiento en caché de dependencias para CodeQL, use el ajuste `dependency-caching` para la acción CodeQL en su flujo de trabajo avanzado de configuración. Esta configuración acepta los siguientes valores:\n\n* `false`\n  /\n  `none`\n  /\n  `off`: el almacenamiento en caché de dependencias está deshabilitado (valor predeterminado).\n* `restore`: solo se restauran las cachés existentes, no se almacenan nuevas cachés.\n* `store`: solo se almacenan las cachés nuevas, no se almacenan las existentes.\n* `true`\n  /\n  `full`\n  /\n  `on`: se restauran las cachés existentes y se almacenan las cachés nuevas.\n\nPor ejemplo, la siguiente configuración habilitaría el almacenamiento en caché de dependencias para la CodeQL acción:\n\n```yaml\n    # Initializes CodeQL with dependency caching enabled\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: java\n        dependency-caching: true\n```\n\n## Uso del `none` modo de compilación para CodeQL\n\nPara C/C++, C#, Java y Rust, 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.\n\nLa 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:\n\n* Los scripts de compilación no se pueden consultar para obtener información de dependencia y las estimaciones de dependencia son inexactas.\n* Normalmente, el repositorio genera código durante el proceso de compilación.\n\nPara usar `autobuild` o pasos de compilación manual, puedes usar la configuración avanzada.\n\n> \\[!NOTE] 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](/es/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages#building-java-and-kotlin).\n\n## Uso `autobuild` para CodeQL\n\nLa CodeQL acción usa `autobuild` para analizar los lenguajes compilados en los casos siguientes.\n\n* La configuración predeterminada está habilitada y el lenguaje no admite la compilación `none` (compatible con C/C++, C#, Java y Rust).\n* La configuración avanzada está habilitada y el flujo de trabajo especifica `build-mode: autobuild`.\n* 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`).\n\n### Use la opción `build-mode`.\n\n```yaml\n# Initializes the CodeQL tools for scanning.\nname: Analyze\nstrategy:\n  matrix:\n    include:\n      # Analyze C and C++ code\n      - language: c-cpp\n        build-mode: autobuild\n      # Analyze Go code\n      - language: go\n        build-mode: autobuild\n\nsteps:\n  - uses: github/codeql-action/init@v4\n    with:\n      languages: ${{ matrix.language }}\n      build-mode: ${{ matrix.build-mode }}\n```\n\n### Uso del paso Autobuild\n\n```yaml\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: ${{ matrix.language }}\n\n    - name: Autobuild\n      uses: github/codeql-action/autobuild@v4\n```\n\n## Especificar manualmente los pasos de compilación\n\nSolo 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](/es/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/configuring-advanced-setup-for-code-scanning#configuring-advanced-setup-for-a-repository).\n\nSi 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:\n\n* Si el flujo de trabajo especifica un modo de compilación para el lenguaje, cambie el modo de compilación a `manual`.\n* Si el flujo de trabajo contiene un paso `autobuild`, elimine o convierta en comentario el paso `autobuild` en el flujo de trabajo.\n\nDespué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.\n\nActualiza el flujo de trabajo para definir `build-mode` como `manual`.\n\n```yaml\n# Initializes the CodeQL tools for scanning.\n- name: Initialize CodeQL\n- uses: github/codeql-action/init@v4\n  with:\n    languages: ${{ matrix.language }}\n    build-mode: manual\n- uses: github/codeql-action/analyze@v4\n  with:\n    category: \"/language:${{ matrix.language }}\"\n```\n\nComo alternativa, actualice el flujo de trabajo para convertir en comentario el paso \"Autobuild\".\n\n```yaml\n    # Autobuild attempts to build any compiled languages.\n    # - name: Autobuild\n    #  uses: github/codeql-action/autobuild@v4\n```\n\n### Adición de comandos de compilación\n\nCuando 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.\n\n```yaml\n- run: |\n    make bootstrap\n    make release\n```\n\nPara obtener más información sobre la palabra clave `run`, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun).\n\n<!-- For \"no-build\" this is covered earlier in the article under \"About CodeQL build modes\". -->\n\nSi ha agregado pasos de compilación manuales para lenguajes compilados y code scanning sigue sin funcionar en el repositorio, póngase en contacto con con nosotros a través del [Soporte técnico de GitHub](https://support.github.com)."}