web-dev-qa-db-fra.com

Intégration continue et livraison continue avec git-flow

Nous effectuons une intégration et une livraison continues depuis un certain temps avec les validations de Subversion lorsque les pipelines se déclenchent. Récemment, nous avons commencé à utiliser git dans certains projets avec git-flow et nous essayons de décider laquelle des branches de git-flow devrions-nous utiliser pour déclencher l'intégration continue et les pipelines de livraison continue.

Voici deux approches:

1. Utilisez la branche develop

Problème: avec git-flow, nous sommes censés déployer la branche release (ou master) en production, nous devrons donc construire deux pipelines différents, un pour l'intégration continue (développement de la branche) et un pour la livraison continue (master de la branche). Cela pourrait introduire des bugs en production car la version en production ne sera pas la même que celle des autres environnements (intégration, test, staging).

2. Utilisez la branche principale :

Problème: De cette façon, nous n'aurions pas une intégration vraiment continue, car les modifications de ces branches ne sont pas poussées très fréquemment.

Quelle est la branche droite à utiliser dans les pipelines?

29
alejokf

Git-flow et intégration continue sont, par définition, incompatibles. Les branches sont un mécanisme pour retarder l'intégration: lorsque vous vous engagez sur une branche autre que master (ou trunk, si vous venez de Subversion), vous évitez une intégration continue. Faire une intégration continue est simple, mais pas facile.

13
xpmatteo

La vérité se situe entre les deux. Si vous souhaitez adopter git-flow dans un pipeline de CD strict, vous devez utiliser la version-branche pour votre CI:

  1. Pour chaque (lot de) commit (s) de branche de développement, laissez votre serveur CI créer automatiquement une branche de version et exécutez tous vos tests dessus.
  2. En cas d'échec, laissez-le signaler et/ou supprimez la branche, sinon fusionnez-la avec master.

L'idée de base vient de la diapositive de John Ferguson Smart sur CI/CD dans Java Maven projects (BDD in Action, Jenkins Definite Guide).

9
Arman

À mon avis, si vous souhaitez appliquer git-flow en livraison continue, vous devez avoir deux pipelines différents, comme vous l'avez dit dans votre première approche.

Je suggère cette approche:

1. Développer une branche

  • La branche de développement déclenchera la validation de la validation: dès qu'une fonctionnalité est ajoutée à la branche de développement (sur demande de fusion ou d'extraction), le CI créera, testera (Test unitaire et révision du code) et conditionnera la solution (avec un "-develop- vX "suffixe). Ainsi, l'équipe est capable de réagir rapidement en cas d'échec.
  • Une fois la validation validée terminée, la tâche est terminée (sinon, la modification est annulée et le développeur qui a validé la modification doit la corriger immédiatement). En parallèle, l'étape de test d'acceptation commence à déployer la version précédente dans l'environnement de développement pour exécuter les combinaisons de test d'acceptation (par exemple, les tests fonctionnels et de régression) sans bloquer le travail du développeur. Une fois terminé, le statut de la branche de développement est communiqué à l'équipe. Par conséquent, l'équipe est consciente de la stabilité de la solution pendant le Sprint actuel: si l'étape de test d'acceptation se termine avec succès, le produit est prêt à fusionner avec la branche Master (sinon, il sera corrigé).

2. Branche principale

  • Une fois le sprint terminé, la branche développeur stable (elle est stable) est fusionnée et étiquetée dans la branche maître. Ainsi, la branche principale déclenchera la construction de validation de tronc qui construira la solution, la testera et le package pour le déploiement (le package est maintenant stocké avec une version candidate ou un suffixe maître).
  • Si la construction de validation de jonction se termine avec succès (cela devrait fonctionner), l'étape de test d'acceptation déploiera et validera les tests d'acceptation par rapport à un environnement d'intégration. Et en cas de succès, la nouvelle version est prête pour la production. Sinon, en cas d'erreur lors de la validation de la construction ou de l'étape du test d'acceptation, la fusion est annulée.
7
sergi