Je trouve que chaque fois que je veux lancer un projet passé, il faudra beaucoup de temps avant que je puisse le trouver et avant d'avoir tout configuré à nouveau pour qu'il puisse fonctionner.
Par exemple, j'ai des projets python que j'ai créés sous Linux, et cela dépend de packages logiciels qui sont facilement installés sous Linux, mais je n'ai plus la machine virtuelle Linux que j'utilisais. Et certains de mes autres projets dépendent d'autres variables comme la configuration du serveur Web, les variables PATH, sdk, IDE, la version du système d'exploitation, le périphérique, etc.
Quelqu'un at-il un moyen efficace de gérer ce problème? Pour l'instant, je ne me préoccupe que de garder le code source sauvegardé, mais il est difficile de rétablir l'environnement de développement opérationnel et il est également difficile de maintenir l'environnement de développement opérationnel également .
la source
Réponses:
Ce que j'ai fait dans le passé, c'est convertir la machine de développement physique en machine virtuelle ou, si c'est déjà une machine virtuelle, la conserver pour une utilisation future. Ce n'est pas aussi efficace que je le souhaiterais pour l'utilisation de l'espace disque, mais l'espace est bon marché. En outre, ce processus est beaucoup moins coûteux en temps que d'essayer de reconfigurer un environnement à l'avenir si le besoin s'en faisait sentir.
la source
Ma méthodologie préférée actuelle est de maintenir un script qui installe TOUTES les dépendances nécessaires pour un projet, télécharge la source et connecte tout. Certains scripts ont deux modes - l'un pour la production, qui est généralement à peu près un sous-ensemble de l'autre mode: le développement.
Certains environnements ne prennent que 5 minutes à installer avec un script - dans ce cas, je garde une machine virtuelle locale avec une nouvelle installation du système d'exploitation cible sur lequel je déploie le script de projet lorsque j'arrive au travail le matin - puis je fais tout le codage travaux connexes sur cette instance de machine virtuelle. Avant de partir, je pousse toutes les modifications via git vers ma machine physique ou notre référentiel central, et je termine la machine virtuelle.
Si l'environnement prend plus de temps à configurer (installations longues, fichiers volumineux à télécharger, quelque chose comme ça), je fais la procédure ci-dessus une fois par semaine.
L'avantage est qu'il est très facile à déployer sur une nouvelle machine et / ou un serveur de production, tout est documenté dans le script et le script est vérifié très souvent.
la source
Le concept que vous décrivez est la gestion de la configuration. C'est comme cela sonne, un moyen d'identifier, d'enregistrer, de version / suivi et de signaler un environnement. Il s'agit souvent d'une tâche étroitement liée au contrôle de version et à la gestion de build, mais elle est suffisamment distincte et nécessite souvent une stratégie distincte, même si elle utilise certains des mêmes concepts et les mêmes mécanismes de traitement et de stockage.
La gestion de la configuration permet non seulement de maintenir un environnement de travail sous contrôle, mais également d'établir un enregistrement des différents environnements de travail dans lesquels le logiciel est utilisé (développement comme mentionné, plus test / AQ, déploiement auprès des clients de routine, déploiement auprès des clients qui nécessitent une attention particulière ou une configuration spéciale ou créer des propriétés, etc.).
Comme je l'ai dit, il s'agit souvent d'une tâche qui coïncide avec le contrôle de la version source, et souvent les données de gestion de la configuration résident à côté de la source dans la documentation et le référentiel source. Ce n'est pas obligatoire, mais c'est souvent pour des raisons de commodité.
L'automatisation de certains aspects de la gestion de la configuration s'est largement améliorée ces dernières années. Certaines réponses et commentaires suggèrent des scripts comme moyen de promouvoir la gestion de la configuration, et les scripts sont une bonne réponse pour aider à obtenir des résultats reproductibles, mais souvent les scripts fabriqués à la main en eux-mêmes sont incohérents et incomplets. Une telle amélioration a été apportée par l'approvisionnement automatique. Des systèmes comme la marionnette ou le chefaider à spécifier des composants logiciels et des systèmes pour un utilisateur ou une machine particulier ou pour un profil de tâche particulier et fournir des «recettes» qui permettent une approche pratique de la configuration d'une machine ou d'un environnement complet. Il prend essentiellement le concept d'un référentiel de distribution de logiciels et l'étend et le généralise en fournissant non seulement les packages de logiciels nécessaires pour un système, mais également des profils de configuration particuliers à chaque package afin qu'il soit prêt à être utilisé de la manière qui convient à votre situation.
Vagrant prend cela dans une direction légèrement différente et fournit un moyen de faire rapidement tourner les définitions de machines virtuelles, de sorte qu'une machine virtuelle peut avoir son logiciel et son matériel virtuels provisionnés automatiquement, et peut s'avérer un moyen pratique de reproduire une représentation particulière d'un matériel environnement utilisé par l'utilisateur de votre logiciel.
Chaque système (et variantes) prend un peu de temps à mettre en place, mais a une valeur claire si vous trouvez que la tâche de rechargement et de reconfiguration est une tâche courante.
la source
Docker serait une bonne option. Vous pouvez utiliser un dockerfile pour agir comme un manifeste pour la machine virtuelle que vous souhaitez. Vous n'avez pas besoin de stocker d'image, il téléchargera celle requise. En outre, il peut utiliser vos propres images, vous pouvez donc créer votre propre image de base, puis ajouter les composants requis par l'environnement.
En utilisant Docker, cela peut également améliorer d'autres parties de votre flux de travail:
Donc, les idées ici sur l'utilisation d'une machine virtuelle ne sont que partiellement correctes, je sais que les disques durs deviennent de plus en plus gros, mais ce n'est pas une raison pour utiliser tout l'espace dont vous disposez. En outre, lorsqu'un environnement de machine virtuelle a besoin de plus d'espace disque dur en interne, cela peut être un peu délicat et vous devrez probablement en reconstruire un. Bien que la taille du fichier ne soit pas un problème, la vitesse Internet reste le goulot d'étranglement lorsque vous devez envoyer plus de 5 Go sur une connexion DSL normale.
la source
La plupart des systèmes (langues, runtimes ou systèmes d'exploitation) ont une manière standardisée d'installer des logiciels et des configurations, essayez donc de les utiliser. Tel que:
Faites ensuite des instructions d'installation expliquant exactement ce qui doit être installé / quelles étapes sont nécessaires:
Ensuite, vous devriez pouvoir recréer l'environnement, et d' autres devraient également pouvoir le faire (ce qui peut être important s'il ne s'agit pas d'un projet solo).
Vous devrez peut-être stocker les packages d'installation nécessaires quelque part, ou vous pouvez simplement inclure des instructions de téléchargement (à moins que le système n'en garde la trace, comme apt-get ou Maven). Cela dépend de la confiance que vous accordez aux fournisseurs de paquets - il n'est probablement pas nécessaire de stocker les paquets Debian de base, mais avec un petit projet de logiciel libre, ce pourrait être une bonne idée.
La solution VM fonctionnera également, et est probablement moins de travail à court terme (il suffit de conserver la VM). Cependant, je pense que cette solution offre plus de flexibilité, par exemple lors d'un changement d'environnement.
la source