Skip to main content

Abhängigkeits-Updates mit Mergify und Snyk optimieren

Artikel von
blog feature snyk container custom base recommendations

23. August 2023

0 Min. Lesezeit

Die Verwaltung der Abhängigkeiten eines Projekts erfordert kontinuierlichen Einsatz und Aufmerksamkeit. Sicher haben Sie sich bei der Projektpflege schon mit einer der folgenden Fragen beschäftigt:

  • Für eine Abhängigkeit sind neue Versionen mit einem Feature oder Bugfix erschienen.

  • Eine Abhängigkeit weist Sicherheitslücken auf, für die neuere Versionen Korrekturen enthalten.

  • Abhängigkeitsversionen aktuell halten, damit Ihr Code nicht veraltet.

Zum Glück konnten wir mit GitHub-Bots und Lösungen wie Dependabot und GreenKeeper die Abhängigkeitsverwaltung teilweise automatisieren.

Diese Bots automatisieren jedoch meist nur das Erstellen eines neuen Code-Pull-Requests, der die vorgeschlagenen Änderungen enthält. Das Zusammenführen jedes einzelnen Requests ist weiterhin ein manueller Prozess, bei dem Sie genau darauf achten müssen, keinen Pull-Request zusammenzuführen, der die CI unterbricht.

Was ist besser als automatisierte Abhängigkeits-Updates? Automatisiertes Zusammenführen.

Was ist Mergify?

Mergify ist ein leistungsstarkes, innovatives Tool zur Automatisierung Ihrer GitHub-Workflows. So können Sie sich stärker auf die Entwicklung hervorragender Software und weniger auf umständliche Verwaltungsaufgaben konzentrieren. Im Kern ist Mergify ein Dienst zur Automatisierung von Pull-Requests, mit dem Sie benutzerdefinierte Workflows auf Grundlage von Bedingungen erstellen, die Sie festlegen. Dazu gehören unter anderem das automatische Zusammenführen, Schließen, Kommentieren, Reviewen, Labeln, Weiterleiten, Zurückportieren und Rebasen von Pull-Requests.

Nach der Einrichtung übernimmt Mergify einige der mühsameren Aufgaben bei Code-Reviews und der Projektverwaltung. Das Tool hilft Ihnen, Ihr Repository sauber zu halten, sorgt dafür, dass Ihr Master-Branch stabil bleibt, und reduziert den Zeitaufwand für manuelle Prozesse, die sich automatisieren lassen.

Im nächsten Abschnitt zeigen wir Ihnen, wie Sie Mergify nutzen können, um Abhängigkeits-Updates weniger zum Albtraum und mehr zum Kinderspiel zu machen.

Snyk-Pull-Requests für Abhängigkeits-Upgrades

Sie möchten bei Sicherheitskorrekturen auf dem neuesten Stand bleiben und veraltete Abhängigkeiten vermeiden? Hier kommt Snyk ins Spiel.

Snyk ist eine entwicklerfreundliche Sicherheitsplattform, mit der Entwickler die Sicherheit ihrer Anwendungen selbst verantworten können. Snyk ist vor allem für seine Funktionen zum Scannen auf Sicherheitslücken bekannt und bietet auch eine nahtlose Verwaltung von Abhängigkeits-Updates – insbesondere über automatisierte Pull-Requests.

Wie funktionieren die Pull-Requests für Abhängigkeits-Upgrades von Snyk? Snyk prüft regelmäßig automatisch alle Abhängigkeiten Ihres Projekts auf verfügbare Updates. Wird eine neuere Version gefunden, erstellt Snyk direkt in Ihrem GitHub-Repository einen Pull-Request mit den erforderlichen Änderungen. Dieser enthält umfassende Informationen zum Upgrade, etwa den zeitlichen Verlauf der Änderungen an der Abhängigkeit und das Datum der letzten Veröffentlichung. So können Sie die Änderungen gründlich prüfen, bevor Sie sie zusammenführen.

Upgrading dependencies with automatic PRs from Snyk.

Erste Schritte

Mit ein paar einfachen Schritten können Sie loslegen:

  1. Wählen Sie eines Ihrer GitHub-Code-Repositories aus, um den automatisierten Workflow für Abhängigkeits-Upgrades und das Zusammenführen zu installieren.

  2. Erstellen Sie ein Mergify-Konto und laden Sie die Mergify-GitHub-App in Ihr Repository ein.

  3. Erstellen Sie ein Snyk-Konto und verbinden Sie Ihr GitHub-Repository damit.

Automatische Abhängigkeits-Upgrades mit Snyk aktivieren

