VirtualBox joue ici le rôle d'hyperviseur simple et gratuit, parfaitement adapté à un usage local de développement et de test.
Veiller à utiliser des versions compatibles de Vagrant et VirtualBox.Une fois le script lancé, Vagrant crée la VM, applique la configuration réseau, lance le provisionnement Ansible et installe Jenkins dans un conteneur Docker.
[ Machine du développeur ]
↓
Machine virtuelle Vagrant
↓
Provisionnement Ansible
↓
Moteur Docker
↓
Conteneur Jenkins
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "jenkins-vm"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.synced_folder ".", "/vagrant"
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "/vagrant/ansible/install_jenkins.yml"
end
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
end
Voir le playbook complet
- hosts: all
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install prerequisites
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- python3-pip
state: present
- name: Install docker SDK for python
pip:
name: docker
- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Update apt cache after adding Docker repo
apt:
update_cache: yes
- name: Add Docker repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu focal stable
state: present
- name: Install Docker
apt:
name: docker-ce
state: present
update_cache: yes
- name: Add vagrant user to docker group
user:
name: vagrant
groups: docker
append: yes
- name: Ensure Docker service is running
service:
name: docker
state: started
enabled: yes
- name: Pull Jenkins LTS image
docker_image:
name: jenkins/jenkins
tag: lts
source: pull
- name: Ensure /var/jenkins_home exists
file:
path: /var/jenkins_home
state: directory
owner: 1000
group: 1000
mode: '0755'
- name: Run Jenkins container
docker_container:
name: jenkins
image: jenkins/jenkins:lts
state: started
restart_policy: unless-stopped
ports:
- "8080:8080"
- "50000:50000"
volumes:
- /var/jenkins_home:/var/jenkins_home
L'utilisateur vagrant est ajouté au groupe Docker afin d'éviter l'usage systématique de sudo pour les commandes Docker.
git clone https://github.com/val7304/vagrant-jenkins.git
cd vagrant-jenkins
vagrant up
vagrant ssh
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Ces choix sont volontaires: ils permettent de garder cette première brique simple, lisible et facile à faire évoluer.
Le code source sera hébergé sur GitLab.com, avec une configuration de webhooks pour déclencher Jenkins automatiquement.
Ce projet ne se limite pas au déploiement de Jenkins: il constitue une première brique vers une infrastructure reproductible, automatisée et évolutive.
En combinant Vagrant, Ansible et Docker, on obtient une base cohérente, portable et facile à maintenir.