# Review Apps

Certains outils d'intégration continue combinés avec des plateformes de déploiement *(Cf.* [*GitLab Review Apps*](/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/review-apps.md#gitlab-review-apps) *&* [*Heroku Review Apps*](/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/review-apps.md#heroku-review-apps)*)* permettent de **créer dynamiquement des environnements de déploiement**.

Cela permet d'adopter l'approche de développement décrite ci-dessous.

Supposons que l'équipe de développement travaille sur deux fonctionnalités en parallèle **payin** *(pour le crowdfunding)* et **cashout** *(pour la récupération de la cagnotte)*.

1. Le code de production est sur la branche `master`.<br>
2. L'équipe crée deux branches `payin` et `cashout` à partir de la branche `master`.<br>
3. A chaque changement *(ou commit)* sur les branches `payin` ou `cashout` *(et si tout se passe bien)*, le produit **est déployé automatiquement sur un environnement créé dynamiquement et accessible depuis une URL** *(ou plusieurs)* créée dynamiquement ; par exemple, **`payin.review.wishtack.com`** et **`cashout.review.wishtack.com`**.<br>
4. Les parties prenantes autorisées peuvent **valider 👍*****(ou rejeter 👎)*** le changement et **par simple clic**, le code est **"merged" dans la branche `master`**.<br>
5. La branche `master` passe automatiquement par les process de "**build**" et "**test**" de l'[Intégration Continue](/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/integration-continue.md).\
   Dans le cas du [Déploiement Continu](/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/deploiement-continu.md) : le produit est **automatiquement déployé en production**.\
   Dans le cas de la [Livraison Continue](/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/livraison-continue.md) : le produit est **automatiquement déployé sur un environnement de validation** *(staging)* et prêt à être déployé en production par **simple clic**.

![Review App Workflow](/files/-LHJE122XQ2L-FOZN6JX)

{% hint style="success" %}
De la même façon qu'il est idéal de définir les User Stories les plus granulaires possibles, il est recommandé de **réduire au minimum la durée de vie d'une branche et la quantité de changements**.

Il est intéressant de ne pas dépasser une **durée de vie d'un jour** pour chaque branche. Quitte à en recréer une nouvelle avec le même nom pour apporter de nouveaux changements.

Cela permet d'éviter le ***git spaghetti*** et les **conflits de merge**.
{% endhint %}

## Exemple

### Pipeline de build, deploy et test de l'Intégration Continue

![GitLab Pipeline](/files/-LHOHEkdjBRekIa3WYFz)

### Validation d'une branche *(merge)*

![GitLab Branch Merge](/files/-LHOGsv6N5LtwoH9a_lv)

### Déploiement manuel *(promote)*

![Heroku Promote](/files/-LHOHSif_y3gjp_H537R)

### Rollback

![Activity History](/files/-LHOHdKj_f8fA49v6ODS)

![Heroku Rollback Confirmation](/files/-LHOHmSUCm08Ihg4z_It)

## Heroku Review Apps

{% embed url="<https://devcenter.heroku.com/articles/github-integration-review-apps>" %}
Heroku Review Apps
{% endembed %}

## GitLab Review Apps

{% embed url="<https://docs.gitlab.com/ee/ci/review_apps/>" %}
GitLab Review Apps
{% endembed %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://guide-agile.wishtack.io/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/review-apps.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
