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.