Öffnen Sie die Snyk-App, schließen Sie bei Bedarf die Registrierung ab und verbinden Sie das Repository, dessen Automatisierung Sie einrichten möchten, indem Sie ein GitHub-Repository importieren. Rufen Sie in der Snyk-Benutzeroberfläche die Seite „Projects“ auf, wählen Sie Add projects, anschließend die Code-Repositories aus, die Sie in Snyk importieren möchten, und klicken Sie auf Add selected repositories.

Import GitHub repositories to Snyk.

Nachdem das Projekt erfolgreich importiert wurde, aktivieren Sie die Pull-Requests für Abhängigkeits-Upgrades in Snyk. Wählen Sie dazu Settings, dann Integrations und anschließend GitHub aus:

GitHub integrations menu in the Snyk app UI.

Scrollen Sie dann nach unten zum Konfigurationsbereich Automatic dependency upgrade PRs und aktivieren Sie die Funktion:

Configure automatic fix pull request policies with Snyk.

Nachdem der Snyk-Bot nun automatisch Upgrade-Pull-Requests für Projektabhängigkeiten erstellt, rufen wir die Mergify-Konfiguration auf, um das Zusammenführen dieser Pull-Requests zu automatisieren.

Eine Auto-Merge-Richtlinie in Mergify erstellen

Verbinden Sie Mergify wie bei Snyk mit Ihrem GitHub-Konto. Als Nächstes fügen wir die Repositories hinzu, die Sie mit Mergify verwalten möchten.

Um die Git-Repositories zu bearbeiten, die Sie mit Mergify verwalten möchten, werden Sie zur Seite der GitHub-Anwendungen weitergeleitet. Dort können Sie die gewünschten Repositories aus dem Dropdown-Menü auswählen:

GitHub Mergify permissions screen highlighting “Only select repositories” and the “Select repositories” button.

Wenn Sie alle Repositories ausgewählt haben, für die Sie Mergify hinzufügen möchten, klicken Sie auf die Schaltfläche Save.

Als Nächstes konfigurieren wir die Merge-Richtlinie für unser Projekt. Dazu verwenden wir die Datei .mergify.yml im Stammverzeichnis des Repositorys. Tipp: Sie können die Datei auch im Verzeichnis .github/ ablegen, damit sie zusammen mit anderen CI-bezogenen Workflows und Konfigurationen gespeichert ist.

Die YAML-Konfigurationsdatei von Mergify besteht aus folgenden Bausteinen:

  • Merge-Warteschlangen – Eine Warteschlange, in die Pull-Requests eingestellt werden, bis sie nacheinander in Ihren Main-Branch übernommen werden können – ohne Merge-Konflikte oder Breaking Changes.

  • Pull-Request-Regeln – Wie der Name schon sagt, handelt es sich um eine Reihe von Bedingungen, anhand derer Pull-Requests geprüft und anschließend Aktionen ausgeführt werden, etwa das Verschieben in eine Merge-Warteschlange.

Hier sehen Sie ein einfaches Beispiel:

pull_request_rules:
  - name: automatic merge on approval
    conditions:
      - "#approved-reviews-by>=1"
    actions:
      merge:
        method: merge

Mit der obigen Konfiguration wird der Pull-Request zusammengeführt, wenn mindestens ein Reviewer ihn freigegeben hat.

Ohne Mergify könnte ein Reviewer die Änderungen in einem Pull-Request sehr schnell freigeben. Dennoch müsste er warten, bis alle CI-Prüfungen erfolgreich abgeschlossen sind – oder bis die Person, die den Pull-Request erstellt hat, bestätigt, dass die freigegebenen Änderungen zum Zusammenführen bereit sind. Das Zusammenführen erfolgt manuell.

Mit den obigen Bedingungen und Mergify wird der Pull-Request nach einer Freigabe automatisch in den Main-Branch übernommen.

Snyk-Pull-Requests für Upgrades automatisch zusammenführen

Fügen wir dieselbe Automatisierung für Snyk-Pull-Requests hinzu, mit denen Abhängigkeiten aktualisiert werden. Unsere Mergify-Konfiguration sieht dann so aus:

queue_rules:
  - name: Snyk PRs Queue
    conditions:
      - "check-success ~= .*"

pull_request_rules:
  - name: Automatic merge Snyk PRs on Status Checks passing
    conditions:
      - title~=^\[Snyk\]
      - head~=^snyk-fix
      - base=main
    actions:
      queue:
        name: "Snyk PRs Queue"
      label:
        add:
          - "auto-merge"

