Compartir vía


Inicio rápido: Creación de un flujo de trabajo de GitHub con examen de seguridad

En esta guía de inicio rápido aprenderá a crear un flujo de trabajo de GitHub en CodeQL para automatizar la detección de vulnerabilidades en el código base de .NET.

En CodeQL, el código se trata como datos. Las vulnerabilidades de seguridad, los errores y otros problemas se modelan como consultas que se pueden ejecutar en bases de datos extraídas del código.

Requisitos previos

Creación de un archivo de flujo de trabajo

En el repositorio de GitHub, agregue un nuevo archivo YAML al directorio .github/workflows. Elija un nombre de archivo significativo, algo que indique claramente cuál va a ser la función del flujo de trabajo. Para más información, consulte Archivo de flujo de trabajo.

Importante

GitHub requiere que los archivos de composición del flujo de trabajo se coloquen en el directorio .github/workflows.

Normalmente, los archivos de flujo de trabajo definen una composición de una o varias Acciones de GitHub a través de jobs.<job_id>/steps[*]. Para más información, consulte Sintaxis del flujo de trabajo para Acciones de GitHub.

Cree un archivo denominado codeql-analysis.yml y después copie y pegue dentro el siguiente contenido de YML:

name: "CodeQL"

on:
  push:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  pull_request:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  schedule:
    - cron: '0 8 * * 4'

jobs:
  analyze:

    name: analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: ['csharp']

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 2

    - run: git checkout HEAD^2
      if: ${{ github.event_name == 'pull_request' }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}

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

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

En la composición del flujo de trabajo anterior:

  • name: CodeQL define el nombre, "CodeQL" aparecerá en las notificaciones de estado del flujo de trabajo.

    name: "CodeQL"
    
  • El nodo on indica los eventos que desencadenan el flujo de trabajo:

    on:
      push:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      pull_request:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      schedule:
        - cron: '0 8 * * 4'
    
    • Se desencadena cuando se produce push o pull_request en la rama main, en la que algunos archivos han cambiado, finalizando con las extensiones de archivo .cs o .csproj.
    • Como trabajo cron (según una programación), para ejecutarse a las 8:00 UTC cada jueves.
  • El nodo jobs genera los pasos necesarios para que el flujo de trabajo se realice.

    jobs:
      analyze:
    
        name: analyze
        runs-on: ubuntu-latest
    
        strategy:
          fail-fast: false
          matrix:
            language: ['csharp']
    
        steps:
        - name: Checkout repository
          uses: actions/checkout@v3
          with:
            fetch-depth: 2
    
        - run: git checkout HEAD^2
          if: ${{ github.event_name == 'pull_request' }}
    
        - name: Initialize CodeQL
          uses: github/codeql-action/init@v1
          with:
            languages: ${{ matrix.language }}
    
        - name: Autobuild
          uses: github/codeql-action/autobuild@v1
    
        - name: Perform CodeQL Analysis
          uses: github/codeql-action/analyze@v1
    
    • Hay un único trabajo, denominado analyze, que se ejecutará en la versión más reciente de Ubuntu.
    • strategy define C# como language.
    • La Acción de GitHub github/codeql-action/init@v1 se usa para inicializar CodeQL.
    • La Acción de GitHub github/codeql-action/autobuild@v1 compila el proyecto de .NET.
    • La Acción de GitHub github/codeql-action/analyze@v1 realiza el análisis de CodeQL.

Para más información, consulte Acciones de GitHub: Configuración del examen de código.

Creación de una notificación de estado de flujo de trabajo

Es habitual que los repositorios de GitHub tengan un archivo README.md en la raíz del directorio del repositorio. Del mismo modo, es deseable que se notifique el estado más reciente de varios flujos de trabajo. Todos los flujos de trabajo pueden generar notificaciones de estado, que son visualmente llamativas en el archivo README.md. Para agregar la notificación de estado del flujo de trabajo:

  1. En el repositorio de GitHub, seleccione la opción de navegación Acciones.

  2. Todos los flujos de trabajo del repositorio se muestran en el lado izquierdo, seleccione el flujo de trabajo deseado y el botón de puntos suspensivos (...).

    • El botón de puntos suspensivos (...) expande las opciones del menú del flujo de trabajo seleccionado.
  3. Seleccione la opción del menú Crear notificación de estado.

    GitHub: Create status badge

  4. Seleccione el botón Copiar notificación de estado Markdown.

    GitHub: Copy status badge Markdown

  5. Pegue Markdown en el archivo README.md, guarde el archivo, confirme y envíe los cambios.

Para más información, consulte Agregar una notificación de estado de flujo de trabajo.

Ejemplos de las notificaciones de estado de flujo de trabajo de CodeQL

Correcto Con errores Sin estado
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

Consulte también

Pasos siguientes