Exploración de trabajos

Completado

Los trabajos son las piezas fundamentales de los flujos de trabajo de Acciones de GitHub. Cada trabajo es una colección de pasos que se ejecutan secuencialmente en el mismo ejecutor, compartiendo el sistema de archivos y las variables de entorno.

Descripción de la ejecución del trabajo

Características clave de los trabajos

  • Pasos secuenciales: los pasos dentro de un trabajo se ejecutan uno después de otro
  • Entorno compartido: todos los pasos comparten el mismo ejecutor y sistema de archivos
  • Ejecución aislada: cada trabajo obtiene un entorno virtual nuevo
  • Registros que se pueden buscar: las salidas del trabajo se capturan y se pueden buscar automáticamente.
  • Soporte de artefactos: los trabajos pueden guardar y compartir archivos entre ejecuciones de flujo de trabajo

Estructura de trabajo básica

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

Ejecución en paralelo frente a secuencial

Ejecución en paralelo (valor predeterminado)

De forma predeterminada, varios trabajos se ejecutan simultáneamente para minimizar la duración del flujo de trabajo:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Run linter
        run: npm run lint

  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Run tests
        run: npm test

  # Both lint and test jobs run simultaneously

Ejecución secuencial con dependencias

Usa la needs palabra clave para crear dependencias de trabajo:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Build application
        run: ./build.sh

  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Run integration tests
        run: ./test.sh

  deploy:
    needs: [build, test] # Waits for multiple jobs
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to production
        run: ./deploy.sh

Patrones de trabajo avanzados

Estrategia de matriz para varias configuraciones

Ejecutar trabajos en varios entornos simultáneamente:

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [18, 20, 22]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm test

Ejecución de trabajos condicionales

Ejecute trabajos solo cuando se cumplan condiciones específicas:

jobs:
  deploy:
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to production
        run: echo "Deploying to production"

  notify:
    needs: deploy
    if: failure() # Only runs if deploy job fails
    runs-on: ubuntu-latest
    steps:
      - name: Send failure notification
        run: echo "Deployment failed!"

Control de errores de trabajo

Comportamiento predeterminado

  • Si se produce un error en algún paso, se produce un error en todo el trabajo.
  • Los trabajos dependientes no se ejecutarán si se producen errores en sus requisitos previos
  • El flujo de trabajo se marca como erróneo.

Control del comportamiento de errores

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Run tests (continue on error)
        run: npm test
        continue-on-error: true

      - name: Upload test results
        if: always() # Runs regardless of previous step outcome
        uses: actions/upload-artifact@v4
        with:
          name: test-results
          path: test-results.xml

Procedimientos recomendados para trabajos

  • Mantener los trabajos centrados: cada trabajo debe tener una sola responsabilidad
  • Usar nombres descriptivos: hacer que los propósitos del trabajo sean claros en la interfaz de usuario del flujo de trabajo
  • Optimización de dependencias: cree solo las dependencias cuando sea realmente necesario
  • Elección de los ejecutores adecuados: Coincidencia del sistema operativo del ejecutor con las necesidades de la aplicación
  • Maneje los fallos de manera elegante: use la ejecución condicional y continúe ante un error estratégicamente
  • Compartir datos de manera eficiente: utilice artefactos o resultados para pasar datos entre trabajos

Para obtener opciones completas de configuración de trabajos, consulte Uso de trabajos en un flujo de trabajo.