Nous allons voir à travers cette article comment utiliser la 'stack' logicielle Jenkins / Git et Ansible pour gérer son infrastructure.
La chaîne DevOps décrite ci-dessous permet d’assurer des déploiements sur différents environnements techniques : INT, VAL et PROD.
Elle est composée des éléments suivants :
Description du processus :
pour la plateforme, nous allons avoir besoin :
Nous allons tout d'abord créer un utilisateur ansible “ansops” sur le serveur “node01” qui va nous permettre de considérer ce dernier un serveur Ansible master.
Sur node01 (Master ansible) :
root@node01:~# useradd -s /bin/bash -d /home/ansops -m ansops root@node01:~# passwd ansops
On génère pour l'utilisateur “ansops” une paire de clé (privée/publique) ssh.
root@node01:~# su - ansops ansops@node01:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/ansops/.ssh/id_rsa): Created directory '/home/ansops/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ansops/.ssh/id_rsa Your public key has been saved in /home/ansops/.ssh/id_rsa.pub The key fingerprint is: SHA256:cjZ34rvWC30JCf4HgStFja/SEDbnD2qamGWu5fiPrZQ ansops@node01 The key's randomart image is: +---[RSA 3072]----+ | .o | | +.o.. | | . =+.. | | .ooo.o | | . S+=+= | | o=+=o=.o . | | *E+ .o.o + | | o=+o .o.o | | oo=oo.o... | +----[SHA256]-----+
On créer l'utilisateur “ansops” sur les serveurs d'infrastructures (Ansible slaves).
root@<SRV_INFRASTRUCTURE>:~# useradd -s /bin/bash -d /home/ansops -m ansops root@<SRV_INFRASTRUCTURE>:~# passwd ansops New password: Retype new password: passwd: password updated successfully
On fait en sorte d'avoir tout les droits “sudo” sans mot de passe.
root@<SRV_INFRASTRUCTURE>:~# visudo ansops ALL=(ALL:ALL) NOPASSWD:ALL
On retourne sur le “node01” (Master ansible) et on réalise le transfère de clé SSH de notre utilisateur “ansops” entre le serveur ansible Maitre node01 et les serveurs d'infrastructures “Slaves”
ansops@node01:~$ ssh-copy-id <SRV_INFRASTRUCTURE> /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansops/.ssh/id_rsa.pub" The authenticity of host '<SRV_INFRASTRUCTURE> (10.75.168.231)' can't be established. ECDSA key fingerprint is SHA256:g2xYS5pQzO9HFnHDBBA5hDgKA4JFv0W47mjdsFF75yA. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ansops@<SRV_INFRASTRUCTURE>'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '<SRV_INFRASTRUCTURE>'" and check to make sure that only the key(s) you wanted were added.
Maintenant que la configuration de base ansible est réalisé au sein de notre infrastructure, nous allons devoir installer le plugin permettant à “jenkins” de piloter “ansible”.
Pour finir la configuration et donc l'utilisation du plugin ansible avec jenkins, on créer l'utilisateur “ansops” et l'on ajoute la clé privée SSH.
Dans Manage Jenkins > Manage Credentials > Add credentials
Arrivé à cette étape, notre plateforme Jenkins est prête à administrer des “jobs” à base d'ansible.
Pour cela, dans l'interface de “jenkins”, nous allons créer un “pipeline” comme indiqué :
Cliquer sur l'onglets “Pipeline” et renseigner le champs “Definition” > “script” avec le contenu qui va suivre et cliquer sur “Save”
Dans le pipeline suivant :
pipeline {
agent {
node {
label 'node01'
}
}
stages {
stage('Ansible version'){
steps {
sh 'ansible --version'
}
}
stage('Git version'){
steps {
sh 'git version'
}
}
stage('SCM Checkout'){
steps {
git branch: 'main', url: 'https://github.com/rbouikila/jenkins-ansible.git'
}
}
stage('Execute ansible-playbook'){
steps {
ansiblePlaybook credentialsId: 'ansops', disableHostKeyChecking: true, installation: 'ansible', inventory: 'inventory', playbook: 'site.yml'
}
}
stage('Clean Workspace'){
steps {
cleanWs()
}
}
}
}
Un fois le pipeline créé, il ne nous reste plus qu'à lancer le jobs. Pour cela, cliquer sur l'icone “Build Now”.
Si vous avez installé le plugin “blue ocean”, on pourra aussi visualiser le résultat comme ci dessous.