Je suis un peu n00b en ce qui concerne nodejs npm, mais depuis que nous l'avons implémenté dans notre environnement de construction en suivant les étapes recommandées dans plusieurs articles, nous avons multiplié par trois nos temps de génération.
Nous l'utilisons pour les choses standards (minify/concat/etc js/css/etc)
Nous utilisons TeamCity et avons ajouté une étape Node.js NPM, puis une étape gulp pour exécuter les tâches (RE: https://github.com/jonnyzzz/TeamCity.Node ).
La tâche pour installer NPM prend le plus de temps, 2min 10 secondes, ce qui représente plus de 65% du temps total de construction en appelant la commande "npm install", qui semble télécharger à nouveau tous les packages de chaque construction.
Étape 3/7: Configuration du NPM (NPM.js NPM) (2m: 10s)
[npm install] Démarrage: cmd/c npm install
Les temps de construction totaux antérieurs étaient d’environ 1 minute 30 secondes, tests unitaires compris.
est-il possible de les mettre en cache localement et d'empêcher le téléchargement à chaque génération? dans le profil utilisateur ou quelque chose peut-être par opposition au dossier de construction?
Plus de détails ..
Ceci explique probablement mieux la configuration http://www.dotnetcurry.com/visualstudio/1096/using-grunt-gulp-bower-visual-studio-2013-2015
Nous avons des projets C # qui utilisent le nouveau Task Runner Explorer. Les dépendances sont enregistrées dans un package.json. Vous pré-exécutez "npm install" une fois sur votre environnement local dans votre espace de travail (vous devez utiliser un fichier .tfignore pour l'empêcher.) de l’enregistrement à la source), puis à nouveau, sauf si vous démarrez un nouvel espace de travail local.
Lorsque la compilation est exécutée, elle doit exécuter "npm install" à partir de la ligne de commande. Elle relève les dépendances dans le fichier package.json et les installe dans un sous-dossier du répertoire de travail de la construction, même si les fichiers sont déjà présents. qu’une version précédente (c’est-à-dire que l’agent de TC ne les ait pas nettoyés), vous ne pouvez pas les installer en dehors du dossier de travail.
Je peux me tromper ... Ou plutôt devrais-je dire que j'espère que je me trompe et que je cherche un moyen de prendre en charge cela, mais quelle que soit la solution choisie, elle doit fonctionner avec la tâche runner Explorer pour que l'expérience F5 le dev est toujours le même sur leur local.
Nous avons plusieurs agents oui.
Le meilleur moyen que j’ai trouvé pour résoudre ce problème était de sauvegarder/restaurer le dossier des modules de nœuds, j’ai écrit un article de blog à ce sujet ici
https://beerandserversdontmix.com/2016/06/04/teamcity-and-avoiding-redownloading-of-npm-packages/
Je ne connais pas Node.js, mais voici quelques suggestions spécifiques à TeamCity:
%TEMP%
? Dans ce cas, ils ne seront pas réutilisables entre les générations TeamCity suivantes, car un agent TeamCity détournera le répertoire %TEMP%
(le redirigera vers <TeamCity Home>/buildAgent/temp/buildTmp
) et l'effacera toujours complètement avant chaque nouvelle génération. (Voir buildTmp
ici .) %TEMP%
et d'autres emplacements) et de donner ainsi une marge de manœuvre à TeamCity.Si vous n'utilisez pas de version "en vrac", cela pourrait être votre problème. Vous pouvez spécifier quelque chose comme npm install [email protected]
, mais vous restez toujours bloqué sur une version plus ancienne, et si vos développeurs modifient fréquemment ce qu'ils construisent contre, votre système de construction se désagrégera.
Dans votre packages.json, vous pouvez utiliser * et ~ pour définir des versions génériques, comme 3. * ou ~ 2.5, qui vous permettraient d'obtenir une révision "mineure" de 3.x telle que 3.0.2 ou 3.0.99, être quelque chose de similaire, n’importe quelle version de 2.5.x peut être installée, mais pas la 2.6.0.