Comment gérer Jenkins avec Rancher sur Ubuntu 14.04

Un article de Rancher

introduction

Une intégration continue efficace est une exigence essentielle de toute équipe de développement performante. Parce que CI n’est pas un service de première ligne, il est souvent exécuté sur du matériel de niveau intermédiaire ou excédentaire. L’ajout de versions pour les demandes d’extraction, les déploiements automatisés, les tests d’acceptation, les téléchargements de contenu et une foule d’autres tâches peut rapidement saturer les ressources de la machine de génération, en particulier au moment du lancement, lorsque les validations et les activités de déploiement sont nombreuses.

Dans cet article, nous allons construire un système de build distribué en utilisant Docker pour créer et exécuter nos images Jenkins et Rancher pour orchestrer notre cluster Docker. Jenkins est l’une des solutions de CI les plus en vue parmi les plus répandues. Docker automatise le déploiement d’applications dans des conteneurs de logiciels et Rancher fournit une plate-forme complète pour la gestion de Docker en production.

Cet article décrit un déploiement de Jenkins exclusivement dans le cloud. Cependant, une alternative consiste à utiliser un maître Jenkins interne avec des serveurs cloud pour fournir une capacité de débordement lorsque davantage de ressources sont nécessaires. C’est là que Docker et Rancher brillent vraiment: Docker nous fournit des environnements de déploiement presque identiques sur n’importe quel nœud et Rancher nous permet de combiner des nœuds de différents fournisseurs de cloud ou serveurs internes en un seul cluster fonctionnant sur son propre VPN. À la fin de ce didacticiel, vous devriez pouvoir facilement configurer un déploiement Dockerized Jenkins avec un nombre arbitraire d’esclaves.

Conditions préalables

Ce didacticiel utilisera au total trois gouttelettes: une pour un serveur Rancher, une pour un nœud de calcul Rancher exécutant le maître Jenkins et une pour un second nœud de calcul Rancher exécutant l’esclave Jenkins.

image: https: //assets.digitalocean.com/articles/Jenkins_Rancher/1.png [image]

Nous ferons référence aux adresses IP de ces droplets avec respectivement `, ` et ++; partout où vous voyez ces variables dans ce tutoriel, remplacez-les par l’adresse IP appropriée.

Dans un premier temps, nous allons créer un Droplet pour le serveur Rancher; la création des deux nœuds de calcul sera traitée dans une étape ultérieure. Donc, pour commencer ce tutoriel, vous aurez besoin de:

  • Une goutte Ubuntu 14.04 avec l’image Docker 1.5.0. Étant donné que ce Droplet sera utilisé exclusivement en tant que serveur Rancher, vous pouvez choisir une petite taille de Droplet.

Vous pouvez trouver l’option Image Docker 1.5.0 sur la page de création de gouttelettes, dans l’onglet * Applications * sous * Sélectionner une image *. Cette Droplet nécessite également des données utilisateur personnalisées. Pour ajouter cela, cliquez sur * Activer les données utilisateur * dans la section * Paramètres disponibles * et entrez le script ci-dessous dans la zone de texte qui apparaît. Ce script indique à Droplet d’exécuter un serveur Rancher au démarrage.

#!/bin/bash
docker run -d --name rancher-server -p 8080:8080 rancher/server

Étape 1 - Configuration de l’authentification

Une fois votre serveur Rancher créé, vous pourrez au bout d’un moment accéder à son interface utilisateur via un navigateur pointant sur + http: //: 8080 / +. Le serveur Rancher étant ouvert à Internet, il est conseillé de configurer l’authentification. Dans cette étape, nous allons configurer l’authentification basée sur Github OAuth, qui est actuellement prise en charge par Rancher.

Vous verrez dans le coin supérieur droit un avertissement indiquant que * Le contrôle d’accès n’est pas configuré * suivi d’un lien vers * Paramètres *. Cliquez sur * Paramètres * et suivez les instructions fournies pour enregistrer une nouvelle application avec Github, puis copiez l’ID client et le secret dans les champs de texte respectifs.

Lorsque vous avez terminé, cliquez sur * Authentifier avec Github *, puis * Autoriser l’application * dans la fenêtre qui apparaît. Une fois cette opération effectuée, la page sera rechargée et les instructions relatives à la configuration de OAuth seront remplacées par la section * Configurer l’autorisation *. Ajoutez tous les utilisateurs et organisations supplémentaires qui devraient avoir accès à Rancher. Si vous apportez des modifications, un bouton intitulé * Enregistrer la configuration de l’autorisation * apparaîtra. Cliquez dessus lorsque vous avez terminé.

Une fois que vous avez sauvegardé la configuration des autorisations, l’avertissement dans le coin supérieur droit doit être remplacé par votre image de profil Github et un menu de sélection de projet (qui indique initialement * par défaut *). Cliquez sur * Par défaut * pour ouvrir le menu de sélection de projet, puis cliquez sur * Gérer les projets * et enfin * Créer un projet *. Ajoutez un projet appelé Jenkins, puis utilisez à nouveau le menu de sélection de projet pour sélectionner le projet Jenkins.

image: https: //assets.digitalocean.com/articles/Jenkins_Rancher/2.png [image]

Cela aidera à garder votre interface Rancher dégagée en gardant les différents projets que vous exécutez sur Rancher isolés. Vous pouvez créer des projets supplémentaires (qui nécessitent des nœuds de calcul supplémentaires) si vous souhaitez exécuter d’autres services en plus de Jenkins sur le même cluster Rancher. Notez également que le projet Par défaut est spécifique à l’utilisateur connecté. Par conséquent, si vous souhaitez autoriser plusieurs personnes à accéder à vos agents Rancher, vous ne devez pas utiliser le projet par défaut.

Étape 2 - Enregistrement des nœuds de calcul des éleveurs

Maintenant que le serveur et l’authentification sont configurés, nous pouvons enregistrer certains nœuds de calcul pour exécuter nos déploiements Jenkins.

  • Remarque *: Avant l’authentification, les nœuds de calcul Rancher peuvent être enregistrés sans fournir de jeton d’enregistrement. Cependant, comme nous avons activé l’authentification, tous les agents doivent fournir un jeton d’enregistrement à ajouter au cluster.

Dans l’interface utilisateur Rancher, cliquez sur * Hôtes * (dans le menu de gauche), puis * Enregistrer un nouvel hôte *. Copiez la commande d’exécution de Docker à partir de la fenêtre qui s’ouvre, puis fermez la fenêtre. Retournez dans le panneau de configuration de DigitalOcean et créez deux autres Droplets avec l’image Docker 1.5.0, comme le serveur Rancher. Vous souhaiterez peut-être sélectionner une taille d’instance plus grande pour ces deux droplets si vos générations utilisent beaucoup de ressources.

Pour les données utilisateur contenues dans ces deux gouttelettes, ajoutez + #! / Bin / bash + suivi de la commande d’exécution de Docker que vous avez copiée précédemment. Cela devrait ressembler à ceci.

#!/bin/bash
sudo docker run -d --privileged
 -v /var/run/docker.sock:/var/run/docker.sock rancher/agent
 http://:8080/v1/scripts/

La longue chaîne de chiffres et de lettres à la fin sera différente pour votre commande. Assurez-vous d’avoir sélectionné votre projet avant de cliquer sur * Enregistrer un nouvel hôte *, car le jeton est unique pour chaque projet.

Après quelques minutes, vous devriez être en mesure de voir vos deux nœuds de calcul Rancher dans l’interface utilisateur Rancher. Vous verrez les noms de vos gouttelettes où il est indiqué * RancherAgent * dans l’image ci-dessous.

image: https: //assets.digitalocean.com/articles/Jenkins_Rancher/3.png [image]

Étape 3 - Lancement du nœud principal Jenkins

Nous sommes maintenant prêts à lancer notre noeud principal Jenkins en utilisant l’image officielle de Jenkins.

Pour lancer le conteneur, cliquez sur * Ajouter un conteneur * sous le nœud de calcul que vous souhaitez utiliser, puis ajoutez les options suivantes:

  • Utilisez * Master * comme nom de conteneur, dans la zone de texte en regard de * Nom *.

  • Utilisez * jenkins * comme image source, dans la zone de texte en regard de * Select Image *.

Ensuite, cliquez sur le * + * à côté de * Carte du port *. Renseignez 8080 dans les deux champs et laissez TCP comme protocole. Cela nous donnera accès à l’interface Web de Jenkins. Cliquez à nouveau sur * + *, ajoutez le port 50000 dans les deux champs et laissez TCP comme protocole. Cela permet aux esclaves de se connecter au maître.

Ensuite, cliquez sur * Options avancées *, puis sur l’onglet * Volumes *. Cliquez sur le * + * à côté de * Volumes *, et spécifiez + / var / jenkins_home + dans la zone de texte qui apparaît. Avoir votre répertoire personnel Jenkins dans un volume vous permet de conserver votre configuration si vous redémarrez votre conteneur et vous permet également de sauvegarder votre conteneur en utilisant les volumes à partir d’une autre fonctionnalité de conteneur.

Enfin, cliquez sur * Créer * pour démarrer votre conteneur Jenkins.

[[step-4-­--launching-the-jenkins-slave-node]] === Étape 4 - Lancement du nœud esclave Jenkins

Dans cette étape, nous allons lancer l’esclave Jenkins.

Pointez votre navigateur sur + http: //: 8080 + pour charger l’interface utilisateur Jenkins.

image: https: //assets.digitalocean.com/articles/Jenkins_Rancher/4.png [image]

Dans l’interface utilisateur Jenkins, créez une configuration de nœud en sélectionnant * Manage Jenkins * à gauche, puis * Manage Nodes * dans le menu suivant, et enfin * New Node * à gauche de la dernière page. Dans le menu suivant, entrez un nom pour votre esclave dans la zone de texte à côté de * Nom du nœud * (et rappelez-vous - nous en aurons besoin de nouveau dans un instant), choisissez * Dumb Slave * comme type, puis cliquez sur * OK. *.

Vous serez redirigé vers une page avec des détails sur ce nœud. Pour * Répertoire racine distant *, tapez + / var / jenkins. Pour la * méthode de lancement *, choisissez * Lancer les agents esclaves via Java Web Start *. Vous pouvez également vouloir mettre à jour le paramètre * # d’exécuteurs * au-dessus de la valeur par défaut de 1 pour augmenter le nombre de constructions parallèles autorisées sur l’esclave. Les autres paramètres peuvent être laissés à leurs valeurs par défaut. Cliquez sur * save * pour valider la configuration de l’esclave.

Nous sommes maintenant prêts à lancer notre conteneur d’esclaves. Dans l’interface utilisateur de Rancher, cliquez sur * Ajouter un conteneur * sur le nœud de calcul restant, puis ajoutez les options suivantes:

  • Utilisez * Slave 1 * comme nom de conteneur, dans la zone de texte en regard de * Nom *.

  • Utilisez * usman / jenkins-slave * comme image source, dans la zone de texte en regard de * Select Image *.

Puis cliquez sur * Options avancées *. Vous commencerez dans l’onglet * Command *. Cliquez sur le * + * à côté de * Environment Vars * et ajoutez une entrée avec * Nom * comme + MASTER_HOST + et * Value * comme ++. Cliquez à nouveau sur * * * et ajoutez une autre entrée avec * Name * comme + NODE + et * Value * comme nom de votre esclave Jenkins, comme indiqué dans le menu * Nouveau nœud * via l’interface utilisateur Jenkins plus tôt dans cette étape.

Ensuite, cliquez sur l’onglet * Volumes *. Cliquez sur le * + * à côté de * Volumes *, et spécifiez + / var / jenkins + dans la zone de texte qui apparaît.

Enfin, cliquez sur * Créer *.

Le conteneur + jenkins-slave + téléchargera un fichier jar à partir du maître Jenkins et exécutera un nœud esclave Jenkins. Lorsque l’esclave se présente, vous devriez pouvoir voir son statut après avoir actualisé la page * Gérer les nœuds *, là où nous nous sommes arrêtés dans l’interface utilisateur de Jenkins. Vous devriez voir votre nœud esclave avec une valeur de temps de réponse et aucun X rouge sur l’icône de l’ordinateur, comme indiqué ci-dessous.

image: https: //assets.digitalocean.com/articles/Jenkins_Rancher/5.png [image]

Conclusion

Dans cet article, nous avons configuré un déploiement Jenkins CI à l’aide de Docker et de Rancher. Notre cluster Jenkins est maintenant prêt pour la configuration ultérieure et la création de tâches de construction.

Docker nous fournit un environnement cohérent pour exécuter Jenkins, tandis que Rancher fournit un réseau entre l’hôte et nous permet de gérer le cluster à partir de l’interface utilisateur Web sans avoir à accéder manuellement aux droplets ou aux serveurs de provision. Grâce à cet ensemble d’outils, nous sommes en mesure de faire évoluer rapidement les ressources de notre système de construction. Cela peut être essentiel pour maintenir des systèmes de build non intrusifs à des moments critiques tels que les lancements.