{"meta":{"title":"Migrieren von Jenkins zu GitHub Actions","intro":"GitHub Actions und Jenkins weisen mehrere Gemeinsamkeiten auf, was die Migration zu GitHub Actions relativ einfach macht.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/tutorials","title":"Anleitungen"},{"href":"/de/actions/tutorials/migrate-to-github-actions","title":"Migrieren zu GitHub Actions"},{"href":"/de/actions/tutorials/migrate-to-github-actions/manual-migrations","title":"Manuelles Migrieren"},{"href":"/de/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-jenkins","title":"Migrieren von Jenkins"}],"documentType":"article"},"body":"# Migrieren von Jenkins zu GitHub Actions\n\nGitHub Actions und Jenkins weisen mehrere Gemeinsamkeiten auf, was die Migration zu GitHub Actions relativ einfach macht.\n\n## Einführung\n\nJenkins und GitHub Actions ermöglichen Ihnen beide, Workflows zu erstellen, mit denen Code automatisch kompiliert, getestet, veröffentlicht, freigegeben und bereitgestellt wird. Jenkins und GitHub Actions teilen einige Ähnlichkeiten in der Workflowkonfiguration:\n\n* Jenkins erstellt Workflows mit *deklarativen Pipelines*, die GitHub Actions Workflow-Dateien ähneln.\n* Jenkins verwendet *Phasen*, um eine Reihe von Schritten auszuführen, während GitHub Actions Jobs verwendet, um einen oder mehrere Schritte oder einzelne Befehle zu gruppieren.\n* Jenkins und GitHub Actions unterstützen containerbasierte Builds. Weitere Informationen finden Sie unter [Creating a Docker container action (Erstellen einer Docker-Containeraktion)](/de/actions/tutorials/use-containerized-services/create-a-docker-container-action).\n* Schritte oder Aufgaben können wiederverwendet und in der Community gemeinsam genutzt werden.\n\nWeitere Informationen finden Sie unter [Grundlegendes zu GitHub Actions](/de/actions/get-started/understand-github-actions).\n\n## Wichtige Unterschiede\n\n* Jenkins hat zwei Arten von Syntax zur Erzeugung von Pipelines: Deklarative Pipeline und „Scripted“ (Skript-basierte) Pipeline.\n  GitHub Actions verwendet YAML zum Erstellen von Workflows und Konfigurationsdateien. Weitere Informationen finden Sie unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax).\n* Die Jenkins-Deployments sind üblicherweise selbstgehostet, wobei die Benutzer:innen die Server in ihren eigenen Rechenzentren verwalten.\n  GitHub Actions bietet einen Hybrid-Cloud-Ansatz, indem es eigene Runner hostet, die Sie zum Ausführen von Jobs verwenden können, und gleichzeitig selbstgehostete Runner unterstützt. Weitere Informationen finden Sie unter [Selbstgehosteten Runnern](/de/actions/concepts/runners/self-hosted-runners).\n\n## Funktionaltäten im Vergleich\n\n### Deine Builds verteilen\n\nMit 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.\n\nEbenso kann GitHub Actions Jobs an von GitHub gehostete oder selbstgehostete Runner senden, und Sie können Labels verwenden, um Runner anhand verschiedener Attribute zu klassifizieren. Weitere Informationen findest du unter [Grundlegendes zu GitHub Actions](/de/actions/get-started/understand-github-actions#runners) und [Selbstgehosteten Runnern](/de/actions/concepts/runners/self-hosted-runners).\n\n### Sektionen verwenden, um Pipelines zu organisieren\n\nJenkins teilt seine deklarativen Pipelines in mehrere Abschnitte auf. Ebenso organisiert GitHub Actions seine Workflows in verschiedene Abschnitte. In der folgenden Tabelle werden die Abschnitte Von Jenkins mit dem GitHub Actions Workflow verglichen.\n\n| Anweisungen in Jenkins                                          | GitHub Actions                                                                                                                                                                                                             |\n| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`agent`](https://jenkins.io/doc/book/pipeline/syntax/#agent)   | [`jobs.<job_id>.runs-on`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idruns-on) <br> [`jobs.<job_id>.container`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontainer) |\n| [`post`](https://jenkins.io/doc/book/pipeline/syntax/#post)     | Keine                                                                                                                                                                                                                      |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#stages) | [`jobs`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobs)                                                                                                                                                 |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps)   | [`jobs.<job_id>.steps`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps)                                                                                                                       |\n\n## using-Direktiven\n\nJenkins verwendet Anweisungen, um *deklarative Pipelines* zu verwalten. Diese Anweisungen definieren die Merkmale Deines Workflows und die Art und weise, wie dieser ausgeführt wird. In der folgenden Tabelle wird veranschaulicht, wie diese Direktiven Konzepten zugeordnet werden GitHub Actions.\n\n| Anweisungen in Jenkins                                                                                                                              | GitHub Actions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`environment`](https://jenkins.io/doc/book/pipeline/syntax/#environment)                                                                           | [`jobs.<job_id>.env`](/de/actions/reference/workflows-and-actions/workflow-syntax#env) <br> [`jobs.<job_id>.steps[*].env`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsenv)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| [`options`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                                                   | [`jobs.<job_id>.strategy`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategy) <br> [`jobs.<job_id>.strategy.fail-fast`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) <br> [`jobs.<job_id>.timeout-minutes`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idtimeout-minutes)                                                                                                                                                                                                                                                                                                                       |\n| [`parameters`](https://jenkins.io/doc/book/pipeline/syntax/#options)                                                                                | [`inputs`](/de/actions/reference/workflows-and-actions/metadata-syntax#inputs) <br> [`outputs`](/de/actions/reference/workflows-and-actions/metadata-syntax#outputs-for-docker-container-and-javascript-actions)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| [`triggers`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                                                 | [`on`](/de/actions/reference/workflows-and-actions/workflow-syntax#on) <br> [`on.<event_name>.types`](/de/actions/reference/workflows-and-actions/workflow-syntax#onevent_nametypes) <br> [<code>on.\\<push>.\\<branches\\|tags></code>](/de/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore) <br> [<code>on.\\<pull\\_request>.\\<branches></code>](/de/actions/reference/workflows-and-actions/workflow-syntax#onpull_requestpull_request_targetbranchesbranches-ignore) <br> [<code>on.\\<push\\|pull\\_request>.paths</code>](/de/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore) |\n| [`triggers { upstreamprojects() }`](https://jenkins.io/doc/book/pipeline/syntax/#triggers)                                                          | [`jobs.<job_id>.needs`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| [Jenkins-Cron-Syntax](https://jenkins.io/doc/book/pipeline/syntax/#cron-syntax)                                                                     | [`on.schedule`](/de/actions/reference/workflows-and-actions/workflow-syntax#onschedule)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| [`stage`](https://jenkins.io/doc/book/pipeline/syntax/#stage)                                                                                       | [`jobs.<job_id>`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_id) <br> [`jobs.<job_id>.name`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idname)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| [`tools`](https://jenkins.io/doc/book/pipeline/syntax/#tools)                                                                                       |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [Spezifikationen für von GitHub gehostete Runner](/de/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images) |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| [`input`](https://jenkins.io/doc/book/pipeline/syntax/#input)                                                                                       | [`inputs`](/de/actions/reference/workflows-and-actions/metadata-syntax#inputs)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| [`when`](https://jenkins.io/doc/book/pipeline/syntax/#when)                                                                                         | [`jobs.<job_id>.if`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n\n## Sequenzielle „Stages“ (Phasen) verwenden\n\n### Parallele Verarbeitung von Aufträgen\n\nJenkins kann die `stages` und `steps` parallel ausführen.\nGitHub Actions führt Jobs parallel aus und kann mithilfe einer Syntax auf Schrittebene auch Schritte innerhalb eines Jobs gleichzeitig ausführen. Weitere Informationen finden Sie unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsbackground).\n\n| Jenkins Parallel                                                    | GitHub Actions                                                                                                                      |\n| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| [`parallel`](https://jenkins.io/doc/book/pipeline/syntax/#parallel) | [`jobs.<job_id>.strategy.max-parallel`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel) |\n\n### Matrix\n\nSowohl GitHub Actions als auch Jenkins ermöglichen Ihnen, eine Matrix zu verwenden, um verschiedene Systemkombinationen zu definieren.\n\n| Jenkins                                                                  | GitHub Actions                                                                                                                                                                                      |\n| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [`axis`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-axes)       | [`strategy/matrix`](/de/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations#about-matrix-strategies) <br> [`context`](/de/actions/reference/workflows-and-actions/contexts) |\n| [`stages`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages)   | [`steps-context`](/de/actions/reference/workflows-and-actions/contexts#steps-context)                                                                                                               |\n| [`excludes`](https://jenkins.io/doc/book/pipeline/syntax/#matrix-stages) | Keine                                                                                                                                                                                               |\n\n### Schritte verwenden, um Aufgaben auszuführen\n\nJenkins gruppiert Schritte (`steps`) in Phasen (`stages`). Jeder dieser Schritte kann unter anderem ein Skript, eine Funktion oder ein Befehl sein. Ebenso verwendet GitHub Actions`jobs`, um bestimmte Gruppen von `steps` auszuführen.\n\n| Jenkins                                                       | GitHub Actions                                                                                       |\n| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| [`steps`](https://jenkins.io/doc/book/pipeline/syntax/#steps) | [`jobs.<job_id>.steps`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsteps) |\n\n## Beispiele für häufige Aufgaben\n\n### Auszuführende Pipeline mit `cron` planen\n\n#### Jenkins-Pipeline mit `cron`\n\n```yaml\npipeline {\n  agent any\n  triggers {\n    cron('H/15 * * * 1-5')\n  }\n}\n```\n\n#### GitHub Actions Workflow mit `cron`\n\n```yaml\non:\n  schedule:\n    - cron: '*/15 * * * 1-5'\n```\n\nWeitere Informationen zu `schedule`-Ereignissen und zur akzeptierter Cron-Syntax findest du unter [Ereignisse zum Auslösen von Workflows](/de/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule).\n\n### Umgebungsvariablen in einer Pipeline konfigurieren\n\n#### Jenkins-Pipeline mit einer Umgebungsvariablen\n\n```yaml\npipeline {\n  agent any\n  environment {\n    MAVEN_PATH = '/usr/local/maven'\n  }\n}\n```\n\n#### GitHub Actions Workflow mit einer Umgebungsvariable\n\n```yaml\njobs:\n  maven-build:\n    env:\n      MAVEN_PATH: '/usr/local/maven'\n```\n\n### Von Upstream-Projekten ausgehend bauen\n\n#### Jenkins-Pipeline, die aus einem Upstream-Projekt erstellt wird\n\n```yaml\npipeline {\n  triggers {\n    upstream(\n      upstreamProjects: 'job1,job2',\n      threshold: hudson.model.Result.SUCCESS\n    )\n  }\n}\n```\n\n#### GitHub Actions Workflow, der aus einem upstream-Projekt erstellt wird\n\n```yaml\njobs:\n  job1:\n  job2:\n    needs: job1\n  job3:\n    needs: [job1, job2]\n```\n\n### Mit mehreren Betriebssystemen bauen\n\n#### Jenkins-Pipeline, die mit mehreren Betriebssystemen erstellt wird\n\n```yaml\npipeline {\n  agent none\n  stages {\n    stage('Run Tests') {\n      matrix {\n        axes {\n          axis {\n            name: 'PLATFORM'\n            values: 'macos', 'linux'\n          }\n        }\n        agent { label \"${PLATFORM}\" }\n        stages {\n          stage('test') {\n            tools { nodejs \"node-20\" }\n            steps {\n              dir(\"scripts/myapp\") {\n                sh(script: \"npm install -g bats\")\n                sh(script: \"bats tests\")\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n#### GitHub Actions Workflow, der mit mehreren Betriebssystemen erstellt wird\n\n```yaml\nname: demo-workflow\non:\n  push:\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [macos-latest, ubuntu-latest]\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-node@v7\n        with:\n          node-version: 20\n      - run: npm install -g bats\n      - run: bats tests\n        working-directory: ./scripts/myapp\n```"}