Dans cet article, je présente une approche simple et reproductible pour déployer Jenkins à l'aide des principes de l'Infrastructure as Code
La mise en place d'un environnement CI/CD fiable est souvent plus complexe qu'il n'y paraît.
Les installations manuelles finissent souvent par générer des écarts de configuration, des environnements difficiles à reproduire et des déploiements plus fragiles.
L'objectif n'est pas seulement d'installer Jenkins, mais également de poser la première brique d'une stack CI/CD complète, pensée pour évoluer ensuite vers une intégration GitLab (ou autre) et un pipeline applicatif
Chaque outil a été retenu pour répondre à un besoin précis dans le cycle de vie CI/CD.
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.
La configuration actuelle est volontairement simple, mais conçue pour évoluer. Une adresse IP privée statique est attribuée à la machine virtuelle afin de faciliter, par la suite, la communication avec d'autres services et d'autres VM.
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
Une fois la machine virtuelle prête:
vagrant ssh
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Jenkins est alors accessible à l'adresse http://192.168.56.10:8080.
Cette première version reste volontairement minimaliste. Elle pose les bases, mais plusieurs éléments restent à ajouter pour aller vers un environnement plus complet :
Ces choix sont volontaires: ils permettent de garder cette première brique simple, lisible et facile à faire évoluer.
Cette base, accompagnée d'autres VMs servira ensuite à construire un environement complet
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.
L'étape suivante consistera à relier cette fondation à GitLab puis à intégrer une application réelle dans un pipeline complet, afin de transformer cette infrastructure en véritable support de livraison