Skip to main content

Enterprise Server 3.20 ist derzeit als Release Candidate verfügbar.

Migrieren von Jenkins zu GitHub Actions

GitHub Actions und Jenkins haben mehrere Ähnlichkeiten, was die Migration zu GitHub Actions relativ einfach macht.

Github-gehostete Runner für Unternehmen

Einführung

Jenkins und GitHub Actions ermöglichen es Dir, Workflows zu erstellen, die automatisch Code bauen, testen, publizieren, freigeben und bereitstellen. Jenkins und GitHub Actions haben einige Ähnlichkeiten in der Workflow-Konfiguration:

  • Jenkins erstellt Workflows mit deklarativen Pipelines, die den Workflowdateien in GitHub Actions ähneln.
  • Jenkins verwendet Phasen, um eine Reihe von Schritten auszuführen, während GitHub Actions Aufträge verwendet, um Schritte oder einzelne Befehle zu gruppieren.
  • Jenkins und GitHub Actions unterstützen Container-basierte Builds. Weitere Informationen finden Sie unter Creating a Docker container action (Erstellen einer Docker-Containeraktion).
  • Schritte oder Aufgaben können wiederverwendet und in der Community gemeinsam genutzt werden.

Weitere Informationen finden Sie unter Grundlegendes zu GitHub Actions.

Wichtige Unterschiede

  • Jenkins hat zwei Arten von Syntax zur Erzeugung von Pipelines: Deklarative Pipeline und „Scripted“ (Skript-basierte) Pipeline. GitHub Actions verwendet YAML, um Workflows und Konfigurationsdateien zu erstellen. Weitere Informationen finden Sie unter Workflowsyntax für GitHub Actions.
  • Die Jenkins-Deployments sind üblicherweise selbstgehostet, wobei die Benutzer:innen die Server in ihren eigenen Rechenzentren verwalten. GitHub Actions bieten einen hybriden Cloud-Ansatz, indem sie ihre eigenen Runner betreiben, die du zum Ausführen von Jobs verwenden kannst, während sie auch selbst-gehostete Läufer unterstützen. Weitere Informationen finden Sie unter Selbstgehosteten Runnern.

Funktionaltäten im Vergleich

Deine Builds verteilen

Mit Jenkins kannst Du Builds an einen einzelnen Build-Agenten senden oder sie über mehrere Agenten verteilen. Du kannst diese Agenten auch nach verschiedenen Attributen klassifizieren, wie zum Beispiel Arten von Betriebssystemen.

In ähnlicher Weise kann GitHub Actions Aufträge an von GitHub gehostete oder an selbstgehostete Runner senden, und du kannst Bezeichnungen verwenden, um die Runner nach verschiedenen Attributen zu klassifizieren. Weitere Informationen findest du unter Grundlegendes zu GitHub Actions und Selbstgehosteten Runnern.

Sektionen verwenden, um Pipelines zu organisieren

Jenkins teilt seine deklarativen Pipelines in mehrere Abschnitte auf. In ähnlicher Weise strukturiert GitHub Actions seine Workflows in separaten Sektionen. Die folgende Tabelle vergleicht Sektionen bei Jenkins mit dem Workflow bei GitHub Actions.

Anweisungen in JenkinsGitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
postKeine
stagesjobs
stepsjobs.<job_id>.steps

using-Direktiven

Jenkins verwendet Anweisungen, um deklarative Pipelines zu verwalten. Diese Anweisungen definieren die Merkmale Deines Workflows und die Art und weise, wie dieser ausgeführt wird. Die folgende Tabelle zeigt, wie diese Anweisungen den Konzepten innerhalb von GitHub Actions entsprechen.

Anweisungen in JenkinsGitHub Actions
environmentjobs.<job_id>.env
jobs.<job_id>.steps[*].env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parametersinputs
outputs
triggerson
on.<event_name>.types
on.<push>.<branches|tags>
on.<pull_request>.<branches>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
          [Jenkins-Cron-Syntax](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)            | [`on.schedule`](/actions/using-workflows/workflow-syntax-for-github-actions#onschedule) |

| stage | jobs.<job_id>
jobs.<job_id>.name | | tools | Spezifikationen für GitHub-gehostete Runner | | input | inputs | | when | jobs.<job_id>.if |

Sequenzielle „Stages“ (Phasen) verwenden

Parallele Verarbeitung von Aufträgen

Jenkins kann Phasen (stages) und Schritte (steps) parallel ausführen. Im Gegensatz dazu führt GitHub Actions derzeit nur Aufträge parallel aus.

Jenkins ParallelGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

Matrix

Sowohl GitHub Actions als auch Jenkins ermöglicht die Verwendung einer Matrix, um verschiedene Systemkombinationen zu definieren.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesKeine

Schritte verwenden, um Aufgaben auszuführen

Jenkins gruppiert Schritte (steps) in Phasen (stages). Jeder dieser Schritte kann unter anderem ein Skript, eine Funktion oder ein Befehl sein. In ähnlicher Weise verwendet GitHub Actions jobs, um bestimmte Gruppen von steps auszuführen.

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

Beispiele für häufige Aufgaben

Auszuführende Pipeline mit cron planen

Jenkins-Pipeline mit cron

pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}

GitHub Actions-Workflow mit cron

on:
  schedule:
    - cron: '*/15 * * * 1-5'

Weitere Informationen zu schedule-Ereignissen und zur akzeptierter Cron-Syntax findest du unter Ereignisse zum Auslösen von Workflows.

Umgebungsvariablen in einer Pipeline konfigurieren

Jenkins-Pipeline mit einer Umgebungsvariablen

pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}

GitHub Actions-Workflow mit einer Umgebungsvariablen

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

Von Upstream-Projekten ausgehend bauen

Jenkins-Pipeline, die aus einem Upstream-Projekt erstellt wird

pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}

GitHub Actions-Workflow, der aus einem Upstream-Projekt erstellt wird

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Mit mehreren Betriebssystemen bauen

Jenkins-Pipeline, die mit mehreren Betriebssystemen erstellt wird

pipeline {
  agent none
  stages {
    stage('Run Tests') {
      matrix {
        axes {
          axis {
            name: 'PLATFORM'
            values: 'macos', 'linux'
          }
        }
        agent { label "${PLATFORM}" }
        stages {
          stage('test') {
            tools { nodejs "node-20" }
            steps {
              dir("scripts/myapp") {
                sh(script: "npm install -g bats")
                sh(script: "bats tests")
              }
            }
          }
        }
      }
    }
  }
}

GitHub Actions-Workflow, der mit mehreren Betriebssystemen erstellt wird

name: demo-workflow
on:
  push:
jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest]
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp