web-dev-qa-db-fra.com

Vous pouvez télécharger tous les paquets sur chaque version de TeamCity.

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.

14
Joe

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/

6
Joe

Je ne connais pas Node.js, mais voici quelques suggestions spécifiques à TeamCity:

  1. Est-ce que NPM télécharge peut-être les fichiers dans %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 buildTmpici .)
    • Dans ce sens, il serait préférable de demander à NPM de stocker les fichiers téléchargés dans workspace (le répertoire dans lequel vous extrayez votre construction).
  2. Si NPM est en cours de téléchargement dans l'espace de travail (le répertoire de paiement), avez-vous peut-être demandé à effectuer un contrôle en mode minimal à chaque exécution? (Voir Modifier les paramètres de configuration | Paramètres de contrôle de version | Afficher les options avancées | Nettoyer tous les fichiers du répertoire de paiement avant la case à cocher build . )
    • Dans ce cas, décochez la case.
  3. TeamCity est-il en train de nettoyer le répertoire de paiement en raison d'un espace disque insuffisant? Ce nettoyage démarre automatiquement lorsque TeamCity s'aperçoit qu'il manque d'espace. (Le nettoyage peut être rendu encore plus agressif avec la fonction Espace disque disponible build.)
    • Dans ce cas, arrêtez d'utiliser la fonctionnalité de génération. S'il n'est pas utilisé et que le nettoyage automatique est à blâmer, il est difficile à contrôler. Il est préférable de simplement nettoyer cette partie de votre système de fichiers qui n'est pas gérée par TeamCity (votre propre %TEMP% et d'autres emplacements) et de donner ainsi une marge de manœuvre à TeamCity.
  4. Votre build est-il exécuté sur un agent différent à chaque fois? (Consultez l'historique de construction.) Si tel est le cas, il ne peut pas réutiliser les artefacts téléchargés (même s'ils sont téléchargés dans le répertoire de sortie), car ils sont téléchargés à chaque fois sur le système de fichiers d'un autre ordinateur. Je doute cependant que ce soit le cas, car TeamCity s’intéresse davantage à la réutilisation d’agents/espaces de travail (s’appliquant au même agent).
    • Dans ce cas, vous pouvez forcer la réutilisation de l'agent en définissant une exigence d'agent, en indiquant que vous souhaitez que vos générations s'exécutent en permanence sur un agent spécifique. Vous pouvez également isoler cet agent dans son propre pool, afin qu'aucune autre génération ne puisse y être exécutée.
10
sferencik

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.

0
dragon788