web-dev-qa-db-fra.com

Git, Maven et Jenkins - Versioning, Dev et Libération construisent le flux de travail

Quelle est la manière préférée de faire ce qui suit avec Git, Maven et Jenkins:

Je développe une demande que j'aimerais maintenir des succursales "dev" et "libérer". Je voudrais que Jenkins construisait les deux. Cela pourrait être de sorte que les artefacts de libération auraient des versions telles que 1.5.2 et que les constructions de développement seraient simplement 0,0.1-instantanés. Je voudrais ne pas avoir à avoir 2 fichiers POM.XML différents.

J'ai regardé dans des profils, mais ils ne semblent pas être capables de changer les versions d'artefact. Une façon dont j'ai examiné pourrait être d'ajouter un "qualificatif" aux bâtiments de test. Bien sûr, je pouvais juste renommer le fichier, car le véritable artefact-Information à ce sujet n'est pas important, car l'application est une solution autonome.

Quel serait le moyen préféré de faire cela? Ou comment feriez-vous cela?

12
varesa

J'imagine qu'il devrait y avoir une relation inhérente entre ces branches qui devraient résoudre le problème des numéros de version.

Libération

J'envisageais que vous puissiez faire quelque chose comme fusionner le code prêt à la production de la succursale DEV à la branche de sortie, puis effectuez une version maven (via Jenkins ou manuellement). Cela roule automatiquement les numéros de version à la prochaine version. Donc, vous fusionnez le code 1.4.7-Snapshot sur cette branche, effectuez la version 1.4.7 de la version 1.4.7 et Maven roule automatiquement votre copie de travail sur 1.4.8-Snapshot.

Mise à jour de base (facultatif)

Si vous n'utilisez pas déjà votre tronc (ou une branche de base, etc.) comme lieu de votre communiqués, vous devez mettre à jour le coffre dès que vous remplissez une version. Cela signifie que vos numéros de version sont également mis à jour. Cette étape pourrait être discutée si vous considérez simplement que la branche de sortie est la base.

Jusqu'à fusionner de la branche de référence à destination

Il est essentiel que votre branche de développement reste à jour avec le code de production réel. Vous devez fusionner le code de la ligne de base (ou la branche de version, en fonction de la mise en œuvre) jusqu'à votre succursale de développement. Ceci est important dans votre cas car cela signifie que les modifications du POM survenues lors du processus de libération, qui ont modifié la version en 1.4.8-Snapshot, sont apportées à cette branche.


Basé sur la lecture que j'ai faite (ainsi que des processus avec mon organisation), cela semble être une assez bonne utilisation standard et efficace des communiqués et des instantanés maven, et plutôt que de maintenir des numéros de version complètement déconnectés sur différentes branches, il est facile de dire que toute construction 1.4.7-Snapshot était en fait un prédécesseur immédiat de la version 1.4.7. Ils sont liés. J'irais si loin de dire si vous ne fusionnez pas entre ces branches, vous faites à la fois SCM et Maven Versing Version, et vous vous mettez en danger de développer contre Code qui ne correspond pas à la production, réintroduit des bugs à la production, etc.

3
RonU

Repenser votre approche.

Il est très courant d'utiliser E.G. 1.4.2 Pour une version de version, puis 1.4.3-Snapshot pour le développement à l'autre.

Lorsque vous devez Maintenir version 1.4.2 puis Branchez-le de la commission qui a noué votre artefact 1.4.2.

Ensuite, vous dites à Jenkins l'emplacement de votre référentiel et le nom de la succursale, ce qui donne un jeu de fichiers vérifié, puis vous dites à Jenkins d'utiliser Maven sur votre projet pour la construire.

Remarque: J'ai constaté qu'il est très bénéfique d'utiliser un seul pom.xml pour construire l'artefact réel et un autre pom.xml pour créer les bits réels pour aller au client.

1
user1249