Blog

Modernisierung von CI/CD: Migration von Bitbucket Pipelines zu GitHub Actions

26.05.2026
Lesezeit: 4 Minuten.
Zuletzt aktualisiert: 26 .05.2026

Inhaltsübersicht

In früheren Artikeln haben wir uns mit der Migration von Repositorys aus Bitbucket Cloud, die sichere Aktualisierung von Projektabhängigkeiten sowie die Modernisierung von CI/CD-Workflows durch die Umstellung von Jenkins- und Bash-basierten Pipelines auf GitHub Actions. Auf dieser Grundlage besteht der letzte Schritt darin, native Bitbucket-Pipelines zu migrieren und den Übergang zu einem vollständig einheitlichen CI/CD-System abzuschließen.

Dieser Artikel befasst sich mit der Umsetzung von YAML-basierten Bitbucket-Pipelines in GitHub-Actions-Workflows. Auf diese Weise folgen alle Pipelines projektübergreifend demselben Ausführungsmodell, was die Konsistenz, Wartbarkeit und langfristige Skalierbarkeit verbessert.

BitbucketGitHub

Bitbucket Pipelines werden in einer Datei namens „bitbucket-pipelines.yml“ definiert, die sich im Stammverzeichnis des Repositorys befindet. Diese Datei steuert das Verhalten von CI/CD-Workflows, darunter:

  • Wenn Pipelines ausgelöst werden
  • Welche Schritte oder Aufgaben werden ausgeführt?
  • Auftragsabwicklung und Abhängigkeiten
  • Erstellung und Wiederverwendung von Artefakten zwischen einzelnen Schritten

Vor der Umstellung auf GitHub Actions ist es unerlässlich, das Verhalten der bestehenden Pipeline genau zu verstehen, damit sie präzise nachgebildet werden kann.

Nachfolgend finden Sie ein Beispiel für eine Bitbucket-Pipeline, die in diesem Projekt verwendet wird:

definitions:
  commonItems:
    &setupEnvironment |
      export COMMIT=$(echo $BITBUCKET_COMMIT | cut -b 1-8)
      git submodule update --init --recursive
      echo "#define REVISION_NUMBER 0x$COMMIT" > src/revision.h

  git:
    &gitSubmoduleUpdate |
      git submodule update --init

verify_release_version: &verify_release_version
  step:
    name: Verify release version
    script:
      - git submodule update --init
      - ./scripts/check_release_version.sh

cpplint: &cpplint
  step:
    name: Lint code
    image: my-registry/lint-image:latest
    script:
      - *gitSubmoduleUpdate
      - ./scripts/lint.sh

test: &test
  step:
    name: Run tests
    runs-on:
      - self.hosted
      - linux
    script:
      - *setupEnvironment
      - make test

