# Review Apps

Certains outils d'intégration continue combinés avec des plateformes de déploiement _(Cf._ [_GitLab Review Apps_](#gitlab-review-apps) _&_ [_Heroku Review Apps_](#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`.\

2. L'équipe crée deux branches `payin` et `cashout` à partir de la branche `master`.\

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`**.\

4. Les parties prenantes autorisées peuvent **valider 👍**_**(ou rejeter 👎)**_ le changement et **par simple clic**, le code est **"merged" dans la branche `master`**.\

5. La branche `master` passe automatiquement par les process de "**build**" et "**test**" de l'[Intégration Continue](integration-continue).\
   Dans le cas du [Déploiement Continu](deploiement-continu) : le produit est **automatiquement déployé en production**.\
   Dans le cas de la [Livraison Continue](livraison-continue) : 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](https://1531174460-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHJE-ZfoGiJpMWRBOpi%2F-LHJE122XQ2L-FOZN6JX%2Fcontinuous-delivery-review-apps.svg?alt=media\&token=791027f9-7e47-468f-98ec-af3375f501ad)



{% 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](https://1531174460-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHOGdkWCNnyXfxUaNfP%2F-LHOHEkdjBRekIa3WYFz%2Fgitlab-pipeline.png?alt=media\&token=8f4db7da-0159-4002-9b4f-80b833ecb71a)

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

![GitLab Branch Merge](https://1531174460-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHOGdkWCNnyXfxUaNfP%2F-LHOGsv6N5LtwoH9a_lv%2Fgitlab-merge.png?alt=media\&token=f4e64287-b336-4ea2-9b31-aa751b12ad89)

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

![Heroku Promote](https://1531174460-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHOGdkWCNnyXfxUaNfP%2F-LHOHSif_y3gjp_H537R%2Fheroku-promote.png?alt=media\&token=5d63b8f1-350a-4390-a2d9-3fb9616046db)

### Rollback

![Activity History](https://1531174460-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHOGdkWCNnyXfxUaNfP%2F-LHOHdKj_f8fA49v6ODS%2Fheroku-activity-list.png?alt=media\&token=b7996479-c014-4fea-bfdb-8c529e4d2a95)

![Heroku Rollback Confirmation](https://1531174460-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHOGdkWCNnyXfxUaNfP%2F-LHOHmSUCm08Ihg4z_It%2Fheroku-rollback-confirmation.png?alt=media\&token=8943ebd4-2ed4-445c-8b15-bfe3c5a444ab)

## 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 %}
