Blog
Zwischenspeichern Ihrer Node-Module in Azure DevOps

Wie können Sie dafür sorgen, dass Ihre Builds schneller fertig werden, so dass Sie öfter bauen können und früher Feedback erhalten? Sie können dies tun, indem Sie Ihre Knotenmodule in Azure DevOps zwischenspeichern. Wie das geht, erkläre ich Ihnen in diesem Blogbeitrag.
Die Erstellung einer Build-Pipeline in Azure DevOps für eine Node.js-basierte Anwendung ist ganz einfach. Sie brauchen dafür nur ein paar Zeilen Code. Wahrscheinlich werden Sie weitere Aufgaben hinzufügen, z. B. Linting, das Ausführen von Tests und vielleicht noch mehr. Daher wird die Pipeline mit jeder hinzugefügten Aufgabe länger brauchen, um abgeschlossen zu werden. Lassen Sie uns damit beginnen, die Dinge mit Hilfe von Caching zu beschleunigen.
Das Repository für das Caching von Knotenmodulen in Azure DevOps finden Sie hier.
Angenommen, die YAML-Datei der Pipeline sieht wie folgt aus:
Der erste Schritt besteht darin, alle Abhängigkeiten zu installieren. Der zweite Schritt benötigt diese Abhängigkeiten, um den Build zu starten. In diesem Beispiel habe ich eine React-Anwendung verwendet. Jede Anwendung, die NPM-Pakete benötigt, wird jedoch von der Caching-Lösung profitieren.
Die Ergebnisse sind wie folgt:
Eine Bauzeit von unter einer Minute ist nicht schlecht, aber wir können noch besser werden.
Caching hinzufügen
Die azure-pipelines.yml im Repository wird wie folgt geändert:
Die Cache-Aufgabe nimmt verschiedene Eingaben entgegen. Es gibt eine Schlüsseleingabe, die ein normaler String-Wert oder in diesem Fall ein Dateipfad sein kann. Der Inhalt von package-lock.json wird gehasht und erzeugt einen dynamischen Cache-Schlüssel. Das heißt, wenn sich der Inhalt der Datei package-lock.json ändert, wird ein neuer Schlüssel erzeugt.
Die zweite Eingabe ist der Pfad des Ordners, der zwischengespeichert werden muss. NPM verwendet ~/.npm auf POSIX und %LocalAppData%npm-cache auf Windows-Rechnern. Auf dem Ubuntu-Image habe ich keine Möglichkeit gefunden, auf ~/.npm zuzugreifen, also habe ich stattdessen den Ordner .npm im Arbeitsbereich als Cache-Speicherort festgelegt. Dazu fügen Sie dem Befehl npm ci das Argument cache hinzu. Außerdem ist es empfehlenswert, den Cache-Ordner festzulegen, da er weiterläuft, wenn Sie z.B. zu einem Windows-Agenten wechseln.
Nachdem Sie die YAML-Datei übertragen und auf die Fertigstellung des Builds gewartet haben, sehen wir uns die Ergebnisse an:
Dieser Lauf dauert länger, weil der Cache gespeichert werden muss. D.h.: Der Cache-Schlüssel wurde nicht gefunden, also gibt es einen Cache-Miss.
Lassen Sie die Pipeline erneut laufen und überprüfen Sie die Ergebnisse:
Es dauert immer noch etwas länger, aber jetzt wird der Cache heruntergeladen und der Befehl npm ci holt sich die benötigten Node-Module aus dem .npm-Ordner. Die Aufgabe "NPM install dependencies" ging von 28 auf 10 Sekunden zurück.
Abhängig von der Anzahl der Aufgaben in Ihrer Build-Pipeline kann Ihre Laufleistung variieren. Bei meinem Kunden konnte ich die Build-Zeit von 5.29 Minuten auf 3.22 Minuten verbessern.
Fazit
Das Zwischenspeichern von Knotenmodulen in Azure DevOps verkürzt die Laufzeit Ihrer Pipeline, wenn Ihre Lösung auf Knotenpakete angewiesen ist. Meiner Meinung nach sollten Sie bei der Erstellung einer Pipeline mit dem Caching von Node-Modulen beginnen. Ich glaube, dass die Leistungsvorteile den Zeitaufwand für die Implementierung überwiegen.
Verfasst von

Riccardo Corradin
Unsere Ideen
Weitere Blogs
Contact



