Back

Automatisches Erstellen von Pull Requests bei jedem Push

Automatisches Erstellen von Pull Requests bei jedem Push

Git-Automatisierung kann Ihren Entwicklungs-Workflow erheblich optimieren. Dieser Leitfaden erklärt, wie Sie mit verschiedenen Tools und Ansätzen automatisch Pull Requests erstellen, wenn Code in Ihr Repository gepusht wird.

Wichtige Erkenntnisse

  • Lernen Sie drei verschiedene Methoden zur Automatisierung der PR-Erstellung kennen: GitHub Actions, GitHub CLI und CI/CD-Tools
  • Implementieren Sie sichere Automatisierungspraktiken mit ordnungsgemäßer Authentifizierung und Berechtigungen
  • Verstehen Sie Best Practices für die Verwaltung automatisierter Pull Requests
  • Richten Sie Branch-Schutz und bedingte PR-Erstellungslogik ein

Methode 1: Verwendung von GitHub Actions (empfohlen)

GitHub Actions bietet eine native, zuverlässige Möglichkeit, die PR-Erstellung zu automatisieren. So richten Sie es ein:

Schritt 1: Erstellen eines GitHub Actions Workflows

  1. Erstellen Sie ein Verzeichnis .github/workflows/ in Ihrem Repository, falls es noch nicht existiert
  2. Erstellen Sie eine neue Datei namens auto-pr.yml
  3. Fügen Sie die folgende Konfiguration hinzu:
name: Auto PR on Push

on:
  push:
    branches:
      - 'feature/**'    # Matches feature/* branches
      - 'bugfix/**'     # Matches bugfix/* branches
      # Add more branch patterns as needed

jobs:
  create-pull-request:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Required for proper branch comparison

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: ""Auto-created PR from ${{ github.ref_name }}""
          title: ""Auto PR: ${{ github.ref_name }}""
          body: |
            Automated pull request created from push to ${{ github.ref_name }}
            
            Branch: ${{ github.ref_name }}
            Triggered by: ${{ github.actor }}
          branch: ${{ github.ref_name }}
          base: main
          labels: |
            automated-pr
            needs-review

Schritt 2: Konfigurieren der Repository-Einstellungen

  1. Gehen Sie zu den Einstellungen Ihres Repositorys → Actions → Allgemein
  2. Wählen Sie unter ""Workflow-Berechtigungen"" die Option ""Lese- und Schreibberechtigungen""
  3. Speichern Sie die Änderungen

Methode 2: Verwendung von GitHub CLI

Für Entwickler, die lokale Automatisierung bevorzugen, bietet GitHub CLI eine unkomplizierte Lösung.

Schritt 1: Installieren von GitHub CLI

Wählen Sie Ihre Plattform:

  • macOS: brew install gh
  • Ubuntu/Debian: sudo apt install gh
  • Windows: winget install GitHub.cli oder Download von <https://cli.github.com>
  • Andere Linux-Systeme: Folgen Sie den Anweisungen unter <https://github.com/cli/cli#installation>

Schritt 2: Authentifizieren von GitHub CLI

gh auth login

Schritt 3: Einrichten des Post-Push-Hooks

Erstellen und konfigurieren Sie den Post-Push-Hook:

#!/bin/bash

# Get current branch name
BRANCH=$(git rev-parse --abbrev-ref HEAD)

# Don't create PR for main/master branches
if [[ ""$BRANCH"" == ""main"" ]] || [[ ""$BRANCH"" == ""master"" ]]; then
    exit 0
fi

# Check if PR already exists
PR_EXISTS=$(gh pr list --head ""$BRANCH"" --json number --jq length)

if [ ""$PR_EXISTS"" -eq 0 ]; then
    # Create PR if it doesn't exist
    gh pr create 
        --base main 
        --head ""$BRANCH"" 
        --title ""Auto PR: $BRANCH"" 
        --body ""Automated pull request created from $BRANCH"" 
        --label ""automated-pr""
fi

Methode 3: Verwendung von CI/CD-Tools

Für Teams, die andere CI/CD-Plattformen verwenden, hier ein Beispiel, wie Sie die PR-Automatisierung mit der GitHub REST-API implementieren können.

