From 8ddd800da62d335559f32b86a8ca9c941265e7b1 Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Fri, 16 Dec 2022 22:46:16 +0100 Subject: [PATCH] Describe a simple CI pipeline --- chapters/continuous-integration.tex | 48 +++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/chapters/continuous-integration.tex b/chapters/continuous-integration.tex index 7056f3a..52b4bee 100755 --- a/chapters/continuous-integration.tex +++ b/chapters/continuous-integration.tex @@ -4,7 +4,51 @@ New code should never go live without first being audited for correctness and security. \cite{django_for_startup_founders} \end{quote} -https://circleci.com/pricing/ +Les processus d'intégration continue et de déploiement continu (respectivement, CI/CD - Continuous Integration / Continuous Deployment) permettent d'automatiser les étapes de vérifications, autrement réalisées par un être humain, voire manuellement, par des automates réagissant à des évènements particuliers - typiquement, une nouvelle version du code, un nouveau \textit{commit}, la mise à jour d'un des composants, \ldots -github actions +\section{Intégration continue} +L'intégration continue consiste à pousser la pyramide des tests jusqu'à son paroxysme, toujours en laissant un automatate jouer son rôle de bouée de sauvetage. + +Chaque pipeline peut être modélisé selon plusieurs étapes, en parallèle ou en séquence, appelant chacune un ensemble de règles, d'outils, et proposant deux états de sortie possibles: soit c'est OK, soit pas. +Au sens booléen des termes. + +\textit{A priori}, une sortie négative impliquera une \textit{failure} de l'ensemble du pipeline, bien qu'il soit possible de définir des étapes facultatives (pouvant être exécutées sur certains environnements uniquement), etc. + +Un pipeline simpliste, mais déjà complet ressemble à ceci: + +\begin{minted}{yaml} +matrix: + PYTHON_VERSION: + - latest + - 3.9 + - 3.8 + +pipeline: + static_checks: + image: acidrain/python-poetry:${PYTHON_VERSION} + commands: + - python -V + - poetry -V + - poetry install + - poetry run flake8 src/ + - poetry run pylint src/ + - poetry run bandit --silent -r src/ + - poetry run mypy . + + unit_tests: + image: acidrain/python-poetry:${PYTHON_VERSION} + commands: + - python -V + - poetry -V + - poetry install + - poetry run pytest --cov-report term-missing tests/unit/ + +\end{minted} + + + +\section{Déploiement continu} + +Le déploiement continu est une extension de l'intégration continue, qui est jusqu'au-boutiste à s'occuper lui-même de mettre à disposition une nouvelle version, sous réserve qu'elle ait passé les différentes étapes du pipeline. +C'est ainsi qu'Amazon ou certaines grandes \footnote{ie. envahissantes} entreprises publient jusqu'à plusieurs miliers de nouvelles fonctionnalités \textbf{par jour}.