CI/CD with GitHub Actions & DevOps Pipelines · Lektion

Bedingte Ausführung und Job-Abhängigkeiten

Steuern Sie mit if-Bedingungen, dem Schlüsselwort needs, Ausdrücken und Statusprüfungsfunktionen, wann Schritte und Jobs in GitHub-Actions-Workflows ausgeführt werden.

Lektion 4 von 413 Schritte

Bedingte Ausführung und Job-Abhängigkeiten ist eine kostenlose CI/CD with GitHub Actions & DevOps Pipelines-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des CI/CD with GitHub Actions & DevOps Pipelines-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der CI/CD with GitHub Actions & DevOps Pipelines-Kurs umfasst insgesamt 4 Lektionen.

Warum Bedingungen wichtig sind

Nicht jeder Schritt sollte bei jedem Lauf ausgeführt werden. Vielleicht soll ein Bereitstellungsschritt nur auf dem Branch main laufen oder ein Benachrichtigungsschritt nur dann, wenn ein Fehler aufgetreten ist.

Mit GitHub Actions können Sie jedem Schritt und jedem Job eine if-Bedingung hinzufügen und so steuern, ob er ausgeführt wird.

Der Schlüssel if

Fügen Sie einem Schritt einen Schlüssel if: hinzu. Der Schritt wird nur ausgeführt, wenn der Ausdruck zu true ausgewertet wird.

Ausdrücke innerhalb von if benötigen nicht den Wrapper ${{ }}, er ist jedoch zulässig.

steps:
  - name: Deploy
    if: github.ref == 'refs/heads/main'
    run: ./deploy.sh

Kontextobjekte

Bedingungen werden aus Kontextobjekten gelesen, die den Lauf beschreiben:

  • github — Ereignis, Ref, Akteur, SHA
  • env — Umgebungsvariablen
  • job und steps — Status vorheriger Arbeiten
  • runner — Betriebssystem und Architektur

Beispielsweise zeigt github.event_name, ob ein Push oder ein pull_request den Lauf ausgelöst hat.

Statusprüffunktionen

Standardmäßig wird ein Schritt übersprungen, wenn ein vorheriger Schritt fehlgeschlagen ist. Um dieses Verhalten zu überschreiben, verwenden Sie die Statusfunktionen:

  • success() — wahr, wenn kein vorheriger Schritt fehlgeschlagen ist (Standardverhalten)
  • failure() — wahr, wenn ein vorheriger Schritt fehlgeschlagen ist
  • always() — wird unabhängig vom Ergebnis ausgeführt
  • cancelled() — wahr, wenn der Lauf abgebrochen wurde
  - name: Notify on failure
    if: failure()
    run: echo 'Build failed, sending alert'

Bereinigung immer ausführen

Ein häufiges Muster ist ein Bereinigungsschritt, der auch dann ausgeführt werden muss, wenn frühere Schritte fehlgeschlagen sind. Verwenden Sie if: always().

Dadurch wird garantiert, dass temporäre Ressourcen, Container oder Testberichte unabhängig vom Ergebnis verarbeitet werden.

  - name: Upload logs
    if: always()
    uses: actions/upload-artifact@v4
    with:
      name: logs
      path: ./logs

Job-Abhängigkeiten mit needs

Mit dem Schlüsselwort needs wartet ein Job auf andere Jobs. Ohne dieses Schlüsselwort werden Jobs parallel ausgeführt.

Ein in needs aufgeführter Job muss erfolgreich beendet sein, bevor der abhängige Job startet.

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test
  deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh

Mehrere Abhängigkeiten

Ein Job kann von mehreren Jobs abhängen, indem Sie eine Liste an needs übergeben. Er wartet auf alle diese Jobs.

So erstellen Sie Fan-in-Muster, bei denen ein abschließender Job erst ausgeführt wird, wenn alle parallelen Jobs erfolgreich waren.

  release:
    needs: [lint, test, build]
    runs-on: ubuntu-latest
    steps:
      - run: echo 'all checks passed'

