NPM Best Practices für die kontinuierliche Integration

8

Ich erstelle ein HTML5-Frontend mit NPM-basierten Tools ( grunt ).

Einer der ersten Schritte meines kontinuierlichen Integrations-Build-Prozesses ist die Ausführung von npm install .

npm install ist LANGSAM . Selbst mit einem lokalen NPM-Proxy-Caching von Artefakten (Sonatypes Nexus 3) dauert es immer noch 4 Minuten!

%Vor%

Wenn ich meinen üblichen Best Practices für die kontinuierliche Integration folge, würde ich von einem ursprünglichen SCM-Repository starten und den Build ausführen. Dies bedeutet, dass jedes Mal, wenn der CI-Build eine neue npm install durchführen muss, die Kosten von 4 Minuten übernommen werden.

Dies ist ein signifikanter Anteil meiner Bauzeit. Ich bin unzufrieden, dass der Build so lange dauert.

Die Alternative scheint zu sein, die node_modules zwischen Builds herum zu halten. Allerdings hatte ich Probleme damit, dass der Build instabil wurde.

Das Entfernen von Abhängigkeiten von package.json entfernt sie nicht von node_modules mit einem einfachen npm install . Ich kann das mit einem npm prune zuerst umgehen.

Was gilt hier als Best Practice?

    
jwa 25.08.2016, 07:08
quelle

4 Antworten

1

Wenn Sie berücksichtigen, dass Sie neue Pakete installieren müssen, haben Sie keine andere Wahl als die Installation aufzurufen. Ich glaube fest daran, dass sie sich auf den "Build" -Prozess und nicht auf den "Dependency Management" -Prozess beziehen.

Warum sind sie anders? Lassen Sie uns ein Beispiel durchgehen, um es deutlicher zu machen.

  

Als Entwickler müssen Sie beim ersten Start Ihres Jobs "installieren"   Software, die Code ermöglicht. Dies wird normalerweise einmal durchgeführt.   Danach können Sie mit dem Codieren beginnen. Letzteres ist der "Build" -Teil   wie Sie Wert für jede Funktion erzeugen, die Ihr Code produziert. Von   Sie können Ihre Werkzeugliste von Zeit zu Zeit aktualisieren, hinzufügen oder aktualisieren.

In diesem Beispiel würde die tägliche Installation Ihrer Tools bei der Arbeit beginnen, bevor Sie mit dem Codieren beginnen würden.

Ich würde vorschlagen, dass Sie sicherstellen, dass der Bauprozess, der das Erzeugen eines Artefakts (wie zum Beispiel ein Jar) bedeutet, von der Abhängigkeitsinstallation entkoppelt ist. Das bedeutet, dass die Installation einmal durchgeführt wird und das Bauen problemlos fortgesetzt werden kann. Sie erwähnen nicht, was gebaut wird, aber Grunzen können sich sicher um den Rest kümmern.

Daher glaube ich, dass das Beschneiden und Installieren eine gute Strategie ist. Du solltest dich nicht für die ersten Male sorgen. Betrachten Sie es als einen Kaltstart. Jedes System, das mit Subkomponenten implementiert ist, die zusammen als Pipeline arbeiten, hat dieses "Problem". Nehmen Sie zum Beispiel ein Auto. Es wird nicht so kraftstoffsparend sein, wenn Sie es starten, als wenn Sie es nach einer Stunde fahren.

    
gumol 28.11.2017 19:51
quelle
0

Planen Sie einen täglichen Job, um einen Docker-Container mit Ihren Abhängigkeiten zu erstellen. Führen Sie Ihren CI-Job im neuesten Container aus. Artefakt der Build des CI-Jobs.

    
Mike Marseglia 04.12.2017 16:59
quelle
0

Sie sollten npm -Pakete offline auf dem lokalen Rechner oder im lokalen Netzwerk installieren, Sie können hier einige Tipps finden = & gt; Offline-Installation von npm-Paketen

    
zatamine 04.12.2017 17:49
quelle
0

Haben Sie erwogen, den npm-Link zu verwenden oder sogar Ihren gesamten node_modules-Ordner zu verlinken? Mindestens npm Link könnte für Ihre Dev-Abhängigkeiten verwendet werden, die Sie normalerweise sowieso auf dem Server als kontrollierte Version haben möchten. Dies sollte die Dinge ein wenig beschleunigen.

    
jornare 04.12.2017 19:31
quelle

Tags und Links