Skip to main content

Migrieren von Travis CI zu GitHub Actions

GitHub Actions und Travis CI weisen mehrere Gemeinsamkeiten auf, was die Migration zu GitHub Actions relativ unkompliziert macht.

Einführung

Dieser Leitfaden hilft Ihnen bei der Migration von Travis CI zu GitHub Actions. Sie vergleicht die jeweiligen Konzepte und die jeweilige Syntax, beschreibt die Ähnlichkeiten und veranschaulicht die unterschiedlichen Ansätze für gängige Aufgaben.

Bevor Sie beginnen

Bevor Sie mit Ihrer Migration zu GitHub Actions beginnen, wäre es hilfreich, sich damit vertraut zu machen, wie es funktioniert:

Vergleichen der Auftragsausführung

Damit Sie steuern können, wann CI-Aufgaben ausgeführt werden, verwendet ein GitHub Actions_Workflow__Jobs_, die standardmäßig parallel ausgeführt werden. Jeder Auftrag enthält Schritte, die in einer festgelegten Abfolge ausgeführt werden. Wenn du Setup- und Bereinigungsaktionen für einen Auftrag ausführen musst, kannst du dafür Schritte im jeweiligen Auftrag definieren.

Wichtige Ähnlichkeiten

GitHub Actions und Travis CI teilen bestimmte Ähnlichkeiten, und das Verständnis dieser im Voraus kann dazu beitragen, den Migrationsprozess zu glätten.

Verwenden der YAML-Syntax

Travis CI und GitHub Actions beide verwenden YAML zum Erstellen von Aufträgen und Workflows, und diese Dateien werden im Repository des Codes gespeichert. Weitere Informationen zur GitHub Actions Verwendung von YAML finden Sie unter Erstellen eines Beispielworkflows.

Benutzerdefinierte Variablen

Mit Travis CI kannst du Variablen festlegen und phasenübergreifend verwenden. GitHub Actions Auf ähnliche Weise können Sie Variablen für einen Workflow definieren. Weitere Informationen finden Sie unter Speichern von Informationen in Variablen.

Standardvariablen

Travis CI und GitHub Actions beide enthalten Standardumgebungsvariablen, die Sie in Ihren YAML-Dateien verwenden können. Für GitHub Actions können Sie diese in Referenz für Variablen aufgelistet sehen.

Parallele Verarbeitung von Jobs

Travis CI kann stages verwenden, um Aufträge parallel auszuführen. Ebenso führt GitHub Actionsjobs parallel aus. Weitere Informationen finden Sie unter Workflowsyntax für GitHub Actions.

Statusbadges

Travis CI und GitHub Actions unterstützen beide Status-Badges, mit denen Sie anzeigen können, ob ein Build erfolgreich ist oder fehlschlägt. Weitere Informationen finden Sie unter Hinzufügen eines Badges für den Workflowstatus.

Verwenden einer Matrix

Travis CI und GitHub Actions beide unterstützen eine Matrix, sodass Sie Tests mit Kombinationen von Betriebssystemen und Softwarepaketen durchführen können. Weitere Informationen finden Sie unter Varianten von Aufgaben in einem Workflow ausführen.

Nachfolgend findest du einen exemplarischen Vergleich für die Syntax in jedem System.

Travis CI-Syntax für eine Matrix

matrix:
  include:
    - rvm: '2.5'
    - rvm: '2.6.3'

GitHub Actions Syntax für eine Matrix

jobs:
  build:
    strategy:
      matrix:
        ruby: ['2.5', '2.6.3']

Festlegen von bestimmten Branchen als Ziel

Travis CI und GitHub Actions beide ermöglichen es Ihnen, Ihre CI auf einen bestimmten Zweig zu richten. Weitere Informationen finden Sie unter Workflowsyntax für GitHub Actions.

Nachfolgend ein Beispiel für die Syntax in jedem System.

Travis CI-Syntax für spezifische Branches

branches:
  only:
    - main
    - 'mona/octocat'

GitHub Actions Syntax zum Ansprechen bestimmter Branches