build: &build
  step:
    name: Build project
    runs-on:
      - self.hosted
      - linux
    script:
      - *setupEnvironment
      - make build
    artifacts:
      - build/**

upload: &upload
  step:
    name: Upload build output
    script:
      - export DESTINATION=builds/$BITBUCKET_BRANCH
      - mkdir -p $DESTINATION
      - cp -r build/* $DESTINATION/
      - scp -r builds user@remote-server:/path/to/storage

Dabei fallen einige wichtige Verhaltensweisen besonders auf:

  • Wiederverwendbare Skripte mit YAML-Ankern (&setupEnvironment)
  • Parallele Ausführung von Schritten zur Beschleunigung von Builds
  • Artefakte, die in einem Schritt erstellt und später wiederverwendet werden
  • Zweig-spezifische Pipelines, die steuern, welche Jobs auf „main“, „feature/*“ oder „release/*“ ausgeführt werden

Es ist entscheidend, diese Muster zu verstehen, bevor die Pipeline auf GitHub Actions portiert wird.

GitHub-Actions-Workflows werden unter .github/workflows/ definiert, in der Regel mit einem Workflow pro Datei. Jeder Workflow legt Folgendes fest:

  • Auslöser, die steuern, wann der Workflow ausgeführt wird
  • Aufträge als Arbeitseinheiten
  • Abhängigkeiten zwischen Aufträgen mithilfe von „needs“
  • Zwischen Jobs übergebene Artefakte

Nachfolgend finden Sie den migrierten Workflow, der das Verhalten der Bitbucket-Pipeline widerspiegelt:

name: CI Workflow

on:
  push:
    branches:
      - main
      - 'feature/*'
      - 'release/*'

env:
  BUCKET: example-bucket
  AWS_REGION: region-value

jobs:
  lint:
    name: Lint code
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - run: ./scripts/lint.sh

  test:
    name: Run tests
    runs-on: [ "self-hosted", "ap-southeast-2", "ubuntu", "x64" ]
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - run: ./scripts/setup_environment.sh
      - run: make test

  build:
    name: Build project
    runs-on: [ "self-hosted", "ap-southeast-2", "ubuntu", "x64" ]
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - run: ./scripts/setup_environment.sh
      - run: make build
      - uses: actions/upload-artifact@v4
        with:
          name: build-artifacts
          path: build/

  release:
    name: Release build
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: actions/download-artifact@v4
        with:
          name: build-artifacts
          path: build/
      - run: |
          mkdir -p deploy/${GITHUB_REF_NAME}
          tar -czf deploy/${GITHUB_REF_NAME}/artifacts.tar.gz -C build .
          echo "{\"artifact\":\"artifacts.tar.gz\",\"revision\":\"${GITHUB_SHA}\"}" > deploy/${GITHUB_REF_NAME}/release_info.json
      - name: Upload to S3
        run: |
          aws s3 sync deploy "s3://${BUCKET}/" \
            --region $AWS_REGION \
            --acl private

Der Workflow wird automatisch bei Pushes in die Zweige „main“, „feature/*“ und „release/*“ ausgeführt und bildet damit die verzweigbasierten Pipelines von Bitbucket nach.

Aufgaben wie „lint“ und „test“ können parallel ausgeführt werden, während andere auf die Erfüllung von Abhängigkeiten warten.

Das Schlüsselwort „needs“ stellt sicher, dass der Release-Job erst gestartet wird, nachdem der Build erfolgreich abgeschlossen wurde.

Artefakte werden im Build-Job hochgeladen und im Release-Job mithilfe der nativen Artefakt-Aktionen von GitHub heruntergeladen.

Umgebungsvariablen legen die Werte für Bucket und Region fest, und Artefakte werden mithilfe von Standardbefehlen der AWS-CLI hochgeladen. Auf Wunsch kann für S3-Uploads auch eine eigene GitHub-Action verwendet werden.

Nachdem die nativen Bitbucket-Pipelines erfolgreich auf GitHub Actions migriert wurden, laufen nun alle CI/CD-Workflows auf einer einzigen, einheitlichen Automatisierungsplattform. Dies gewährleistet ein einheitliches Verhalten über alle Projekte hinweg, vereinfacht die Wartung und bietet eine sichere und skalierbare Grundlage für die weitere Entwicklung.

Dieser Migrationsprozess zeigt einen praktischen Weg auf, wie Repositorys verschoben, Abhängigkeiten gesichert und Pipelines modernisiert werden können – wobei die gesamte Automatisierung auf strukturierte und wartungsfreundliche Weise unter GitHub Actions zusammengefasst wird.

Weitere Blogbeiträge findest duhier.

Newsletter für Tech-Experten

Signal, kein Rauschen –

direkt in Ihren Posteingang.

Schließen Sie sich mehr als 12.000 Ingenieuren und Führungskräften aus der Wirtschaft an, die Praxisberichte zu SRE, DevOps und Cloud-nativer Zuverlässigkeit erhalten.

Tech-Blogs mit tiefgehenden Einblicken und Fallstudien
Neue Technologien, sorgfältig ausgewählt

Ihre geschäftliche E-Mail-Adresse

Wir gehen respektvoll mit Ihrem Posteingang um. Lesen Sie unsere Datenschutzerklärung.

Mehr Beiträge

Einleitung In ereignisgesteuerten Kubernetes-Architekturen spiegeln die CPU- und Speicherauslastung oft nicht die tatsächliche Systemauslastung wider. Ein Worker-Pod kann aus CPU-Sicht im Leerlauf sein, während Tausende von Nachrichten...
Lesen
Der Betrieb moderner Infrastruktur wird exponentiell schwieriger. Was früher funktionierte – eine Handvoll Dashboards, statische Warnmeldungen und Techniker, die bei Vorfällen sofort eingriffen – lässt sich in der heutigen Cloud-nativen Umgebung nicht mehr skalieren...
Lesen
Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.