CI (Continuous Integration) : Consiste a permettre a des développeurs qui travaillent sur un même projet / une même base de code d’intégrer de manière continue leurs avancées à cette base commune. Cela permet par ailleurs d’éviter le plus possible d’avoir a gérer des conflits de code, qui surviennent quand des modifications sont faites sur des lignes de code en commun. On automatise cela et on teste automatiquement.
CD (Continuous Deployment) : Consiste à mettre à jour le site ou l’application de manière la plus fluide possible et en continue. Cela passe souvent par une image de la version qui est construite, et sera versionnée sur un répo d’images. Ces images peuvent ensuite être récupérées par le serveur, reconstruire les conteneurs et les mettre en ligne. Il faudra donc un process pour créer les images (un dockerfile / docker-compose.yml par exemple) et un process qui permet au server de récuperer l’image en ligne.
Pipelines
Tout cela se fait via des pipelines. Les pipelines sont des “lignes d’exécution” qui sont lancées automatiquement, selon les conditions que l’on définit. Par exemple :
CI
Quand je merge ma branche sur la branche #main (le déclenchement de la pipeline se fait dès que l’on déploie sur la branche main)
Une machine va prendre la tâche
Elle récupère le code
Installe les dépendances
Teste le code si on le souhaite
CD
On peut définir des conditions
Si la phase CI échoue (par exemple si les tests ne sont pas validés)
Un message d’erreur s'affiche
Si la phase CI est un succès
Un nouveau pipeline démarre
On crée une image (docker, …) de la version validée
La version est versionnée sur un répo d’images
La pipeline indique au serveur de production qu’il y a une nouvelle image à récupérer
Le serveur télécharge l’image
Le serveur reconstruit le projet et la version est en ligne

Limiter les risques que le code écrit ne casse en production
Eviter les conflits de code
Fluidifier le travail pour éviter des problèmes avec des tâches manuelles répétitives
Avoir une plateforme régulièrement mise à jour
Automatiser la phase complexe de la mise en production et enlever cette charge aux développeurs
Fiabiliser les déploiements (ce n’est plus un humain, mais des pipelines qui tournent régulièrement et qui font la même chose tout le temps)
Fluidifier le travail et automatiser des tâches manuelles répétitives