User Tools

Site Tools


outils:jenkins

JENKINS: Bases

Présentation

Jenkins est un serveur d’intégration et de déploiement continu que l'on peut installer et lancer sur un serveur local. Le projet Jenkins a débuté en 2004 et aujourd’hui c’est une solution adoptée par les entreprises qui souhaitent posséder leur propre infrastructure de CI.

Avantages

Jenkins est écrit en Java et est compatible avec les principaux systèmes d’exploitation. Les builds peuvent tourner sous environnement Linux, BSD, MacOS ou Windows.

Jenkins est totalement libre d’utilisation et open source. Jenkins supporte les plugins et dispose d’une bibliothèque plugins très fournie pour l’ajout de fonctionnalités au serveur de CI.

Les plugins Pipeline permettent de faire tourner ses builds sur n’importe quel système d’exploitation, y compris Windows ou Mac OS, car Jenkins est écrit en Java.

Installation

Installer Jenkins sur Redhat, Fedora ou CentOS

Il existe des paquets binaires natifs pour Redhat, Fedora et CentOS. Il faut d'abord configurer le référentiel comme il suit :

sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import	http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

Sur une nouvelle installation, il faudra peut-être installer le JDK:

sudo yum install java-1.6.0-openjdk

Ensuite, installer le paquet :

sudo yum install jenkins

Ceci installera la dernière version de Jenkins dans le répertoire /usr/lib/jenkins . Le répertoire de travail par défaut de Jenkins sera /var/lib/jenkins .

Démarrer Jenkins en utilisant la commande de service :

sudo service jenkins start

Jenkins va maintenant être exécuté sur le port par défaut : 8080 ( http://localhost:8080/ ).

Les paramètres de configuration de Jenkins sont placés dans le fichier /etc/sysconfig/jenkins . Cependant,on peut définir le port HTTP en utilisant le paramètre JENKINS_PORT, par exemple. Les principales options de configuration sont listées ici :

  • JENKINS_JAVA_CMD: La version de Java que vous voulez utiliser pour exécuter Jenkins
  • JENKINS_JAVA_OPTIONS: Les options de ligne de commande à passer à Java, tels que les options de mémoire
  • JENKINS_PORT: Le port sur lequel Jenkins sera exécuté

Configuration proxy NGINX

JENKINS comme service unique

Décommenter default server config dans /etc/nginx/nginx.conf et créer le fichier /etc/nginx/conf.d/domain.conf

    location / {
        proxy_set_header        Host $host:$server_port;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;

        proxy_pass          http://127.0.0.1:8080;
        proxy_read_timeout  90;

        proxy_redirect      http://127.0.0.1:8080 https://jenkins.yourdomainname.com;

        proxy_http_version 1.1;
        proxy_request_buffering off;
        add_header 'X-SSH-Endpoint' 'jenkins.yourdomainname.com:50022' always;
    }

JENKINS dans une subdirectory

Editer le fichier /etc/sysconfig/jenkins' pour ajouter prefix=/jenkins à JENKINS_ARGS

JENKINS_ARGS="--prefix=/jenkins"

Décommenter default server config dans /etc/nginx/nginx.conf et créer le fichier /etc/nginx/conf.d/domain.conf

server {
        listen       80;
        listen       [::]:80;
        server_name  _;

        return 301 https://$host$request_uri;
}

server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  domain.com;
        access_log   /var/log/nginx/domain.com.access.log;
        root         /var/www/domain.com/public_html;

        ssl_certificate         /path/to/tls_bundle.crt;
        ssl_certificate_key     /path/to/tls_bundle.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;

       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

       ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
       ssl_prefer_server_ciphers on;

        # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
        add_header Strict-Transport-Security max-age=15768000;

        # OCSP Stapling ---
        # fetch OCSP records from URL in ssl_certificate and cache them
        ssl_stapling on;
        ssl_stapling_verify on;

        resolver 8.8.8.8;

        # Note that regex takes precedence, so use of "^~" ensures earlier evaluation
       location ^~ /jenkins/ {
               proxy_http_version 1.1;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "upgrade";

               proxy_pass              http://10.0.0.100:8080/jenkins/;

               proxy_redirect http:// https://;

               sendfile off;

               proxy_set_header   Host                 $host:$server_port;
               proxy_set_header   X-Real-IP            $remote_addr;
               proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
               proxy_set_header   X-Forwarded-Proto    https;
               proxy_max_temp_file_size 0;

               # this is the maximum upload size
               client_max_body_size       10m;
               client_body_buffer_size    128k;

               proxy_connect_timeout      90;
               proxy_send_timeout         90;
               proxy_read_timeout         90;

               proxy_buffer_size          4k;
               proxy_buffers              4 32k;
               proxy_busy_buffers_size    64k;
               proxy_temp_file_write_size 64k;
       }
}

*# Gestion des utilisateurs et identifiants

Jenkins permet d'identifier et de gérer les utilisateurs de plusieurs façons, depuis une la base de données intégrée pour les petites équipes jusqu'à l'intégration avec des annuaires d'entreprise, avec de nombreuses autres options entre les deux.

Gestion des utilisateurs dans la base de données intégrée à Jenkins

Le moyen le plus simple pour gérer des comptes utilisateurs dans Jenkins est d'utiliser la base de données interne de Jenkins. C'est une bonne option si on veut garder les choses simples, car peu de configuration est nécessaire.

Création des utilisateurs

Les utilisateurs qui ont besoin de se connecter au serveur Jenkins peuvent s'enregistrer et créer un compte par eux-mêmes, et, en fonction du modèle de sécurité choisi, un administrateur peut ensuite décider ce que ces utilisateurs sont autorisés à faire.

Liste des utilisateurs connus de Jenkins

Jenkins ajoute automatiquement tout utilisateur de gestionnaire de sources à cette base de données dès qu'un changement est effectué dans le code source surveillé par Jenkins. Ces noms d'utilisateurs sont utilisés principalement pour enregistrer le responsable de chaque tâche de build. On peut voir la liste des utilisateurs connus en cliquant sur l'entrée de menu Personnes .

Si on clique sur un utilisateur de cette liste, Jenkins affiche différentes informations à propos de cet utilisateur, incluant son nom complet et les tâches de build auxquelles il a contribué. De là, on peut aussi modifier ou compléter les détails à propos de cet utilisateur, comme son mot de passe ou son adresse email. Afficher les builds auxquels un utilisateur participe

Activation des utilisateurs

Un utilisateur apparaissant sur cette liste ne peut pas nécessairement se connecter à Jenkins. Pour pouvoir se connecter, l'utilisateur doit avoir un mot de passe configuré. Il y a essentiellement deux façons de faire cela. Si on a configuré l'option “Autoriser les utilisateurs à s'enregistrer”, les utilisateurs peuvent simplement se connecter avec leur nom d'utilisateur SCM et fournir leur adresse email et leur mot de passe sans confirmation. Autrement, on peut activer un utilisateur en cliquant sur l'option de menu Configurer dans l'écran de détails utilisateur, et fournir une adresse email et un mot de passe.

Gestion des identifiants des serveurs dans la base interne

Le plugin credentials permet de stocker des identifiants dans Jenkins.

Le plug-in des informations d'identification fournit une API normalisée permettant à d'autres plug-in de stocker et de récupérer différents types d'informations d'identification.

La visibilité de ces identifiants peut être limitée à certains projets à l'intérieur de jenkins, par exemple les identifiants des commutateurs définis dans le projet réseau peuvent être vus depuis ce projet, mais pas de la racine ni d'un autre projet.

Construire un build avec paramètre

La fonction “Construire un projet free-style” sert à builder (construire) un projet. On peut y intégrer tous les outils de gestion de version avec tous les systèmes de build. Il est même possible d'utiliser Jenkins pour tout autre chose qu'un build logiciel.

Description

Assign Redmine project

  • Redmine website: adresse url du serveur redmine
  • Redmine project identifier: Redmine project identifier

Gestion des paramètres

L'activation de l'option Ce build a des paramètres permet de passer de manière fixe ou interactive des paramètres de différents types lors du build:

  • Extended Choice Parameter
  • Git Parameter
  • JIRA Issue Parameter
  • JIRA Release Version Parameter
  • List Subversion tags (and more)
  • Non-Stored Password Parameter
  • Paramètre “Mot de passe”
  • Paramètre String
  • Paramètre booléen
  • Paramètre choix

Exemple de paramètre texte

Par exemple on veut utiliser un script pour passer les commandes “screen-length disable” (mode wrap) et “dis cur” (pour lister la configuration) sur des commutateurs

  • Name: Nom du paramètre
  • Default Value: liste simplement les commandes à passer sur les commutateurs
  • Description: Description

Exemple de paramètre "Extended Choice Parameter"

Permet de définir des paramètres multi critères de type :

  • Basic Parameter Types
  • Multi-level Parameter Types
  • JSON Parameter Type

Par exemple pour passer les commandes sur les commutateurs on a besoin des indentifiants/mot de passe de chacun d'eux.

Pour des raisons de sécurité les identifiants et mot de passe des commutateurs sont stockés dans la base interne, il faut donc les récupérer pour pouvoir les passer en paramètre au script.

Des scripts groovy permettent de construire un menu déroulant de ce identifiants en utilisant Basic Parameter Types:

  • Name: Nom du paramètre
  • les paramètres Parameter type, Number of Visible Items,Delimiter et, Quote Value servent à définir le type (menu déroulant = Parameter type = Multi Lines), le contenu (une liste d'items délimités par une virgule = Delimiter = ,) et l'apparence du menu déroulant (une fenètre limitée à 5 idems = Number of Visible Items=5)
  • Source for Value définit le contenu de la liste d'items(Value, Property File, Groovy Script ou Groovy Script File)
  • Source for Default Value définit les valeurs par défaut de la liste d'item (Default Value, Default Property File, Default Groovy Script ou Default Groovy Script File)
  • Source for Value Description définit les libellés de laliste d'items (Description, Description Property File, Description Groovy Script, Description Groovy Script File)

Gestion de code source

Jenkins est un serveur d'intégration continue, ce qui signifie qu'il doit extraire le code source d'un référentiel de code source et créer du code.

Jenkins supporte nativement certains outils de gestion de code source tels que Subversion et CVS. Pour utiliser d'autres outils tel Git, il suffit d'installer le plug-in Jenkins.

Les options de contrôle de gestion sont les suivantes:

  • Aucune
  • Git
  • Mercurial
  • SCLM
  • Subversion

Ce qui déclenche le build

  • Déclencher les builds à distance (Par exemple, à partir de scripts)
  • Build when a change is pushed to Gogs
  • Construire après le build sur d'autres projets
  • Construire périodiquement
  • GitHub hook trigger for GITScm polling
  • Scrutation de l'outil de gestion de version

Environnements de Build

  • Mask passwords and regexes: permet de masquer les paramètres de mot de passe, ou tout autre type de paramètres de construction ou expressions rationnelles sélectionnés pour le masquage dans l'écran de configuration principal de Hudson / Jenkins (Manage Hudson> Configure System).
  • Use secret text(s) or file(s)
  • Provide Configuration files
  • Send files or execute commands over SSH before the build starts: Pour ennvoyer des fichiers ou exécuter des commandes sur SSH avant le début de la construction
  • Send files or execute commands over SSH after the build runs: Pour envoyer des fichiers ou exécuter des commandes sur SSH après l'exécution de la génération
  • Create a formatted version number: Pour créer un numéro de version formaté selon un masque définit
  • Execute shell script on remote host using ssh: Exécuter un script shell sur un hôte distant à l'aide de ssh
  • Generate Release Notes
  • Set Build Name
  • With Ant

Build

On peut exécuter un script bash en utilisant les paramètres décrits plus haut ..

#USERNAME=${CREDENTIALS%:*}
#PASSWORD=${CREDENTIALS#*:}
#sh $WORKSPACE/netshow $USERNAME $PASSWORD $commandes
#credits=$(echo $hosts | sed -e 's/[{}]/''/g'| sed -e 's/\"/''/g'| sed -e 's/:/=/g' | sed -e 's/,/;/g')
#eval "$credits"
set +x
IFS=','
for line in $hosts
	do
    ip_address=$(echo $line | awk -F"|"  '{print $1}')
    user_id=$(echo $line | awk -F"|"  '{print $2}')
    user_password=$(echo $line | awk -F"|"  '{print $3}')
    sh $WORKSPACE/netshow $user_id $user_password $ip_address
done

ou passer des commandes

java -jar /jenkins-cli.jar -s http://user:password@xx.xx.xxx.xx:8383/ get-job reseau/netshow > /tmp/netshow.xml

Actions à la suite du build

Par exemple on peut Publier le résultat de la construction en tant que git-notes en utilisant le plugin Git Publisher

outils/jenkins.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1