on:
  push:
    branches:
      - main
      - 'mona/octocat'

Auschecken von Untermodulen

Travis CI und GitHub Actions beide ermöglichen es Ihnen, zu steuern, ob Untermodule im Repository-Klon enthalten sind.

Nachfolgend ein Beispiel für die Syntax in jedem System.

Travis CI-Syntax zum Auschecken von Untermodulen

git:
  submodules: false

GitHub Actions Syntax zum Auschecken von Untermodulen

- uses: actions/checkout@v6
  with:
    submodules: false

Verwenden von Umgebungsvariablen in einer Matrix

Travis CI und GitHub Actions kann benutzerdefinierte Variablen zu einer Testmatrix hinzufügen, mit der Sie in einem späteren Schritt auf die Variable verweisen können.

In GitHub Actions, können Sie den include Schlüssel verwenden, um einer Matrix benutzerdefinierte Umgebungsvariablen hinzuzufügen. In diesem Beispiel sind die Matrixeinträge für node-version so konfiguriert, dass verschiedene Werte für die Umgebungsvariablen site und datacenter verwendet werden. Der Schritt Echo site details verwendet dann env: ${{ matrix.env }}, um auf die benutzerdefinierten Variablen zu verweisen:

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       include:
         - node-version: '14.x'
           site: "prod"
           datacenter: "site-a"
         - node-version: '16.x'
           site: "dev"
           datacenter: "site-b"
    steps:
      - name: Echo site details
        env:
          SITE: ${{ matrix.site }}
          DATACENTER: ${{ matrix.datacenter }}
        run: echo $SITE $DATACENTER

Wichtige Features in GitHub Actions

Berücksichtigen Sie bei der Migration von Travis CI die folgenden wichtigsten Features in GitHub Actions:

Speichern von Geheimnissen

GitHub Actions ermöglicht Ihnen, Geheimnisse zu speichern und in Ihren Jobs darauf zu verweisen. GitHub Actions Organisationen können einschränken, welche Repositorys auf geheime Organisationsschlüssel zugreifen können. Regeln für den Bereitstellungsschutz können eine manuelle Genehmigung für einen Workflow vorschreiben, um auf Umgebungsgeheimnisse zugreifen zu können. Weitere Informationen finden Sie unter Geheimnisse.

Gemeinsame Verwendung von Dateien in Aufträgen und Workflows

GitHub Actions bietet integrierte Unterstützung für den Artefaktspeicher, sodass Sie Dateien zwischen Jobs in einem Workflow teilen können. Du kannst die resultierenden Dateien auch speichern und für andere Workflows verwenden. Weitere Informationen finden Sie unter Grundlegendes zu GitHub Actions.

Ihre eigenen Runner hosten

Wenn Ihre Aufgaben bestimmte Hardware oder Software erfordern, können Sie mit GitHub Actions Ihre eigenen Runner selbst hosten und Ihre Aufgaben zur Ausführung an diese senden. GitHub Actions ermöglicht Ihnen außerdem, mithilfe von Richtlinien zu steuern, wie auf diese Runner zugegriffen wird, wobei der Zugriff auf Organisations- oder Repository-Ebene gewährt werden kann. Weitere Informationen finden Sie unter Verwalten von selbstgehosteten Runnern.

Gleichzeitige Aufträge und Ausführungszeit

Die Anzahl gleichzeitiger Aufträge und die Workflow-Ausführungszeiten in GitHub Actions können je nach Ihrem GitHub-Plan variieren. Weitere Informationen finden Sie unter Abrechnung und Verbrauch.

Verwenden verschiedener Sprachen in GitHub Actions

Wenn Sie in GitHub Actions mit verschiedenen Sprachen arbeiten, können Sie in Ihrem Job einen Schritt erstellen, um Ihre Sprachabhängigkeiten einzurichten. Weitere Informationen zum Arbeiten mit einer bestimmten Sprache findest du unter Deinen Code bauen und testen.

Ausführung von Skripts

