Hinweis: GitHub-gehostete Runner werden auf GitHub Enterprise Server derzeit nicht unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.
Einführung
Diese Anleitung unterstützt dich 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.
Vorbereitung
Vor Beginn der Migration zu GitHub Actions ist es hilfreich, sich mit deren Funktionsweise vertraut zu machen:
- Ein kurzes Beispiel, das einen GitHub Actions-Auftrag veranschaulicht, findest du unter Schnellstart für GitHub Actions.
- Informationen zu den wesentlichen GitHub Actions-Konzepten findest du unter Grundlegendes zu GitHub Actions.
Vergleichen der Auftragsausführung
Damit du steuern kannst, wann CI-Aufgaben ausgeführt werden, verwendet ein GitHub Actions-Workflow Aufträge, 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 weisen bestimmte gemeinsame Ähnlichkeiten auf, deren Verständnis im Voraus helfen kann, den Migrationsprozess reibungslos zu gestalten.
Verwenden der YAML-Syntax
Travis CI und GitHub Actions verwenden YAML zum Erstellen von Aufträgen und Workflows. Diese Dateien werden im Code-Repository gespeichert. Weitere Informationen zur Verwendung von YAML in GitHub Actions findest du unter Grundlegendes zu GitHub Actions.
Benutzerdefinierte Variablen
Mit Travis CI kannst du Variablen festlegen und phasenübergreifend verwenden. Ebenso bietet GitHub Actions die Möglichkeit, Variablen für Workflows zu definieren. Weitere Informationen findest du unter Speichern von Informationen in Variablen.
Standardvariablen
Travis CI und GitHub Actions enthalten Standardumgebungsvariablen, die du in YAML-Dateien verwenden kannst. Für GitHub Actions sind diese in Speichern von Informationen in Variablen aufgelistet.
Parallele Verarbeitungvon Jobs
Travis CI kann stages
verwenden, um Aufträge parallel auszuführen. Genauso führt GitHub Actions jobs
parallel aus. Weitere Informationen findest du unter Informationen zu Workflows.
Statusbadges
Travis CI und GitHub Actions unterstützen Statusbadges, mit denen du angeben kannst, ob ein Build erfolgreich durchgeführt wurde oder fehlgeschlagen ist. Weitere Informationen findest du unter Hinzufügen eines Badges für den Workflowstatus.
Verwenden einer Matrix
Travis CI und GitHub Actions unterstützen eine Matrix, damit du Tests mit mehreren Kombinationen von Betriebssystemen und Softwarepaketen durchführen kannst. Weitere Informationen findest du unter Ausführen von Variationen von Aufträgen in einem Workflow.
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 um GitHub Actions bieten die Möglichkeit, einen bestimmten Branch als Ziel für CI festzulegen. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.
Nachfolgend ein Beispiel für die Syntax in jedem System.
Travis CI-Syntax für bestimmte Branches
branches:
only:
- main
- 'mona/octocat'
GitHub Actions-Syntax für bestimmte Branches
on:
push:
branches:
- main
- 'mona/octocat'
Auschecken von Untermodulen
Travis CI und GitHub Actions bieten die Möglichkeit, zu steuern, ob Untermodule im Repositoryklon 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@v4
with:
submodules: false
Verwenden von Umgebungsvariablen in einer Matrix
Travis CI und GitHub Actions können benutzerdefinierte Variablen zu einer Testmatrix hinzufügen, sodass du in einem späteren Schritt auf die Variable verweisen kannst.
In GitHub Actions kannst du 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ücksichtige beim Migrieren von Travis CI die folgenden wichtigen Features in GitHub Actions:
Speichern von Geheimnissen
GitHub Actions bietet die Möglichkeit, Geheimnisse zu speichern und in Aufträgen darauf zu verweisen. GitHub Actions-Organisationen können einschränken, welche Repositories auf Organisationsgeheimnisse zugreifen dürfen. Regeln für den Bereitstellungsschutz können eine manuelle Genehmigung für einen Workflow vorschreiben, um auf Umgebungsgeheimnisse zugreifen zu können. Weitere Informationen findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
Gemeinsame Verwendung von Dateien in Aufträgen und Workflows
GitHub Actions umfasst eine integrierte Unterstützung für die Speicherung von Artefakten, sodass du Dateien in den Aufträgen eines Workflows gemeinsam verwenden kannst. Du kannst die resultierenden Dateien auch speichern und für andere Workflows verwenden. Weitere Informationen findest du unter Grundlegendes zu GitHub Actions.
Deinen eigenen Runner hosten
Wenn für Aufträge bestimmte Hardware oder Software erforderlich ist, bietet GitHub Actions die Möglichkeit, einen eigenen Runner zu hosten, an den die Aufträge zur Verarbeitung gesendet werden. GitHub Actions bietet auch die Möglichkeit, über Richtlinien zu steuern, wie der Zugriff auf diese Runner erfolgt und wie Zugriff auf Organisations- oder Repositoryebene gewährt wird. Weitere Informationen findest du unter Deinen eigenen Runner hosten.
Verwenden verschiedener Sprachen in GitHub Actions
Bei Verwendung verschiedener Sprachen in GitHub Actions kannst du einen Schritt im Auftrag erstellen, um Sprachabhängigkeiten einzurichten. Weitere Informationen zur Verwendung einer bestimmten Sprache findest du in der betreffenden Anleitung:
- Erstellen und Testen eines Node.js-Projekts
- Erstellen und Testen eines Python-Projekts
- Erstellen und Testen eines PowerShell-Projekts
- Erstellen und Testen von Java mit Maven
- Erstellen und Testen von Java mit Gradle
- Erstellen und Testen von Java mit Ant
Ausführung von Skripts
GitHub Actions kann run
-Schritte zum Ausführen von Skripts oder Shellbefehlen verwenden. Um eine bestimmte Shell zu verwenden, kannst du den shell
-Typ angeben, wenn der Pfad zum Skript angegeben wird. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.
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 verschiedene Ansätze für die Fehlerbehandlung, die du kennen solltest.
Fehlerbehandlung für Skripts
GitHub Actions beendet einen Auftrag sofort, wenn einer der Schritte einen Fehlercode zurückgibt. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.
Fehlerbehandlung für Aufträge
GitHub Actions verwendet if
-Bedingungen für die situationsabhängige Ausführung von Aufträgen oder Schritten. Du kannst beispielsweise einen Schritt ausführen, wenn ein anderer Schritt zu einem Fehler (failure()
) führt. Weitere Informationen findest du 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 Aufträge mit Bedingungsausdrücken auszuführen, verwenden Travis CI und GitHub Actions eine ähnliche if
-Bedingungssyntax. GitHub Actions bietet die Möglichkeit, die if
-Bedingung zu verwenden, damit ein Auftrag oder ein Schritt nur ausgeführt wird, wenn eine bestimmte Bedingung erfüllt ist. Weitere Informationen findest du 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, umfasst GitHub Actions Schritte, die Aktionen ausführen. Du findest vordefinierte Aktionen im GitHub Marketplace, oder du kannst eigene Aktionen erstellen. Weitere Informationen findest du unter Freigeben 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 bieten die Möglichkeit, Abhängigkeiten manuell zwischenzuspeichern, um sie später wiederzuverwenden.
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 das Zwischenspeichern
- name: Cache node modules
uses: actions/cache@v3
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 häufige Aufgaben ausführen.
Konfigurieren von Umgebungsvariablen
Du kannst 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 Umgebungsvariablen
jobs:
maven-build:
env:
MAVEN_PATH: '/usr/local/maven'
Erstellen mit Node.js
Travis CI zum Erstellen mit Node.js
install:
- npm install
script:
- npm run build
- npm test
GitHub Actions-Workflow zum Erstellen mit Node.js
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- 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
Weitere Informationen zu den wichtigsten Features von GitHub Actions findest du unter Schreiben von Workflows.