# Livraison Continue

En plus de tout ce que l'[Intégration Continue](/extreme-programming/integration-continue-livraison-continue-et-deploiement-continu/integration-continue.md) propose, la **Livraison Continue** ajoute une dernière étape au process permettant aux parties prenantes autorisées de **déployer** la dernière version **en production par simple clic** mais également de **rollback** à la version précédente en cas de problème.

En plus de cette fonctionnalité, la livraison continue **implique surtout une façon de concevoir et de développer** les produits respectant les règles suivantes :

* Le code de l'environnement d'intégration doit fonctionner en production.
* L'intégralité du déploiement doit se faire automatiquement *(y compris les migrations de base de données par exemple)*.
* Le déploiement ne doit pas causer d'interruption de service.
* Le rollback doit être automatisable et se faire en un clic *(Pensez à la backward et forward compatibility ! e.g. : Le schéma de base de données est compatible avec la version précédente et la nouvelle version)*.

![Continuous Delivery](https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%2F-LHD4wSD1i9v5yCa767m%2F-LHJ4GPYKCKTQ1Xvm1al%2F-LHJDAedZr6u4V5h5w3U%2Fcontinuous-delivery.png?alt=media\&token=70ff30f6-1a89-498c-a723-569d98ed7934)

## Blue-Green Deployment

Le Blue-Green Deployment consiste à mettre en place **deux environnements identiques** : **Green** et **Blue** avec un Router en amont permettant de conduire le traffic vers Green ou Blue.

En supposant que **la version actuelle du produit tourne sur l'environnement Blue**, le Router conduit le traffic vers l'environnement Blue.

Au déploiement d'une nouvelle version du produit :

1. La nouvelle version est déployée sur l'environnement Green.
2. L'équipe de développement peut tester la nouvelle application en allant sur un nom de domaine particulier ou en modifiant leur configuration DNS ou en mettant un flag dans un header par exemple...
3. Une fois que le déploiement est validé, **l'intégralité du traffic de production est conduit vers l'environnement Green** plutôt que l'environnement Blue.

Le traffic est donc toujours conduit vers un seul environnement.

En cas de rollback, il suffit de reconduire le traffic vers l'environnement précédent.

![Blue / Green Deployment by Cloud Foundry](/files/-LHO-eSoXWLnQZDSJfGo)

## Feature Toggles

Une fonctionnalité finalisée doit être **livrée en production** le plus rapidement possible même si **celle-ci ne doit pas encore être accessible aux utilisateurs**.

L'activation de la fonctionnalité pourra se faire par configuration via des **Feature Toggles**.

{% hint style="success" %}
Les Feature Toggles peuvent également servir à déployer progressivement une fonctionnalité sur une population d'utilisateurs *(a.k.a. Canary Deployment).*
{% endhint %}

{% hint style="warning" %}
Evitez les mécanisme de configuration de Feature Flags trop complexes !\
Le déploiement de configuration devient alors "error-prone" et plus délicat que le déploiement de code.
{% endhint %}

### Exemple

Sur Wishtack, nous avons implémenté la fonctionnalité permettant de **participer à une cagnotte** **avant** la fonctionnalité permettant **de récupérer la somme cumulée sur la cagnotte**.

Il n'était bien sûr pas envisageable d'activer la première fonctionnalité sans la deuxième pour le grand public par contre, chez Wishtack, nous pouvions déjà expérimenter la première fonctionnalité en production avec des vraies transactions.

![launchdarkly.com](/files/-LbgHymUhAwEJ8_2Qy0t)


---

# 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/livraison-continue.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.
