Jobs erkunden

Abgeschlossen

Aufträge sind die Bausteine von GitHub Actions-Workflows. Jeder Job ist eine Sammlung von Schritten, die nacheinander auf demselben Runner ausgeführt werden und das Dateisystem sowie die Umgebungsvariablen teilen.

Grundlegendes zur Auftragsausführung

Wichtige Merkmale von Aufträgen

  • Sequenzielle Schritte: Schritte innerhalb eines Auftrags werden nacheinander ausgeführt
  • Freigegebene Umgebung: Alle Schritte verwenden denselben Läufer und dasselbe Dateisystem.
  • Isolierte Ausführung: Jeder Auftrag erhält eine neue virtuelle Umgebung
  • Durchsuchbare Protokolle: Ergebnisse von Aufträgen werden automatisch erfasst und sind durchsuchbar
  • Artefakt-Unterstützung: Aufträge können Dateien zwischen Workflowausführungen speichern und freigeben

Grundlegende Auftragsstruktur

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

Parallele und sequenzielle Ausführung

Parallele Ausführung (Standard)

Standardmäßig werden mehrere Aufträge gleichzeitig ausgeführt, um die Workflowdauer zu minimieren:

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

Sequenzielle Ausführung mit Abhängigkeiten

Verwenden Sie das needs Schlüsselwort zum Erstellen von Auftragsabhängigkeiten:

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

Erweiterte Jobmuster

Matrixstrategie für mehrere Konfigurationen

Gleichzeitiges Ausführen von Aufträgen in mehreren Umgebungen:

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

Bedingte Ausführung von Aufträgen

Ausführen von Aufträgen nur, wenn bestimmte Bedingungen erfüllt sind:

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!"

Behandlung von Jobfehlern

Standardverhalten

  • Wenn ein Schritt fehlschlägt, schlägt der gesamte Auftrag fehl.
  • Abhängige Aufträge werden nicht ausgeführt, wenn ihre Voraussetzungen fehlschlagen
  • Der Workflow ist als fehlgeschlagen gekennzeichnet.

Steuern des Fehlerverhaltens

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

Bewährte Methoden für Aufträge

  • Halten Sie Aufträge im Fokus: Jeder Auftrag sollte eine einzige Verantwortung haben
  • Verwenden Sie beschreibende Namen: Stellen Sie Aufgabenzwecke in der Workflowbenutzeroberfläche klar
  • Optimieren von Abhängigkeiten: Erstellen von Abhängigkeiten nur, wenn sie wirklich erforderlich sind
  • Wählen Sie geeignete Runner aus: Passen Sie das Runner-Betriebssystem an Ihre Anwendungsanforderungen an
  • Ordnungsgemäßes Behandeln von Fehlern: Verwenden Sie die bedingte Ausführung und das Weiterfahren bei Fehler strategisch
  • Effizientes Freigeben von Daten: Verwenden von Artefakten oder Ausgaben zum Übergeben von Daten zwischen Aufträgen

Umfassende Konfigurationsoptionen für Aufträge finden Sie unter "Verwenden von Aufträgen in einem Workflow".