Comment combiner Vagrant avec Jenkins pour un environnement d'intégration continue parfait?

85

Vous avez un projet qui a des exigences de logiciel à exécuter (par exemple: une version spécifique d'Apache, une version de PHP, une instance d'une base de données MySQL et quelques autres logiciels).

Vous avez déjà découvert Vagrant , votre environnement virtuel est donc entièrement configuré. Vous pouvez créer des boîtes à partir de vos fichiers de configuration et livres de recettes.

Vous avez également compris les avantages d'un système d'intégration continue tel que Jenkins .

Vous souhaitez maintenant combiner ces deux mondes (Vagrant et Jenkins) pour obtenir l'environnement d'intégration continue parfait. Pour être plus précis, vous ne souhaitez pas installer le logiciel requis par votre projet sur la machine exécutant Jenkins, mais vous souhaitez utiliser l'environnement virtuel fourni par Vagrant pour construire périodiquement votre projet par-dessus. Le logiciel CI (Jenkins) construira la boîte Vagrant pour vous et construira et testera votre projet par-dessus.

Comment configureriez-vous votre environnement pour y parvenir?

Roberto Aloi
la source
4
De plus, votre configuration Jenkins est une boîte Vagrant, vous pouvez donc exécuter cet environnement CI sur plusieurs plates-formes, car il existe de nombreuses différences entre elles.
Stephan Eggermont
1
Avez-vous créé un tel environnement? La combinaison de Docker & Jenkins est déjà bien connue, cependant, elle ne suffira pas pour les environnements Windows, auquel cas la seule bonne option, IMO, est Vagrant + Jenkins. Il y a certains aspects à prendre en compte, par exemple avons-nous vraiment besoin d'esclaves et dans quels contextes ou pourrions-nous utiliser un serveur unique pour créer un environnement de construction vagabond par projet à la demande (dans de nombreuses entreprises, seuls quelques projets sont constamment construits, la majorité est rarement construite), ou devrions-nous l'utiliser en plus du système de déduplication pour réduire l'encombrement du disque.
majkinetor

Réponses:

35

c'est une bonne solution pour le système de construction, ma suggestion:

  1. Votre jenkins actuel fonctionne en tant que CI maître (probablement démarré par l'utilisateur jenkins)
  2. Créez un autre utilisateur sur la même machine ou une autre machine pour travailler en mode esclave jenkins
    • jenkins slave peut être invoqué depuis le maître jenkins, et il peut utiliser différents utilisateurs comme vagrant qui avait la permission et l'environnement pour vagrant, donc il n'interférera pas avec le serveur maître jenkins d'origine
    • créez votre boîte de base vagrant, puis elle peut être réutilisée pour accélérer votre déploiement
  3. La plupart des informations d'installation (packages) peuvent être gérées par puppet (ou chef) pour être chargées dans votre boîte vm.

Vous pouvez probablement jeter un œil à veewee , qui peut créer une boîte de vagabonds à la volée.

Voici le Rendre CI plus facile avec Jenkins CI et Vagrant pour mon guide pour cette suggestion.

Larry Cai
la source
1
Votre lien est malheureusement rompu
langlauf.io
2
Au cas où quelqu'un serait intéressé par le lien rompu, voici une copie de Rendre CI plus facile avec Jenkins CI et Vagrant
Gilberto Treviño
12

Vous pouvez essayer le plugin Vagrant pour Jenkins qui prend actuellement en charge Jenkins CD 1.532.3

Vous pouvez voir une démo de ce plugin en cours d'exécution sur http://unethicalblogger.com/2012/03/13/vagrant-plugin-in-action.html

Christophe Furmaniak
la source
7
ce plugin ne prend pas en charge Jenkins au-dessus de 1.490, c'est donc une grosse limitation :-(
kenyee
ne supporte pas non plus les vagabonds qui courent sur les esclaves :(
Christophe Furmaniak
1
Oui, mais alors vous devez gérer tout le cycle de vie de la VM par vous-même (créer, détruire ou pas à la fin du travail, ...). L'idée derrière le plugin est que le plugin le fait pour vous et que vous puissiez ensuite vous concentrer sur votre objectif principal: utiliser une VM comme conteneur isolé.
Christophe Furmaniak
2
Le plugin mentionné a des problèmes inquiétants, qui ne sont toujours pas résolus ( issues.jenkins-ci.org/browse/JENKINS-26326 ), et le développement a été interrompu il y a un an. Je ne recommanderais pas.
Ross Ivantsiv
1
Exécuter l'instance vagrant à la demande pour faire la construction semble être la bonne chose à faire. Si ce plugin encore dysfonctionnel?
Atifm
1

Personnellement, je suggérerais d'utiliser Hashicorp Packer pour créer vos boîtes Vagrant pour les développeurs, puis de l'utiliser pour générer également une image Docker ou AWS ou OpenStack que vous pouvez exécuter sur votre système CI. Vagrant est un outil génial, mais la surcharge des machines virtuelles peut être un peu élevée pour qu'un système CI les fasse constamment tourner de haut en bas, surtout si vous voulez un retour très rapide.

Chez un ancien client, nous avons essentiellement démarré les machines Vagrant une fois avec le système, puis exécuté des builds Docker / virtualenv à l'intérieur de ces machines virtuelles et nous les détruisions périodiquement lorsqu'il y avait une mise à niveau majeure ou un problème avec l'environnement ne se comportant pas correctement.

https://www.packer.io/docs/builders/openstack.html

dragon788
la source
Si je peux demander, avez-vous exécuté jenkins en tant qu'utilisateur distinct? Si oui, comment avez-vous réussi à donner accès au vagabond? Merci
Jaswanth Manigundan
Tant que vagrant est installé normalement, il est placé sur le chemin du système. Les boîtes elles-mêmes sont normalement chargées dans le répertoire personnel de l'utilisateur actuel, mais vous pouvez remplacer la maison des vagabonds avec une variable d'environnement. Nous avons combiné tout cela en plus de faire en sorte que la boîte tire avec une version spécifique du processus de construction afin qu'elle soit mise en cache une fois, puis réutilisée.
dragon788