J'ai un projet qui a:
Comment puis-je organiser l'ensemble de ce processus d'une manière saine, robuste et automatisée?
Ce que j'ai en ce moment, c'est Gulp et Maven, Maven étant propriétaire de tout le processus.
Ce genre de travaux, sauf que Maven est généralement très rigide et je sens que je vais trop loin. Utiliser antrun pour appeler Gulp est un truc moche. Il est très difficile de contrôler les dépendances entre ces étapes et de surveiller leurs résultats. Il est difficile de contrôler l'ordre des choses dans la même phase. La vérification de sécurité ne semble pas traiter les fichiers de rapport JUnit externes générés par Gulp. Je pourrais continuer.
Je me demande si je devrais faire plus dans mon serveur de build (Jenkins), peut-être en utilisant un pipeline de build ou des déclencheurs paramétrés - mais je ne l'ai jamais fait et je ne sais pas si c'est vraiment mieux.
Alors, comment le mettriez-vous en œuvre?
D'après mon expérience, le plugin maven frontal est de loin le meilleur plugin pour ce type de processus de construction/déploiement. https://github.com/eirslett/frontend-maven-plugin . C'est ainsi que je l'utilise pour Grunt mais il prend également en charge Gulp.
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>...</version>
<!-- optional -->
<configuration>
<workingDirectory>src/main/frontend</workingDirectory>
</configuration>
<execution>
<id>grunt build</id>
<goals>
<goal>grunt</goal>
</goals>
<!-- optional: the default phase is "generate-resources" -->
<phase>generate-resources</phase>
<configuration>
<!-- optional: if not specified, it will run Grunt's default
task (and you can remove this whole <configuration> section.) -->
<arguments>build</arguments>
</configuration>
</execution>
</plugin>
Une chose à savoir est le téléchargement du nœud pour le système sur lequel il est exécuté, donc si vous avez un système d'exploitation différent sur votre serveur de build, vous devrez vous assurer que c'est la version que vous avez vérifiée dans le contrôle de version, votre version locale (pour moi OSX) devra être maintenue locale à votre projet.
J'essaierais de construire une sorte de pipeline de pauvres.
Laissez grunt/gulp faire son travail en premier (traiter les ressources, exécuter des tests frontaux, etc. - préparer les artefacts à inclure dans WAR). Échec de la génération entière lorsque cette étape échoue (génération d'actifs ou tests).
Exécutez la construction maven régulière produisant le fichier WAR avec les actifs créés à l'étape 1. Il exécutera son propre ensemble de tests avec un fichier WAR normal. N'a pas besoin de connaître les choses de grognement/gorgée.
Vous aurez alors deux endroits où par exemple les tests sont exécutés (frontend, exécuté par grunt/gulp et backend par maven) mais la configuration de reporters corrects permettra aux serveurs CI de les détecter tous (nous utilisons TeamCity et cela le gère très bien).
Scriptez-le un peu et cela devrait être mieux que d'appeler le nœud via antrun plusieurs fois. Alternativement, vous pouvez exécuter la première étape à partir de la construction maven, mais il peut être difficile de contrôler les choses.
Ce projet a environ 2 ans mais il fait beaucoup de ce que vous recherchez.
https://github.com/pankajtandon/PointyPatient/blob/master/pointy-web/pom.xml
Extrayez le pom parent qui exécute tous les sous-projets ensemble, directement du Web vers le domaine jusqu'au référentiel et échoue en cas d'échec (tests Jasmine ou SpringMVC ou SpringServices). Et cela crée également une guerre pour le déploiement côté serveur.
C'était un pré-rapporteur, donc ce serait un ajout sympa. Bien que le plugin maven frontal ressemble maintenant à l'outil pour le travail.
HTH Pankaj
Je vais juste l'utiliser comme un talon parce que j'ai cherché à faire une chose similaire, et je reviendrai plus tard pour enrichir ma réponse. En attendant, vous devriez rechercher JHipster . Bien qu'ils aient une pile beaucoup plus grande et que leur pile soit déjà construite, ils font essentiellement ce que je pense que vous voulez dans leur processus de construction.
Bien que je ne sois pas entièrement d'accord avec leur processus de construction, je reviendrai pour expliquer pourquoi et ce que je fais dans les projets sur lesquels je travaille actuellement.