Un moyen efficace de conserver les projets antérieurs dans leur environnement de développement professionnel?

19

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 .

Korey Hinton
la source
6
La NSA est ma sauvegarde
Steffe

Réponses:

17

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.

G_P
la source
2
Je pense que vous devez également conserver des copies de tous les logiciels / versions et installer votre projet à partir d'un script. C'est un grand pas en avant pour pouvoir reproduire rapidement l'installation à chaque fois .
tzerb
C'est ce que j'ai fait dans le passé ... était idéal pour prendre en charge différents environnements clients, etc. Si vous utilisez une machine virtuelle de base, chaque machine virtuelle successive peut simplement être un fichier diff, ce qui économisera de l'espace disque si c'est un problème ... Mais je pense personnellement que les disques durs sont bon marché. :-)
davewasthere
Avec l'amélioration de la prise en charge de LXC, il est sûr de l'utiliser à la place des machines virtuelles lorsque vous traitez avec des environnements Linux. C'est beaucoup moins exigeant en ressources et beaucoup plus rapide. ATM le meilleur outil pour les gérer est docker
karka91
11

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.

Max
la source
4

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.

JustinC
la source
Pourriez-vous développer la stratégie que vous mentionnez dans votre déclaration "mais elle est suffisamment distincte et nécessite souvent une stratégie distincte"? J'allais utiliser Vagrant et stocker une configuration de machine virtuelle dans le référentiel de mon code source, et je me demande à quel moment cela devrait être traité différemment?
CL22
3

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:

  • L'environnement créé peut être placé sur le même CVS que votre projet, ce qui vous donne un environnement versionné (soigné!)
  • Le docker peut être utilisé pour approvisionner l'environnement en direct, réduisant ainsi les maux de tête liés au lancement de vos projets en production.
  • Si d'autres commencent à travailler avec vous, tout ce dont ils ont besoin est le dockerfile pour charger cette énorme configuration d'environnement.

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.

Salketer
la source
2

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:

  • Maven ou Gradle pour Java
  • CPAN pour Perl
  • tr / min pour RedHat / Fedora
  • dpkg / apt-get pour Linux
  • Packages MSI pour Windows

Faites ensuite des instructions d'installation expliquant exactement ce qui doit être installé / quelles étapes sont nécessaires:

  • Fournir de brèves instructions sur ce que vous supposez être installé (OS de base, runtime de base tel que Java / Perl / Python ...)
  • Écrire un court script qui effectue les installations requises (idéalement juste une seule invocation d'un outil comme Maven)
  • Testez cela sur une nouvelle installation (comme sur une machine virtuelle)

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.

sleske
la source