Nous voulons mettre en place un service d'intégration continue (CI) pour notre projet. Ce service CI doit contrôler tous les aspects de la vie du projet, y compris le déploiement.
Autrement dit, nous voulons qu'un agent CI à chaque itération prenne un système propre (en particulier Ubuntu Server), y déploie notre projet et exécute des tests.
Nous écririons probablement nous-mêmes le service CI, à partir de zéro, car notre écosystème est plutôt inhabituel. La question est: comment fournir efficacement un système d'ardoise propre pour chaque itération CI?
Le déploiement du projet installe quelques packages Debian, configure plusieurs sites nginx et installe également certains packages dans un gestionnaire de packages spécifique au langage d'implémentation (LuaRocks), à l'échelle du système. Rien de plus intrusif que ça (je crois). Il est donc plus important de pouvoir mettre en place une table rase rapidement (en moins d'une minute sur du matériel moderne, plus vite - mieux) que d'assurer une isolation et une propreté absolues.
Je vois deux façons de faire ce dont nous avons besoin:
- Soit mettre en place une prison quelconque (comme lxc, peut-être).
- Ou installez une machine virtuelle capable de créer des instantanés et utilisez-les.
Mais à ce stade, je n'ai pas suffisamment d'informations pour décider.
Que conseilleriez-vous? D'autres options? Des noms d'outils spécifiques?
Remarque: Le service CI serait exécuté à l'intérieur d'un invité Citrix XenServer. Les solutions payantes sont OK si les prix sont raisonnables. (Habituellement, ils ne sont pas raisonnables dans ce domaine.) Les solutions CI distantes ne sont pas correctes.
la source
Jetez un oeil à Jenkins . Il a des plugins qui vous permettent d'exécuter des builds sur des machines virtuelles dans VMWare ou VirtualBox ou dans le cloud Amazon / a Eucalyptus . Pour les machines virtuelles exécutées dans le cloud, vous pouvez spécifier un script d'initialisation dans lequel vous pouvez prendre des mesures telles que l'installation de packages.
la source
J'utiliserais l'infrastructure VM et créerais un modèle de base, ou utiliserais le cloud comme l'a suggéré @LarsKotthoff. Il est facile de les faire tourner rapidement et vous pouvez être sûr d'où vous êtes parti.
Cependant, vous aurez finalement besoin de quelque chose en dehors de cette machine virtuelle pour orchestrer ce qui se passe (configurer la machine et lancer le processus que vous souhaitez sur la machine). Je regarderais Jenkins pour sa capacité à capturer la sortie des scripts pour une inspection ultérieure.
Bien que Jenkins ait commencé en tant que serveur CI, de nombreuses organisations avec lesquelles je travaille maintenant l'utilisent beaucoup plus que cela, c'est vraiment un outil pour lancer les choses (manuellement ou planifié) et capturer les résultats, et valider ce qui s'est passé comme prévu. Et c'est très flexible.
la source
Jenkins a été mentionné par plusieurs. Vous pouvez aller de l'avant avec les scripts, mais Jenkins vous offrira la même flexibilité avec moins de frais généraux pour les rassembler.
C'est là que les images de machines virtuelles sont utiles. Vous pouvez configurer votre image propre et demander à chaque machine de lancer une fourchette de cela. L'image d'origine n'est jamais modifiée, mais vos tests ne feront pas la différence. Vous devriez certainement pouvoir exécuter une image bootstrap en une minute.
Si vous cherchez à faire fonctionner plusieurs machines à la fois, consultez Nimbula (je suis sans vergogne; je travaille pour eux). Pour les petits déploiements, c'est gratuit et vous permet de rassembler votre propre cloud privé pour les tests ... ou autre chose. Entre Jenkins et un fichier d'orchestration, vous pouvez faire tourner des serveurs hôtes, tester des clients et tout le reste pour exécuter automatiquement le gammut complet du code de test sans aucune interaction.
la source