Mon équipe utilise actuellement un processus de branchement / déploiement assez simple qui ressemble à ceci:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
Chaque environnement a sa propre branche (nous utilisons git ) et sa propre build qui utilise cette branche. Lorsque nous voulons passer d'un environnement à un autre, par exemple, de DEV à QA, nous fusionnons la master
branche dans qa
et lançons une nouvelle version de QA (qui est ensuite automatiquement déployée dans l'environnement QA).
Nous envisageons de passer à un nouveau processus qui éliminerait la création d'une branche dédiée et la construction pour chaque environnement. Au lieu de cela, une version unique créerait un «package de déploiement» qui pourrait ensuite être déployé dans n'importe quel environnement. Nous imaginons qu'un workflow typique ressemblerait à ceci:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
La promotion d'un environnement à un autre ne serait plus gérée dans le contrôle de code source; au lieu de cela, nous prendrions simplement les binaires déjà construits (le "package de déploiement") et les déposerions dans le nouvel environnement.
Ce nouveau système nous permettrait de déployer n'importe quelle build dans n'importe quel environnement, ce qui présente plusieurs avantages. Par exemple, il est trivial de tester les correctifs de bogues PROD dans DEV et QA. Notre système actuel ne fournit pas un moyen facile de le faire sans faire reculer une branche, ce que nous aimerions évidemment éviter.
Le plus gros inconvénient de ce nouveau système est que nous n'avons plus de moyen automatique de suivre le code dans quel environnement. Si nous devons apporter une correction dans PROD, nous n'avons plus de branche dédiée synchronisée avec la base de code de production actuelle. Il en va de même pour l'AQ - si nous voulons pousser un changement rapide vers l'AQ sans accélérer les travaux en cours master
, nous n'avons plus de branche qui reflète l'état actuel de l'environnement d'AQ.
Comment pouvons-nous garder une trace du code dans chaque environnement?
Quelques options que nous envisageons:
- utiliser des balises git pour garder une trace de quel commit est dans quel environnement
- incorporer le commit git utilisé par la build dans chaque package de déploiement