GitHub Actions kann mit run Schritten Skripts oder Shellbefehle ausführen. Um eine bestimmte Shell zu verwenden, kannst du den shell-Typ angeben, wenn der Pfad zum Skript angegeben wird. Weitere Informationen finden Sie unter Workflowsyntax für GitHub Actions.

Zum Beispiel:

steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash

Fehlerbehandlung in GitHub Actions

Bei der Migration zu GitHub Actions" gibt es unterschiedliche Ansätze für die Fehlerbehandlung, die Sie möglicherweise beachten müssen.

Fehlerbehandlung für Skripts

GitHub Actions beendet einen Auftrag sofort, wenn einer der Schritte einen Fehlercode zurückgibt. Weitere Informationen finden Sie unter Workflowsyntax für GitHub Actions.

Fehlerbehandlung für Aufträge

GitHub Actions verwendet if Bedingungen zum Ausführen von Aufträgen oder Schritten in bestimmten Situationen. Du kannst beispielsweise einen Schritt ausführen, wenn ein anderer Schritt zu einem Fehler (failure()) führt. Weitere Informationen finden Sie unter Workflowsyntax für GitHub Actions. Du kannst auch continue-on-error verwenden, um zu verhindern, dass eine Workflowausführung beendet wird, wenn ein Auftrag fehlschlägt.

Migrieren der Syntax für Bedingungen und Ausdrücke

Um Jobs mit bedingten Ausdrücken auszuführen, verwenden Travis CI und GitHub Actions eine ähnliche if-Bedingungssyntax. GitHub Actions ermöglicht es Ihnen, die if Bedingung zu verwenden, um zu verhindern, dass ein Auftrag oder ein Schritt ausgeführt wird, es sei denn, eine Bedingung ist erfüllt. Weitere Informationen finden Sie unter Auswerten von Ausdrücken in Workflows und Aktionen.

In diesem Beispiel wird veranschaulicht, wie eine if-Bedingung steuern kann, ob ein Schritt ausgeführt wird:

jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: env.str == 'ABC' && env.num == 123

Migrieren von Phasen in Schritte

Wenn Travis CI Phasen zum Ausführen von Schritten verwendet, enthält GitHub Actions, __ die Aktionen ausführen. Sie finden vordefinierte Aktionen im GitHub Marketplace, oder Sie können eigene Aktionen erstellen. Weitere Informationen finden Sie unter Wiederverwenden von Automatisierungen.

Nachfolgend ein Beispiel für die Syntax in jedem System.

Travis CI-Syntax für Phasen und Schritte

language: python
python:
  - "3.7"

script:
  - python script.py

GitHub Actions Syntax für Schritte und Aktionen

jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v5
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

Abhängigkeiten „cachen“ (zwischenspeichern)

Travis CI und GitHub Actions ermöglicht es Ihnen, Abhängigkeiten manuell für die spätere Wiederverwendung zwischenzuspeichern.

In diesem Beispiel wird die Cachesyntax für die einzelnen Systeme veranschaulicht.

Travis CI-Syntax für das Zwischenspeichern

language: node_js
cache: npm

GitHub Actions Syntax für die Zwischenspeicherung

- name: Cache node modules
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-

Beispiele für häufige Aufgaben

In diesem Abschnitt wird verglichen, wie GitHub Actions und Travis CI allgemeine Aufgaben ausführt.

Konfigurieren von Umgebungsvariablen

Sie können benutzerdefinierte Umgebungsvariablen in einem GitHub Actions Auftrag erstellen.

Travis CI-Syntax für eine Umgebungsvariable

env:
  - MAVEN_PATH="/usr/local/maven"

GitHub Actions Workflow mit einer Umgebungsvariable

jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Erstellen mit Node.js

Travis CI für das Bauen mit Node.js

install:
  - npm install
script:
  - npm run build
  - npm test

GitHub Actions Workflow für die Erstellung mit Node.js

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test

Nächste Schritte

Um mehr über die Hauptfunktionen von GitHub Actions zu erfahren, lesen Sie Schreiben von Workflows.