Maven meilleures pratiques pour la gestion des versions différentes branches de développement, de test et de pré-presse]
J'ai quelques projets qui sont mis au point et diffusé sur les différentes branches, à savoir développement et libération. Le processus fonctionne assez bien, mais malheureusement, il a aussi quelques inconvénients et j'ai été me demandais si il y a un meilleur schéma de gestion des versions d'appliquer dans ma situation.
La principale évolution se produit sur une branche de développement (c'est à dire la Subversion tronc mais il n'a pas beaucoup d'importance) où l'équipe de développeurs de commettre leurs modifications. Après la construction et de l'emballage des artefacts, Jenkins déploie à repository maven et le développement de l'intégration de l'application serveur. C'est un DÉVELOPPEMENT INSTANTANÉ et est fondamentalement juste un fonction de direction contenant toutes les fonctionnalités développées sur une branche commune:
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>D.16-SNAPSHOT</version>
Quand une entreprise en particulier est fait et, à la demande de l'équipe QA, ce seul changement est alors fusion en vue de la libération de la branche (branches/release). Jenkins déploie l'artefact résultant de l'AQ serveur d'application:
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>R.16-SNAPSHOT</version>
Puis, il y a un rejet qui se passe via maven-release-plugin sur la branche de version de la version de logiciel (ce qui crée un entretien tag/branche rapide correction d'un bug). (R. 16-SNAPSHOT => R. 16)
Développement et la libération des branches sont actuellement en cours de version que D. 16-INSTANTANÉ et R. 16-INSTANTANÉ, respectivement. Ceci permet de séparer les artefacts dans le repository maven, mais crée un problème avec les différents maven mécanismes qui reposent sur la norme de gestion des versions de maven style. Et cela rompt avec OSGI versioning ainsi.
Maintenant, comment voulez-vous le nom et la version de maven artefacts dans un tel système? Est-il un meilleur moyen? Je pourrais peut-être faire quelques changements à maven structures autres que le simple changement de la gestion des versions et des schémas de nommage? Mais j'ai besoin de garder de développement et d'assurance qualité (libération) SCM branches distinctes.
Serait une maven classificateur de "développement" /"production" être une alternative raisonnable?
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>16-SNAPSHOT</version>
<classifier>D</classifier>
- Regardez stackoverflow.com/q/11413624/7581. Il semble que le meilleur moyen serait d'avoir les versions comme
16-R-SNAPSHOT
, et16-D-SNAPSHOT
. N'utilisez pas le classificateur.
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, une commune appellation d'extension pour une libération de l'artefact serait juste le nom de l'artefact, sans stuff, seule la version spécifiée. Une branche de développement aurait le même nom d'artefact, mais avec le snapshot.
Par exemple, prendre twitter4j. Le nom d'artefact de la version est
Instantané de leur(son) développement de la version
Qui est la convention de nommage presque tout le monde utilise et qui est reconnu par la plupart des outils. Par exemple, mon Nexus référentiel pouvez spécifier une politique d'ignorer les versions de développement, ce qui signifie qu'il ignore les objets contenant de l'INSTANTANÉ en leur nom.
EDIT:
Pour votre suivi question:
Bien, en fonction de votre version de l'outil, vous pouvez créer vos captures d'écran pour avoir le timestamp ou une autre identificateur unique. Cependant, je n'ai jamais entendu parler de certains de la ramification de la logique étant incorporé dans l'artefact nom juste pour le continu int serveur de les distinguer. À partir de l'artefact point de vue, c'est une libération, ou un CLICHÉ, je ne vois pas l'intérêt de l'incorporation de plus logique dans le nom de l'artefact, juste à cause de votre Hudson permet de yo de le faire. Pour être honnête, votre cycle de publication semble OK pour moi, mais il serait d'une amende de peaufinage de votre maven outils. Si vous ne pouvez pas vivre avec ce que je vous suggère d'utiliser un classifieur au lieu de s'appuyer sur le nom comme il est toujours plus facile de tordre le serveur d'intégration d'un grand nombre de plugins qui s'appuient sur la norme de la convention d'affectation de noms. En conclusion, je crois que vous êtes sur la bonne voie.
Je pense que vous pourriez tout simplement le processus par n'avoir que deux types d'autant que maven est concerné
Je serait en mesure de gérer votre ramification un peu différemment, Si vous regardez l'itératif/scrum modèle de développement de votre code doit être détachable/livrables à la fin d'une itération/sprint
La version plugin Maven prend en charge la ramification. Il semble fonctionner en supposant que la branche est créée pour soutenir la prochaine version de votre code.
Personnellement, je suis plus enclin à utiliser la les versions plug-in, et a été explicitement défini mon projet Maven de numéros de version.