Parmi les tâches d'un CTO qui ne sont pas du développement pur, la bonne gestion des différents environnements me parait être l'une des plus importantes. Retour sur les bases de la gestion des environnements
De manière générale (laissons de côté le web pour le moment), un environnement est un ensemble de matériels et de logiciels utilisés par l'application en question.
On cherche à isoler les environnements les uns des autres tant que possible, pour plusieurs raisons :
Typiquement dans un projet standard nous pourrions avoir :
N environnements de développement : chaque développeur dans le projet va avoir son propre environnement. Tout ce qu'il développe n'impacte dans un premier temps que lui. Un même développeur peut même avoir plusieurs environnements de développement (par exemple s'il travaille depuis un desktop au travail, et depuis un laptop chez lui). Dans un projet web, le développeur a très souvent en local : un serveur web , un SGBD avec une base, et son code.
1 environnement de production : c'est l'environnement utilisé par les clients. Il doit tant que possible être fonctionnel (non buggué) et disponible sur les plages horaires prévues, en fonction des SLA.
1 environnement de pré-production (ou de qualification) : c'est un environnement intermédiaire utilisé après le développement, et avant la mise en production. Tout l'intérêt de cet environnement réside dans le fait qu'il soit identique à celui de la production (en tout cas qu'il s'en rapproche le plus possible), et qu'il va ainsi nous permettre d'obtenir des résultats de tests pertinents. J'insiste sur le fait que ce n'est pas parce que le code fonctionne en environnement de dév, qu'il fonctionnera en production. Car entre ces deux environnements, quasiment tout est différent :
Le serveur HTTP : en dév, il est probable que votre serveur soit un petit outil à exécuter localement, mais qui se comporte pas exactement de la même manière qu'un serveur dédié à la production comme Nginx ou Gunicorn. C'est le cas quand vous lancez la commande python manage.py runserver localhost:8001
sur Django par exemple.
Le contenu de la base de données : à moins que vous ayez fait un dump de votre base de prod vers votre environnement de dév avant d'effectuer vos tests (ce qui n'est pas conseillé pour la sécurité), il est évident que vous ne disposez pas des mêmes données par défaut !
Autres détails :
Si avec cette liste, vous n'êtes toujours pas convaincus de la nécessité absolue d'un environnement intermédiaire dans un projet web sérieux, j'abandonne !
Il existe aussi des environnements à but plus spécifique, comme par exemple :
Il y a beaucoup d'autres possibilités en fonction des besoins du projet en question, et vous n'êtes limités que par les ressources matérielles et le temps dont vos disposez.
Il n'y a pas qu'une réponse à cette question, mais voici une manière logique de travailler en développant seul un site web :
Rien qu'avec cette étape intermédiaire de la pré-production, on vient de limiter énormément les risques de mise en production ratée. Bien évidemment, ceci est condtionné par la qualité des tests associés, mais c'est un autre sujet :)
Voilà, vous avez eu un aperçu très théorique de la gestion des environnements au sein d'un projet. Dans un prochain article, nous verrons comment mettre tout ça en pratique sur Heroku.
A bientôt !