Jenkins Pipeline Beispiel

pipeline {
    agent any
    
    environment {
        GITHUB_TOKEN = credentials('github-token')
    }
    
    stages {
        stage('Create PR') {
            steps {
                script {
                    def branchName = sh(
                        returnStdout: true, 
                        script: 'git rev-parse --abbrev-ref HEAD'
                    ).trim()
                    
                    // Don't create PR for main/master
                    if (branchName != 'main' && branchName != 'master') {
                        def response = sh(
                            returnStdout: true,
                            script: """"""
                                curl -X POST 
                                    -H 'Authorization: token ${GITHUB_TOKEN}' 
                                    -H 'Accept: application/vnd.github.v3+json' 
                                    https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/pulls 
                                    -d '{
                                        ""title"": ""Auto PR: ${branchName}"",
                                        ""head"": ""${branchName}"",
                                        ""base"": ""main"",
                                        ""body"": ""Automated pull request created from Jenkins pipeline""
                                    }'
                            """"""
                        )
                    }
                }
            }
        }
    }
}

Best Practices und Sicherheitsüberlegungen

  • Aktivieren Sie Branch-Schutzregeln für Ihren Hauptbranch
  • Erstellen Sie standardisierte PR-Vorlagen
  • Verwenden Sie Labels, um automatisierte PRs zu unterscheiden
  • Richten Sie die automatische Zuweisung von Reviewern ein
  • Speichern Sie Token sicher mithilfe von Repository-Geheimnissen
  • Beschränken Sie die Token-Berechtigungen auf die erforderlichen Bereiche
  • Rotieren Sie Authentifizierungstoken regelmäßig
  • Überprüfen Sie die Einstellungen für automatisierte PRs, um die Offenlegung sensibler Daten zu verhindern

Fazit

Die Automatisierung der Erstellung von Pull Requests kann Ihren Entwicklungs-Workflow erheblich verbessern, indem sie konsistente Code-Review-Prozesse sicherstellt und den manuellen Aufwand reduziert. Ob Sie sich für GitHub Actions, GitHub CLI oder CI/CD-Tools entscheiden, die Implementierung dieser Automatisierungstechniken wird dazu beitragen, Ihren Entwicklungsprozess zu optimieren und eine bessere Kontrolle der Codequalität zu gewährleisten.

FAQs

Die Automatisierung der PR-Erstellung sorgt für Konsistenz in Ihrem Code-Review-Prozess, spart Zeit, reduziert menschliche Fehler und hilft, eine klare Historie der Codeänderungen zu pflegen. Dies ist besonders nützlich für Teams, die gleichzeitig an mehreren Features arbeiten.

GitHub Actions wird für die meisten Benutzer empfohlen, da es eine native Integration mit GitHub bietet, nur minimale Einrichtung erfordert und robuste Funktionen bietet. Wenn Sie jedoch lokale Automatisierung bevorzugen, ist GitHub CLI eine gute Alternative, während CI/CD-Tools besser für komplexe Unternehmensumgebungen geeignet sind.

Die bereitgestellten Skripte enthalten Prüfungen, um doppelte PRs zu verhindern. Für GitHub CLI prüfen wir vorhandene PRs, bevor wir neue erstellen. Mit GitHub Actions können Sie die Aktion `peter-evans/create-pull-request` verwenden, die dies automatisch handhabt.

Ja, Sie können die PR-Vorlage anpassen, indem Sie den Body-Parameter in einer der Methoden ändern. Für Labels können Sie diese im GitHub Actions Workflow oder im CLI-Befehl hinzufügen. Sie können auch repository-weite PR-Vorlagen einrichten.

Verwenden Sie Repository-Geheimnisse zum Speichern von Token, implementieren Sie eine ordnungsgemäße Bereichseinschränkung für Berechtigungen und rotieren Sie Anmeldedaten regelmäßig. Verwenden Sie für GitHub Actions nach Möglichkeit das integrierte GITHUB_TOKEN. Erstellen Sie für CLI- und CI/CD-Tools dedizierte Zugriffs-Token mit minimal erforderlichen Berechtigungen.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers