Introduction

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 :

  • Git local installé sur chaque poste développeur
  • GitHub
  • Jenkins assure les builds (compilation/packaging/…)
  • Ansible assure les déploiements

Schéma

Description du processus :

  1. Le développeur pousse son code sur “github
  2. Le développeur lance le build sur “Jenkins” (Master node)
  3. Jenkins” (Master node) se connecte sur le “node01” et lui demande de lancer le pipeline.
  4. Le “node01” récupére le code depuis “github
  5. Le “node01” exécute le jobs

Prérequis

pour la plateforme, nous allons avoir besoin :

  • Un serveur Jenkins (Master node) avec le plugin “ansible”.
  • Un serveur agent (Slave node). → git / ansible
  • Un serveur d'infrastructure pour le déploiement de notre service.
  • Un utilisateur ….

Implémentation de la plateforme

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é :

  • Enter an item name : Ansible pipeline
  • Sélectionner “Pipeline” et cliquer sur “OK

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 :

  • Jenkins envoyer le traitement sur notre premier nœud faisant office de “Master Ansiblenode01.
  • on check la version dansible.
  • on check la version de git.
  • on clone le repository github contenant notre playbook.
  • on exécute le playbook ansible.
  • on clean l'espace de travail.
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.

Annexe

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus