Automatisation et intégration
Déploiement sur le Cloud - ESLSCA
Maxime Jumelle
www.blent.ai
Plan
1. Versioning sousgit
2. L’approche CI/CD
Continuous Integration (CI) Tests unitaires
Tests d’intégration
3. Continuous Delivery (CD)
1
Versioning sous git
Le versioning
Lorsque plusieurs développeurs travaillent sur un même projet, il est important que chacun ait une versionà jourdu programme. Une approche très ancienne consistait à s’envoyer les fichiers soit par transfert FTP, soit du des réseaux intranet ...
Heureusement, ce temps est révolu, etgit(dont l’ancêtre est souvent considéré comme étantsvn) est aujourd’hui unoutil indispensable pour toute collaboration en équipe.
2
Création du dépôt git
La création d’un dépôtlocaldoit être effectuée afin la commande init.
git i n i t git add .
Aprèsgit add, on peut ajouter n’importe quel fichier ou dossier. Le point indique le répertoire courant et, par défaut et sans fichier .gitignore, traque tous les fichiers et dossiers de manière récursive.
Création du dépôt git
Pour mettre à jour le dépôtlocal, uncommitest nécessaire.
git c o m m i t - am " F i r s t p u s h "
git p u s h o r i g i n m a s t e r
La commandepushpermet ensuite de pousser le dépôt local vers le dépôtdistantsur la branchemaster.
4
Une histoire de branches
Un des points forts degitest l’utilisation des branches. Une branche est utilisée pour développer des fonctionnalités isolées, comme par exemple une élaboration d’une nouvelle version.
• Par défaut, la branche master est créée et représente souvent la branche « de référence ».
• D’autres branches peuvent alors être créées (dev pour version en développement) en fonction de la taille du projet et du nombre de fonctionnalités disponibles.
git c h e c k o u t - b dev
git c o m m i t - am " U p d a t e d dev v e r s i o n "
git p u s h o r i g i n dev
Une histoire de branches
6
Quoi utiliser ?
L’approche CI/CD
La route CI/CD
Pipelines et jobs
9
Intégration Continue
L’Intégration Continue (ouContinuous Integration) est une pratique qui consiste à tester et implémenter de nouvelles fonctionnalités dans un code source, le plus souvent en collaboration avec d’autres développeurs.
Dans de nombreuses entreprises de différentes tailles (de start-ups jusqu’aux multinationales),l’approche CI/CD est incontournable. En effet, de nombreux projets industrialisés s’exécutent de manière
entièrement automatisé, et l’approche CI/CD permet de mettre en harmonie toutes les règles qui interviennent lors de l’automatisation.
Pourquoi la CI ?
La CI présente de nombreux avantages dans les environnements de développement (et, dans une autre mesure, dans les environnements de production) :
• cela permet d’éviter l’introduction de conflits entre différentes sources et l’apparition de bugs ;
• réparer les erreurs commises par un autre développeur ;
• s’assurer du bon fonctionnement du programme sur plusieurs architectures cibles (systèmes d’exploitation, navigateur web, ...).
11
Le cycle CI
Configuration de l’environnement CI
Tout d’abord, il estfortement conseilléde créer unenvironnement virtueldans chaque projet : cela permet de ne garder que les dépendances nécessaires au projet, quitte à tout réinstaller en cas de problèmes.
v i r t u a l e n v v e n v
s o u r c e v en v / bin / a c t i v a t e
Pour cet exemple, nous aurons besoin de scikit-learn pour l’algorithme de Machine Learning, ainsi que de :
• flake8pour lelinting, qui examine en particulier les défauts de syntaxe et le respect à la norme de codage PEP8 ;
• pytestpour l’exécution des tests unitaires ;
• pytest-cov pour la couverture de code.
13
Configuration de l’environnement CI
L’installation des dépendances est réalisée parpip, donc la commande freeze permet de renseigner tous les packages (avec les versions correspondantes) dupiplocal utilisé (en particulier, celui de l’environnement virtuel).
pip i n s t a l l s k l e a r n f l a k e 8 p y t e s t pytest - cov pip f r e e z e > r e q u i r e m e n t s . txt
Linting
L’outilflake8 s’assure du bon respect des normes de codage PEP8, et donc de la reproducabilité et maintenabilité du code.
f l a k e 8 - - e x c l u d e = v e n v * - - s t a t i s t i c s
15
. / t e s t _ c l a s s i f i e r . py : 3 : 1 : E302 e x p e c t e d 2 b l a n k l i n e s , f o u n d 1 . / t e s t _ c l a s s i f i e r . py : 6 : 7 : E114 i n d e n t a t i o n i s n o t a
m u l t i p l e o f f o u r ( comment )
. / t e s t _ c l a s s i f i e r . py : 7 : 7 : E111 i n d e n t a t i o n i s n o t a m u l t i p l e o f f o u r
. / t e s t _ c l a s s i f i e r . py : 8 : 7 : E111 i n d e n t a t i o n i s n o t a m u l t i p l e o f f o u r
. / t e s t _ c l a s s i f i e r . py : 9 : 7 : E111 i n d e n t a t i o n i s n o t a m u l t i p l e o f f o u r
. / t e s t _ c l a s s i f i e r . py : 1 1 : 5 : E301 e x p e c t e d 1 b l a n k l i n e , f o u n d 0 . / t e s t _ c l a s s i f i e r . py : 1 2 : 7 : E111 i n d e n t a t i o n i s n o t a
m u l t i p l e o f f o u r
4 E111 i n d e n t a t i o n i s n o t a m u l t i p l e o f f o u r 1 E114 i n d e n t a t i o n i s n o t a m u l t i p l e o f f o u r ( comment )
1 E301 e x p e c t e d 1 b l a n k l i n e , f o u n d 0 1 E302 e x p e c t e d 2 b l a n k l i n e s , f o u n d 1
L’intérêt depytestest qu’il permet d’associer directement les tests unitaires pour les fichiers dont on souhaite exécuter les tests et vérifier la couverture du code (si l’organisation et le nommage des fichiers est assez intuitif).
p y t e s t - v - - cov = c l a s s i f i e r
La couverture du code vise à savoir à quel point les tests atteignent assez de fonctionnalités pour éviter des bugs issus de code que l’on aurait pu oublier de prendre en compte.
17
c a c h e d i r : . p y t e s t _ c a c h e r o o t d i r : /home/ maxime / . . . / p l u g i n s : cov−2 . 7 . 1
c o l l e c t e d 2 i t e m s
t e s t _ c l a s s i f i e r . py : : T e s t C l a s s i f i e r : : t e s t _ p r e d i c t i o n PASSED [ 50%]
t e s t _ c l a s s i f i e r . py : : T e s t C l a s s i f i e r : : t e s t _ s c o r e PASSED [ 1 0 0 % ]
−−c o v e r a g e : p l a t f o r m l i n u x , p y t h o n 3 . 5 . 2−f i n a l−0−−
Name S t m t s M i s s C o v e r
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
c l a s s i f i e r . py 15 0 100%
TP
Dans ce TP, nous allons ré-utiliser le code existant, mais cette fois-ci, nous allons rajouter de nouveaux tests.
• Tout d’abord, on vérifiera que certains fichiers sont présents dans le dépôt git.
• Ensuite, on testera les fonctionnalités suivantes :
• La bonne consistance des prédictions du modèle ;
• Un score minimal à atteindre sur un ensemble de test supérieur à un estimateur naïf ;
• Un score minimal à atteindre pour éviter une régression (fixé à 80%
de la métrique 0/1).
19
TP
Continuous Delivery (CD)
Heroku comme SaaS
Créer un compte sur Heroku et installer le clientheroku.
MacOS
b r e w i n s t a l l h e r o k u / b r e w / h e r o k u
Ubuntu 16+
s u d o s n a p i n s t a l l h e r o k u - - c l a s s i c
Windows : installer l’exécutable (32 ou 64 bits).
Heroku comme SaaS
Authentifier la connexion.
h e r o k u l o g i n
h e r o k u : P r e s s any k e y t o open up t h e b r o w s e r t o l o g i n o r q t o e x i t
Warning : I f b r o w s e r d o e s n o t open , v i s i t h t t p s : / / c l i−a u t h . h e r o k u . com/ a u t h / b r o w s e r /∗∗∗
h e r o k u : W a i t i n g f o r l o g i n . . . L o g g i n g i n . . . done
Logged i n a s me@example . com
22
Variables d’environnements CD
Lors du CD, il est souvent nécessaire de déployer le projet sur un serveur distant : une authentification (SSH, LDAP, SAML, ...) est requise. Il ne faut jamais placer d’informations sensibles dans le dépôt ! Il est préférable de configurer desvariables d’environementCD.
Job de déploiement
Le job de déploiement a pour objectif de pousser le projet vers le serveur distant. Notons que l’exécution du projetest à la charge du serveur distant, l’opération CI/CD de GitLab s’arrêtant uniquement à la mise à jour du code source du serveur distant.
j o b _ d e p l o y : s t a g e : d e p l o y s c r i p t :
- dpl - - p r o v i d e r = h e r o k u - - app = eslsca - bigdata - t e s t - - api - key = $ H E R O K U _ K E Y o n l y :
- m a s t e r
24
TP
La dernière partie du TP concerne la mise en place du CD sur un serveur distant géré par Heroku. En particulier, les tâches à réaliser sont
• Configurer le Runner GitLab et les variables d’environnement.
• Définir lejob de déploiement.
• Mettre à jour le dépôt pour effectuer une première exécution de la pipeline.
• Ajouter une route/predict avec la méthodePOSTdont l’objectif est de prédire la probabilité l’issue d’une observation à partir d’un fichier JSON.
TP
26