Erkunden von Kontexten und Ausdrücken in GitHub

Abgeschlossen

Kontexte sind eine Möglichkeit, auf Informationen zu Workflowausführungen, Variablen, Runnerumgebungen, Aufträge und Schritten zuzugreifen. Jeder Kontext ist ein Objekt, das Eigenschaften enthält, die Zeichenfolgen oder andere Objekte sein können.

Sie können mithilfe der Ausdruckssyntax auf Kontexte zugreifen. Ein Ausdruck kann eine beliebige Kombination aus literalen Werten, Verweisen auf einen Kontext und Funktionen sein. Du kannst Literale, Kontextverweise und Funktionen mithilfe von Operatoren kombinieren.

Kontexte

Bei der Erstellung von Workflows und Aktionen sollten Sie immer bedenken, ob Ihr Code nicht vertrauenswürdige Eingaben von möglichen Eindringlingen ausführen könnte. Bestimmte Kontexte sollten als nicht vertrauenswürdige Eingaben behandelt werden, da ein Angreifer seine eigenen schädlichen Inhalte einfügen könnte. Weitere Informationen finden Sie unter "Sicherheitshärtung für GitHub-Aktionen".

Die folgende Tabelle enthält Beispiele für Kontexte, die in GitHub verfügbar sind, es ist keine vollständige Auflistung.

Kontextname Typ BESCHREIBUNG
github object Informationen zur Workflowausführung.
env object Enthält Variablen, die in einem Workflow, Auftrag oder Schritt festgelegt sind.
vars object Enthält benutzerdefinierte Konfigurationsvariablen, die auf Repository-, Organisations- und Umgebungsebene festgelegt sind.
job object Informationen zum derzeit ausgeführten Auftrag.

Tipp

Eine vollständige Auflistung der Kontexte finden Sie unter "Informationen zu Kontexten".

Bestimmen, wann Kontexte verwendet werden sollen

GitHub-Aktionen enthalten zwei Auflistungen von Variablen, die als Standardvariablen und Kontexte bezeichnet werden. Diese Variablen sind für die Verwendung an verschiedenen Stellen im Workflow vorgesehen:

  • Standardumgebungsvariablen: Diese Umgebungsvariablen sind nur für den Läufer vorhanden, der Ihren Auftrag ausführt.
  • Kontexte: Sie können die meisten Kontexte an einem beliebigen Punkt in Ihrem Workflow verwenden, einschließlich, wenn Standardvariablen nicht verfügbar wären.

Im folgenden Beispiel prüft die if-Anweisung den github.ref-Kontext, um den aktuellen Branch-Namen zu ermitteln. Die if-Prüfung wird durchgeführt, und der Auftrag wird nur dann an den Runner gesendet, wenn das Ergebnis true ist. Sobald der Auftrag an den Läufer gesendet wurde, wird der Schritt ausgeführt und bezieht sich auf die $GITHUB_REF Variable des Läufers.

name: CI
on: push
jobs:
  prod-check:
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

In GitHub-Aktionen verfügbare Kontexte

Die folgende Tabelle enthält die verfügbaren Kontexte der obersten Ebene, eine kurze Beschreibung und einen Link zu weiteren Informationen zu den Eigenschaften des Objekts.

Kontext der obersten Ebene BESCHREIBUNG Eigenschaften und Beispiele
github Der Kontext der obersten Ebene, der während eines Auftrags oder Schritts in einem Workflow verfügbar ist. Eigenschaften des Kontexts github .
env Enthält Variablen, die in einem Workflow, Auftrag oder Schritt festgelegt sind. Es enthält keine Variablen, die vom Runner-Prozess geerbt werden. Eigenschaften des Kontexts env .
vars Enthält benutzerdefinierte Konfigurationsvariablen, die auf Organisations-, Repository- und Umgebungsebene festgelegt sind. Beispiele für die vars Verwendung.
job Enthält Informationen zum aktuell ausgeführten Auftrag. Eigenschaften des Kontexts job .
jobs Nur in wiederverwendbaren Workflows verfügbar und kann nur verwendet werden, um Ausgaben für einen wiederverwendbaren Workflow festzulegen. Eigenschaften des Kontexts jobs .
steps Enthält Informationen über die abgeschlossenen Schritte im aktuellen Auftrag, für die ein id angegeben wurde. Eigenschaften des Kontexts steps .
runner Enthält Informationen über den Runner, der den aktuellen Job ausführt. Eigenschaften des Kontexts runner .
secrets Enthält die Namen und Werte von Geheimnissen, die für eine Workflowausführung verfügbar sind. Eigenschaften des Kontexts secrets .
strategy Enthält Informationen zur Matrixausführungsstrategie für den aktuellen Auftrag. Eigenschaften des Kontexts strategy .
matrix Enthält die in der Workflowdatei definierten Matrixeigenschaften, die für den aktuellen Auftrag gelten. Eigenschaften des Kontexts matrix .
needs Enthält Ausgaben aller Aufträge, die als direkte Abhängigkeit des aktuellen Auftrags definiert sind. Eigenschaften des Kontexts matrix .
inputs Enthält Eingabeeigenschaften, die an eine Aktion, an einen wiederverwendbaren Workflow oder an einen manuell ausgelösten Workflow übermittelt werden. Eigenschaften des Kontexts inputs .