Sehen wir uns die einzelnen Schritte genauer an:

  • Es wird eine neue Merge-Warteschlange mit dem Namen Snyk PRs Queue erstellt. Pull-Requests werden nur dann zusammengeführt, wenn alle CI-Statusprüfungen erfolgreich abgeschlossen sind. Dadurch stellen wir sicher, dass unsere Tests und andere Automatisierungen in der CI erfolgreich durchlaufen und die aktualisierten Abhängigkeitsversionen keine Breaking Changes verursachen – soweit unsere Tests das feststellen können.

  • Damit Pull-Requests in die Snyk PRs Queue aufgenommen werden, müssen sie folgende Bedingungen erfüllen:

    • Der Titel des Pull-Requests beginnt mit [Snyk].

    • Der Name des Head-Branches des Pull-Requests beginnt mit snyk-fix.

    • Der Name des Base-Branches, in den der Pull-Request übernommen wird, lautet main.

Sind die obigen Bedingungen erfüllt, versehen wir den Pull-Request mit dem GitHub-Label „auto-merge“ und stellen ihn in die Snyk PRs Queue.

Committen Sie die neue Mergify-Konfigurationsdatei in das Repository und beobachten Sie, wie die Automatisierung wirkt, sobald Snyk einen neuen Pull-Request erstellt:

A Snyk dependency upgrade pull request gets matched with a Mergify CI check integration that shows a rule condition matching and automatically gets merged when the CI tests finish running.

Tipp: Mit Richtlinien für Snyk-Abhängigkeits-Upgrades die Anzahl der Benachrichtigungen reduzieren

Die Automatisierung von Abhängigkeits-Pull-Requests kann Ihr Team schnell mit einer großen Menge an Requests überfordern. Entscheidend ist, ein Gleichgewicht zu finden, bei dem Updates den Workflow Ihres Teams nicht behindern. Dabei helfen Ihnen die Richtlinien für Snyk-Abhängigkeits-Upgrades.

1. Begrenzen Sie die Anzahl gleichzeitig offener Upgrade-Pull-Requests: Mit Snyk können Sie die Anzahl automatisierter Upgrade-Pull-Requests begrenzen, die gleichzeitig offen sein dürfen. So wird Ihr Team nicht von Upgrade-Anfragen überflutet und kann sich auf wichtige Entwicklungsaufgaben in der Pipeline konzentrieren.

2. Legen Sie fest, welche Pakete nicht aktualisiert werden sollen: Nicht alle Pakete müssen oder sollten häufig aktualisiert werden. Ein ständiges Upgrade auf die neueste Version kann mitunter Ihren Code beschädigen oder instabil machen. In solchen Fällen können Sie bestimmte Pakete von den automatisierten Updates durch Snyk ausschließen. So behalten Sie die Kontrolle über den Zeitplan für Abhängigkeits-Updates und konzentrieren sich auf die Pakete, die für Ihr Projekt am wichtigsten sind.

3. Begrenzen Sie den Umfang der Änderungen, indem Sie nur Minor- und Patch-Versionen aktualisieren: Upgrades auf Major-Versionen können mitunter mehr Probleme verursachen, als sie lösen, da Breaking Changes oft zusätzliche Codeänderungen erfordern. Mit Snyk können Sie festlegen, dass automatisch nur Minor- und Patch-Versionen aktualisiert werden. So bleibt Ihre Anwendung stabil und profitiert trotzdem von Verbesserungen ohne Breaking Changes und von Sicherheitspatches.

Mit diesen drei Richtlinien reduzieren Sie die Menge der Benachrichtigungen zu Abhängigkeits-Upgrades. So kann Ihr Entwicklerteam wichtige Updates leichter im Blick behalten und das Risiko von Chaos in der Codebasis senken. Denken Sie daran: Automatisierte Updates sollen den Aufwand manueller Updates reduzieren – nicht an anderer Stelle verursachen. Nutzen Sie die leistungsstarken Funktionen von Snyk für einen reibungslosen, gut organisierten CI-Workflow ohne unnötige Ablenkungen.

Automatisieren und entspannen

Das automatische Zusammenführen von Abhängigkeits-Upgrades kann die Geschwindigkeit und Produktivität Ihres Teams steigern und ist eine hervorragende Möglichkeit zur Automatisierung.

Mit den Pull-Requests für Abhängigkeits-Upgrades von Snyk müssen Sie nicht länger manuell nach Updates suchen und diese nachverfolgen. Verabschieden Sie sich von einer Flut an Abhängigkeits-Updates und begrüßen Sie einen optimierten, sicheren und unkomplizierten Aktualisierungsprozess. Gemeinsam können Mergify und Snyk Ihren Workflow auf ein neues Niveau bringen.

Starten Sie mit Capture-the-Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.