Bedingte Jobs

Der Schlüssel if funktioniert auch für Jobs, nicht nur für Schritte. Eine Bedingung auf Job-Ebene entscheidet, ob der gesamte Job ausgeführt wird.

Hier wird der Deploy-Job nur bei Pushes auf main ausgeführt, hängt aber weiterhin von den Tests ab.

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh

Job-Ausgaben verwenden

Jobs können Daten über outputs an nachgelagerte Jobs übergeben. Ein abhängiger Job liest sie über den needs-Kontext.

Dadurch kann eine Bedingung von einem zuvor berechneten Wert abhängen, beispielsweise davon, ob sich eine Version geändert hat.

  check:
    runs-on: ubuntu-latest
    outputs:
      changed: ${{ steps.diff.outputs.changed }}
    steps:
      - id: diff
        run: echo 'changed=true' >> $GITHUB_OUTPUT

Bedingungen kombinieren

Sie können Ausdrücke mit && (und), || (oder) und ! (nicht) kombinieren.

Dieses Beispiel wird nur bei einem erfolgreichen Push auf main ausgeführt, der nicht aus einem Fork stammt.

    if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'

if: always() mit needs

Achtung: Ein Job mit needs wird übersprungen, wenn eine Abhängigkeit fehlschlägt. Damit ein abschließender Bericht-Job unabhängig vom Ergebnis ausgeführt wird, kombinieren Sie needs mit if: always().

Darin können Sie needs.<job>.result untersuchen, um zu entscheiden, was gemeldet werden soll.

  report:
    needs: [test, build]
    if: always()
    runs-on: ubuntu-latest
    steps:
      - run: echo ${{ needs.test.result }}

Kurzer Test

Testen Sie Ihr Verständnis der bedingten Ausführung.

Zusammenfassung

Sie haben gelernt, den Ablauf eines Workflows mit Bedingungen und Abhängigkeiten zu steuern.

  • if steuert die Ausführung von Schritten und Jobs anhand von Ausdrücken
  • Statusfunktionen wie failure() und always() überschreiben das Überspringen nach einem Fehler
  • needs erstellt Reihenfolgen und Fan-in-Muster
  • Job-outputs liefern Werte für spätere Bedingungen

Mit diesen grundlegenden Bausteinen können Sie präzise und effiziente Pipelines erstellen.

Kostenlos starten

Lerne CI/CD with GitHub Actions & DevOps Pipelines mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
12
Lektionen
48

Häufig gestellte Fragen

Ist die Lektion „Bedingte Ausführung und Job-Abhängigkeiten“ kostenlos?

Ja — der vollständige Text von „Bedingte Ausführung und Job-Abhängigkeiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des CI/CD with GitHub Actions & DevOps Pipelines-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der CI/CD with GitHub Actions & DevOps Pipelines-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Bedingte Ausführung und Job-Abhängigkeiten“?

Steuern Sie mit if-Bedingungen, dem Schlüsselwort needs, Ausdrücken und Statusprüfungsfunktionen, wann Schritte und Jobs in GitHub-Actions-Workflows ausgeführt werden. Du übst CI/CD with GitHub Actions & DevOps Pipelines mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um CI/CD with GitHub Actions & DevOps Pipelines zu starten?

Keine Vorkenntnisse erforderlich. CI/CD with GitHub Actions & DevOps Pipelines auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Bedingte Ausführung und Job-Abhängigkeiten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser CI/CD with GitHub Actions & DevOps Pipelines-Lektion Code schreiben und ausführen?

Ja. Jede CI/CD with GitHub Actions & DevOps Pipelines-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Matrix-Builds für mehrere Umgebungen
  2. Abhängigkeiten für mehr Geschwindigkeit cachen
  3. Wiederverwendbare Workflows und Actions
  4. Bedingte Ausführung und Job-Abhängigkeiten
← Zurück zu CI/CD with GitHub Actions & DevOps Pipelines