Ausdrücke

Mit Ausdrücken kannst du programmgesteuert Variablen in Workflow-Dateien festlegen und auf Kontexte zugreifen. Ein Ausdruck kann eine beliebige Kombination aus literalen Werten, Verweisen auf einen Kontext und Funktionen sein. Du kannst Literale, Kontextverweise und Funktionen mithilfe von Operatoren kombinieren.

Ausdrücke werden häufig mit dem bedingten if Schlüsselwort in einer Workflowdatei verwendet, um zu bestimmen, ob ein Schritt ausgeführt werden soll. Wenn eine if-Bedingung true ist, wird der Schritt ausgeführt.

Sie müssen bestimmte Syntax verwenden, ${{ <expression> }}um GitHub anweisen, einen Ausdruck auszuwerten, anstatt ihn als Zeichenfolge zu behandeln. Die Ausnahme dieser Regel ist, wenn Sie Ausdrücke in einer if Klausel verwenden, in denen sie normalerweise weggelassen ${{ werden können und }}.

Das folgende Codebeispiel zeigt das Festlegen einer Umgebungsvariable.

env:
  MY_ENV_VAR: ${{ <expression> }}

Literale

Als Teil eines Ausdrucks können Sie Datentypen boolean, null, number oder string verwenden. In Konditionalen werden false Werte (false, 0, -0, "", '', null) zu false und true (true und andere nicht-false Werte) zu true konvertiert. Im Folgenden finden Sie Beispiele für die Implementierung von Literalen.

env:
  myNull: ${{ null }}
  myBoolean: ${{ false }}
  myIntegerNumber: ${{ 711 }}
  myFloatNumber: ${{ -9.2 }}
  myHexNumber: ${{ 0xff }}
  myExponentialNumber: ${{ -2.99e-2 }}
  myString: Mona the Octocat
  myStringInBraces: ${{ 'It''s open source!' }}

Betriebspersonal

Operatoren spielen eine entscheidende Rolle bei der Auswertung von Ausdrücken. Ein Ausdruck kann aus Literalwerten, Verweisen auf Kontexte oder Funktionen bestehen. Mit Operatoren können Sie diese Elemente kombinieren, um komplexere Ausdrücke zu erstellen. Hier sind einige wichtige Operatoren:

  • Logische Operatoren:

    • && (und): Kombiniert zwei Bedingungen, von denen beide wahr sein müssen, damit der Gesamtausdruck als wahr ausgewertet wird.
    • || (oder): Kombiniert zwei Bedingungen, und der Ausdruck wird als "true" ausgewertet, wenn eine bedingung wahr ist.
    • ! (nicht): Negiert eine Bedingung, ändert ihren Wahrheitswert.
  • Gleichheitsoperatoren:

    • == (gleich): Vergleicht zwei Werte für die Gleichheit.
    • != (nicht gleich): Überprüft, ob zwei Werte nicht gleich sind.
  • Vergleichsoperatoren:

    • < (kleiner als)
    • > (größer als)
    • <= (kleiner oder gleich)
    • >= (größer oder gleich)

Mit diesen Operatoren können Sie dynamische Workflows erstellen, indem Sie bestimmen, wann bestimmte Schritte basierend auf Bedingungen ausgeführt werden sollen. Denken Sie daran, die richtige Syntax für Ausdrücke wie $\{\{ <expression> \}\}$ zu verwenden, um eine ordnungsgemäße Auswertung sicherzustellen.

Weitere Informationen zu Betreibern finden Sie unter Operatoren.