Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Git
  3. Git en déploiement continu
Extrait - Git Maîtrisez la gestion de vos versions (concepts, utilisation et cas pratiques) (4e édition)
Extraits du livre
Git Maîtrisez la gestion de vos versions (concepts, utilisation et cas pratiques) (4e édition) Revenir à la page d'achat du livre

Git en déploiement continu

Objectifs du chapitre

L’objectif de ce chapitre est de servir d’introduction à la mise en place d’un déploiement continu automatisé uniquement en utilisant Git. Traiter de façon sérieuse et complète du déploiement continu nécessiterait un ouvrage entier, voire plus. C’est la raison pour laquelle ce chapitre se concentrera sur un exemple simple de mise en œuvre.

Ce chapitre expliquera étape par étape la mise en place d’un projet codé en Python/Django sur un hébergement en ligne. Les bases du développement sous Django seront expliquées tout au long du projet pour améliorer la compréhension du chapitre, le but de ces explications étant de comprendre le projet et les éléments nécessaires à la mise en place du déploiement continu.

Le projet d’exemple se trouve sur le dépôt GitHub accessible à l’URL suivante : https://github.com/SamuelDauzon/ci-git-only

Le projet

Un jeune étudiant, Élie, souhaite écrire des articles sur le développement informatique. Il aimerait créer un projet très simple lui permettant d’avoir une visibilité en ligne. Pour cela, il décide de créer un blog en Django. Étant plus développeur qu’administrateur système, Élie n’apprécie guère les déploiements et souhaite automatiser au maximum cette étape en utilisant Git.

Le projet de chapitre sera un projet volontairement simple, l’idée n’étant pas d’élaborer un projet complexe, mais de bien expliquer la mise en œuvre de déploiement continu automatisé avec Git. Le projet mis en œuvre est un blog personnel dont les fonctionnalités sont :

  • lecture d’articles,

  • système de pagination pour l’affichage de la liste des articles,

  • système WYSIWYG pour l’édition d’article,

  • système de catégories permettant de filtrer les articles.

Dans un premier temps, les fonctionnalités primordiales seront ajoutées au projet et déployées sur un hébergement en ligne. Ensuite, les fonctionnalités supplémentaires seront développées, versionnées sous Git et déployées de façon automatisée grâce à Git.

Présentation de Django

Django est un framework web libre développé en Python. Son slogan reflète parfaitement la philosophie du framework : "Le framework web pour les perfectionnistes sous pression" (The Web framework for perfectionists with deadlines). Le framework a été créé en 2003 pour le journal local de Lawrence (États-Unis - Kansas). Il a été publié sous la licence libre BSD en juillet 2005.

Django offre de nombreux outils permettant de faciliter, de fiabiliser et d’accélérer le développement de sites web. Il est possible de citer par exemple :

  • un système de migration automatisé basé sur les modèles compatibles multi-SGBD (PostgreSQL, SQLite, MySQL, etc.),

  • un système d’héritage de template avec possibilité de surcharge,

  • une interface d’administration facilement configurable et personnalisable,

  • plusieurs systèmes pour créer des formulaires basés sur les modèles extensibles permettant d’automatiser des opérations telles que l’affichage du formulaire HTML, la validation du formulaire, l’enregistrement des données en base de données, etc.

Contrairement à d’autres frameworks (comme Symfony ou d’autres), Django propose peu de génération de code automatique. En effet, les outils de génération automatique de code facilitent le développement de fonctionnalités, mais complexifient de façon importante la maintenance du projet. Pour cela, Django est conçu pour faciliter au maximum l’utilisation de comportements par défaut tout en permettant de personnaliser ce qui est nécessaire. Par exemple, lorsqu’il est nécessaire de modifier des données en base de données via un formulaire...

Développement de la version initiale

Cette partie va montrer étape par étape le développement du projet et son versionnement sous Git.

1. Installation

Pour utiliser Django, il faut installer Python. Ce chapitre a été écrit en utilisant la version 3.7 du langage. Pour Windows et Mac OS, il est possible de trouver les exécutables d’installation à l’adresse suivante : https://www.python.org/downloads/release/python-370/

Pour les distributions Linux basées sur Debian, il est possible d’utiliser la commande :

apt-get install python3.7 

Pour démarrer l’interpréteur Python 3.7 sous Mac OS et Linux, il faut utiliser la commande :

python3 

Sous Windows, il faut utiliser la commande suivante :

py 

Avant d’installer Django, il est préférable de créer un environnement virtuel Python. Ce type d’environnement permet d’isoler des bibliothèques Python. Ainsi, les bibliothèques installées dans un environnement virtuel n’auront aucun impact sur l’environnement Python du système ou sur un autre environnement virtuel.

Tout d’abord, il faut créer le dossier du projet :

mkdir simpleblog 

Ensuite, il faut créer l’environnement virtuel dans le dossier du projet :

cd simpleblog 

Pour Linux et Mac OS :

python3 -m venv venv_simpleblog 

Pour Windows :

py -m venv venv_simpleblog 

Ensuite, pour utiliser l’environnement virtuel, il est nécessaire de l’activer. Sous Mac OS et Linux, il faut utiliser la commande :

