Comment organiser plein de build pipeline avec Gulp, Maven et Jenkins, tout le chemin à des tests d'intégration?
J'ai un projet:
- JS client avec un peu intéressant processus de construction. Qui comprend la compilation CSS, catenating et minifying JS et CSS, de traitement et de génération de HTML, et quelques autres étapes. Le Nœud des outils comme Grunt ou Gulp sont grands à présent.
- Java server est une GUERRE déployé sur Tomcat. Il intègre l'ensemble de ces actifs ainsi que tout le code Java. Il a toutes sortes de tests: tests Unitaires, tests d'intégration qui peut instancier un DAO et de parler de DB, et de bout en bout, l'API tests qui en fait de parler de l'application en cours d'exécution sur Tomcat.
- De bout en bout des tests avec le Rapporteur. Si vous n'êtes pas familier, il est un autre outil Nœud, qui encapsule le Sélénium.
Comment puis-je organiser l'ensemble de ce processus dans un esprit sain, robuste, et de manière automatisée?
Ce que j'ai en ce moment est Gorgée et Maven, avec Maven essentiellement le fait de posséder l'ensemble du processus.
- Il appelle Gorgée d'actifs de génération en génération-sources à l'aide de antrun (doh, troisième outil de construction!).
- Il exécute le Java ordinaire construire.
- Il démarre Tomcat avec ma GUERRE dans les pre-integration-test.
- Il fonctionne Java E2E tests de parler à cette tomcat avec failsafe plugin.
- Il appelle Gorgée de nouveau avec antrun, cette fois pour exécuter le Rapporteur tests.
- Il s'arrête Tomcat en post-integration-test.
- Il est censé vérifier les résultats des tests pour vérifier.
Ce genre de travaux, à l'exception que Maven est généralement très rigide et je sens que je vais trop loin. À l'aide de antrun appeler Gulp est un vilain tour. Il est très difficile de contrôler les dépendances entre ces mesures et le suivi de leurs résultats. Il est difficile de contrôler l'ordre des choses dans la même phase. Failsafe vérifier ne semble pas de processus externe JUnit fichiers de rapport Gulp génère. Je pourrais continuer.
Je me demande si je devrais en faire plus dans mon serveur de build (Jenkins), peut-être l'aide d'un construire un pipeline ou d'paramétrée déclenche - mais je ne l'ai jamais fait et je ne sais pas si c'est vraiment mieux.
Alors, comment voulez-vous mettre en œuvre?
- J'ai eu une requête similaire sur les Programmeurs.SE: programmers.stackexchange.com/questions/222660
- Quelle solution avez-vous pour? Je suis sur le point de commencer sur la même chose. Maven et Jenkins déjà partie du processus, mais je tiens à apporter gulp dans ce pour le CSS et le js compression, minification, etc
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, l'interface plugin maven est de loin le meilleur plugin pour ce type de build/processus de déploiement. https://github.com/eirslett/frontend-maven-plugin . C'est la façon dont je l'utilise pour Grognement, mais il prend en charge Gulp tout aussi bien.
Une chose d'être conscient de cela est la volonté de télécharger le nœud du système, il est en cours d'exécution sur, donc si vous avez un autre système d'exploitation sur votre serveur de build, vous aurez besoin de vous assurer que c'est la version que vous avez vérifié dans le contrôle de version, la version locale (pour moi OSX) devra être conservée à proximité de votre projet.
static
répertoire lors de votre gulp/grunt processus de construction. C'est donc une bonne idée d'ajouter le répertoire statique (ou seulement générés à l'intérieur) dans la liste des ignorés de votre IDE, afin de l'empêcher de l'indexation des fichiers à l'intérieur chaque fois que vous exécutez votre frontend processus de construction. Il sera de plus en plus problématique si le programme d'installation vous gulp source watchers par exemple.J'allais essayer de construire le genre de pauvre-homme-pipeline.
Laissez-grunt/gulp faire son travail en premier (processus actifs, exécutez frontend des tests, etc - préparer les objets à être inclus dans la GUERRE). L'échec de génération tout entière lors de cette étape échoue (actifs ou la génération de tests).
Régulièrement maven build la production de GUERRE du fichier avec l'actif créé à l'étape 1. Il sera exécuté propre série de tests avec l'ordinaire de la GUERRE de fichier. N'a pas besoin de savoir à propos de grunt/gulp choses.
Vous avez alors deux endroits où par exemple les tests sont exécutés (frontend, géré par grunt/gulp et backend par maven), mais la configuration de corriger les journalistes laissez-CI serveurs de détecter tous (nous utilisons TeamCity et il gère très bien).
Script un peu et ça devrait être mieux que d'appeler nœud via antrun plusieurs fois. Sinon, vous pouvez exécuter la première étape de l'intérieur maven build, mais il peut être difficile de maîtriser les choses.
Je vais juste l'utiliser comme un tampon parce que j'ai cherché à faire quelque chose de similaire, et je reviendrai plus tard pour enrichir ma réponse. En attendant, vous devez rechercher des JHipster. S'ils ont une beaucoup plus grande de la pile, et leur pile est déjà construit, ils sont essentiellement à faire ce que je pense que vous voulez à l'intérieur de leur processus de construction.
Si je ne suis pas complètement d'accord avec leur processus de construction, je reviendrai pour vous expliquer pourquoi et ce que je fais dans des projets, je suis actuellement en train de travailler sur.
Ce projet est d'environ 2 ans, mais il fait beaucoup de ce que vous cherchez.
https://github.com/pankajtandon/PointyPatient/blob/master/pointy-web/pom.xml
Ne caisse du pom parent qui, fondamentalement, exécute tous les sous-projets de la droite à partir du web pour le domaine de la mise en pension et échoue si l'une (de Jasmin ou de spring mvc ou SpringServices tests) échouent.
Et la construction d'une guerre pour le côté serveur de déploiement de trop.
Cela a été pré-rapporteur, alors que ce serait une belle addition. Bien que l'interface plugin maven ressemble à l'outil pour le travail maintenant.
HTH
Pankaj