source venv_simpleblog/bin/activate 

Sous Windows, il faut utiliser la commande :

venv_simpleblog/Scripts/activate 

Une fois l’environnement virtuel activé, il est possible de lancer l’interpréteur de Python 3.7 de la même façon sous Linux, Mac OS et Windows avec la commande :...

Déploiement initial

Élie estime avoir développé assez de fonctionnalités pour déployer une première version. Pour le déploiement, il compte utiliser les services proposés par l’hébergeur Webfaction. Cet hébergeur permet d’installer des projets Django sans devoir s’occuper de maintenir les serveurs applicatifs (Apache, PostgreSQL, etc.).

Les prix des services de Webfaction sont les suivants :

images/S13E01.png

Élie sélectionne l’option 2, qui lui permet de profiter d’un système (virtuel) dédié. 

1. Configuration des identifiants SSH

Après avoir commandé son hébergement, il se connecte à l’interface d’administration pour récupérer ses identifiants SSH. Pour cela, il se connecte sur la page https://my.webfaction.com. Une fois connecté, il suit les menus Account puis Services. Cette page affiche les serveurs auxquels il a accès, l’adresse IP de chaque serveur est écrite sur une ligne. Parfois, il est nécessaire d’attendre plusieurs minutes pour accéder à la page et pour que le serveur soit correctement affiché.

Pour configurer son identifiant SSH, il suit les menus Account puis SSH/SFTP users. Un utilisateur doit se trouver dans la liste, sinon il est nécessaire d’en créer un nouveau. À partir de cette interface, il est possible de créer de nouveaux utilisateurs avec des mots de passe, ou alors de modifier le mot de passe de l’utilisateur principal du serveur. Pour simplifier son premier déploiement, Élie choisit d’utiliser l’utilisateur principal du serveur.

2. Création du site web Webfaction

Une fois connecté à l’interface d’administration de Webfaction, il faut cliquer sur le lien de menu Domains / websites...

Déploiement automatisé

Le déploiement initial étant terminé, Élie va pouvoir mettre en place son déploiement automatisé. Il a déjà commencé cela en configurant l’option receive.denyCurrentBranch de son dépôt qui lui permet de mettre à jour le répertoire de travail à chaque push. La prochaine étape sera le développement d’un hook Git effectuant les actions suivantes :

  • Installation des bibliothèques gérées par Pip.

  • Exécution des migrations.

  • Synchronisation des fichiers statiques.

  • Redémarrage d’Apache.

Lorsqu’Élie aura automatisé ces quatre actions-là, il sera en mesure de générer la grande majorité de ses futurs déploiements.

1. Développement du hook dans le dépôt

Pour démarrer cette nouvelle fonctionnalité, Élie doit tout d’abord se replacer sur la branche develop et ensuite créer une nouvelle branche en utilisant les commandes suivantes :

git co develop 
git checkout -b f-hook-production 

Élie compte versionner les hooks de son projet. Pour cela, il crée un dossier productionHooks à la racine de son projet local :

mkdir productionHooks 

Ces hooks seront uniquement réservés au serveur de production, d’où le nom du dossier productionHooks. Pour des hooks de type développement plus généraux, la façon la plus commune de les partager est de les mettre dans un dossier hooks à la racine du projet.

Pour coder le hook, il crée le fichier productionHooks/post-receive avec le contenu suivant :

$HOME/webapps/simpleblog/venv_simpleblog/bin/pip install -r  
$HOME/webapps/simpleblog/simpleblog/requirements.txt 
$HOME/webapps/simpleblog/venv_simpleblog/bin/python 
$HOME/webapps/simpleblog/simpleblog/manage.py...

Fonctionnalité : champ WYSIWYG pour l’article

Pour l’instant, pour publier un article en HTML, Élie devait créer son contenu HTML sur un éditeur de son choix, copier le code HTML et le coller dans son interface d’administration. Cela est peu pratique, il gagnerait en efficacité si un éditeur WYSIWYG (What You See Is What You Get ; en d’autres termes, l’éditeur affiche le résultat final du code HTML) était intégré dans l’administration.

1. Développement

Pour démarrer la fonctionnalité permettant d’éditer facilement le contenu d’un article, Élie crée tout d’abord la branche suivante en utilisant cette commande :

git checkout -b f-article-admin-editor 

Afin de développer efficacement cette fonctionnalité, Élie a trouvé une bibliothèque qui peut être intégrée à Django et qui utilise l’éditeur WYSIWYG summernote. Avant de choisir une bibliothèque, Élie vérifie certains points pour s’assurer que la solution offre une certaine pérennité :

  • Le projet est publié en licence MIT donc utilisable même pour des besoins commerciaux.

  • Le projet a 533 stars (équivalent à un « j’aime »), ce qui est rassurant pour un projet spécifique comme celui-ci.

  • Le projet a 48 contributeurs, ce qui est rassurant dans l’hypothèse du départ du propriétaire du dépôt.

  • Le dernier commit a eu lieu il y a trois semaines, ce qui indique que la bibliothèque a été maintenue récemment.

Fort de ces informations, Élie choisit d’intégrer cette bibliothèque à son projet. Le choix d’une bibliothèque ne doit pas être basé...