Vous souhaitez exécuter Jenkins dans Docker mais vous ne savez pas s'il faut utiliser des volumes ou garder les données conteneurisées ? Si Jenkins est conteneurisé, comment sauvegardez-vous les données ? Avez-vous besoin de sauvegarder l'intégralité du conteneur ? Les informations peuvent-elles persister en dehors du conteneur, et comment ? L'utilisation de Docker Compose avec des volumes peut vous aider à garantir la sécurité de vos données Jenkins même si le conteneur Docker tombe en panne.
Outre la sauvegarde des données, l'utilisation de volumes Docker vous permet également de partager des données Jenkins entre plusieurs conteneurs.
Continuez à lire car, dans cet article, vous apprendrez à exécuter Jenkins à l'aide de Docker et Docker Compose. Vous apprendrez à rechercher et éventuellement à sauvegarder les données Jenkins à l'intérieur et à l'extérieur du conteneur Docker.
Exigences
Il y aura beaucoup d'exemples d'apprentissage dans cet article. Si vous souhaitez suivre, vous aurez besoin de :
- Un ordinateur avec Docker et Docker Compose installée. Les démos de cet article sont réalisées dans Ubuntu Server 20.04 . Vous pouvez utiliser Docker sous Windows ou macOS si vous préférez.
Cet article n'explique pas comment installer et configurer Docker et Docker Compose. Vous pouvez vous référer à la documentation officielle de Docker. Le blog ATA contient également de nombreux articles liés à Docker que vous voudrez peut-être aussi lire.
Exécuter Jenkins dans Docker
Pour exécuter une instance Jenkins dans Docker, vous devez d'abord extraire l'image d'un référentiel. Dans cet exemple, l'image Jenkins est extraite de Docker Hub . Vous avez la possibilité de télécharger l'image avant de créer un conteneur. Ou vous pouvez également exécuter un conteneur et laisser Docker télécharger l'image à la volée.
La commande ci-dessous exécutera un conteneur Jenkins à l'aide de docker run
commande. Le --name [NAME]
L'option est l'endroit où vous attribuez un nom au conteneur Docker. Si le nom du conteneur n'est pas spécifié, Docker attribue un nom aléatoire au conteneur.
Le -p [host-port:container-port]
L'option signifie exposer le port ou les ports à l'intérieur du conteneur à votre ordinateur hôte. Dans le code ci-dessous, les ports 8080 et 50000 sont exposés à l'hôte Docker en utilisant les mêmes numéros de port.
Enfin, jenkins/jenkins:lts
signifie que le conteneur à exécuter utilisera le jenkins:lts Image Docker du dépôt Jenkins . Vous pouvez modifier les valeurs nom et port hôte nombres si nécessaire, mais ne modifiez pas le conteneur numéros de port.
Veuillez copier le code ci-dessous et l'exécuter dans votre terminal.
docker run --name my-jenkins-1 -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
Après avoir exécuté la commande ci-dessus, Docker commence à créer un nouveau conteneur. Une fois le conteneur Jenkins en cours d'exécution, notez le mot de passe administrateur initial affiché sur le terminal. Le mot de passe administrateur est nécessaire lors de la configuration initiale de Jenkins.
Terminer la configuration initiale de Jenkins
Une fois que le conteneur Jenkins est entré dans l'état d'exécution, vous pouvez désormais accéder à la page d'administration Jenkins. Si vous vous souvenez de la commande que vous avez utilisée pour créer le conteneur, le numéro de port est 8080. Donc, pour accéder à l'instance Jenkins, accédez à HTTP://localhost:8080 .
Comme vous pouvez le voir ci-dessous, le déverrouiller Jenkins La page nécessite que vous saisissiez le mot de passe administrateur initial. Vous devriez avoir copié le mot de passe administrateur initial auparavant. Saisissez le mot de passe dans le champ Mot de passe administrateur case et cliquez sur Continuer .
Sur le Personnaliser Jenkins page, vous aurez la possibilité d'installer les plugins suggérés . Ces plugins suggérés sont les plugins que la communauté Jenkins installe généralement. Si vous avez un ensemble présélectionné de plugins à installer, choisissez Sélectionner les plugins à installer option.
Pour plus de simplicité, l'option Installer les plugins suggérés est l'option sélectionnée pour cet exemple.
Les plugins seront installés et vous ne pouvez qu'attendre que l'installation soit terminée. Comme vous pouvez le voir ci-dessous, il y a quatorze (14) plugins suggérés en cours d'installation. Le nombre de plugins recommandés peut augmenter ou diminuer au fil du temps. Au moment où vous avez installé votre instance Jenkins, les plugins suggérés peuvent déjà être différents.
Immédiatement après la fin de l'installation des plugins, vous verrez le message Créer le premier utilisateur administrateur page. Cette page est l'endroit où vous allez créer le premier compte administrateur Jenkins. Remplissez toutes les cases comme requis et cliquez sur Enregistrer et continuer. Assurez-vous de vous souvenir des informations d'identification de l'administrateur que vous venez de créer.
Dans la configuration de l'instance est l'endroit où vous pouvez modifier l'URL de la page d'administration Jenkins. La valeur de l'URL correspond généralement à l'URL réelle à laquelle les utilisateurs Jenkins auront accès. Pour cet exemple, laissez la valeur par défaut de http://localhost:8080 et cliquez sur Enregistrer et terminer .
Sur la page de configuration finale, vous verrez la confirmation que la configuration de Jenkins est terminée. Cliquez sur Commencer à utiliser Jenkins .
Lorsque vous voyez le message Bienvenue chez Jenkins page, comme indiqué ci-dessous, vous avez terminé l'installation de Jenkins. À ce stade, vous pouvez commencer à configurer Jenkins et à créer de nouveaux éléments ou projets.
Rechercher les données Jenkins dans le conteneur
Dans la section précédente, vous avez créé un conteneur Docker pour exécuter une instance de Jenkins. Les conteneurs Docker, comme tout le reste sur un ordinateur, peuvent se casser. Si le conteneur devient indisponible pour une raison quelconque, les données Jenkins ont également disparu.
Pour mieux comprendre le placement des données Jenkins, le code ci-dessous utilise le docker exec
commande pour lister le contenu de /var/jenkins_home . Le nom du conteneur Docker dans cet exemple est my-jenkins-1.
docker exec my-jenkins-1 ls -l /var/jenkins_home
Vous pouvez voir ci-dessous le résultat de l'exécution de la commande ci-dessus. Le contenu de /var/jenkins_home répertoire sont répertoriés. Le /var/jenkins_home Le répertoire contient les paramètres, les utilisateurs, les plugins et d'autres éléments critiques.
Sauvegarde des données Jenkins du conteneur vers l'hôte
À ce stade, vous avez confirmé que les données Jenkins se trouvent à l'intérieur du conteneur. Vous devez copier les données Jenkins du conteneur vers l'hôte. Et une fois que les données Jenkins sont sorties du conteneur, vous pouvez alors effectuer une sauvegarde.
C'est une bonne chose que Docker ait un support intégré pour copier des fichiers entre le conteneur Docker et l'hôte Docker. Utilisation de la commande docker cp <container id>:/path/in/container /path/in/host
L'exemple ci-dessous utilise le docker cp
pour copier les données du conteneur my-jenkins-1 vers un emplacement d'hôte Docker. Notez que le conteneur n'a même pas besoin d'être en cours d'exécution pour exécuter cette commande avec succès.
docker cp my-jenkins-1:/var/jenkins_home ~/jenkins_backup
La démo ci-dessous montre la commande ci-dessus en action. Comme vous pouvez le voir, le répertoire de destination est automatiquement créé par la commande.
Maintenant que vous avez extrait les données Jenkins du conteneur, vous pouvez peut-être compresser et archiver l'intégralité du dossier. Vous devrez peut-être effectuer la même tâche chaque fois que vous apportez des modifications à Jenkins.
Exécuter Jenkins dans Docker avec Volume Mount
Pour rendre vos données Jenkins persistantes et cohérentes en dehors du conteneur Docker, vous devez utiliser un volume Docker .
Comme expliqué dans la section précédente, les fichiers de configuration Jenkins sont situés dans le conteneur Docker à /var/jenkins_home . Pour vous assurer que les fichiers Jenkins sont enregistrés en dehors du conteneur, vous pouvez utiliser le -v
option avec le docker run
commande.
Le code ci-dessous créera un nouveau conteneur Docker avec le nom my-jenkins-2 . Les ports 8080 et 50000 seront exposés à l'hôte. De plus, le /var/jenkins_home répertoire à l'intérieur du conteneur Docker sera monté en tant que volume sur l'hôte en tant que jenkins_home.
docker run --name my-jenkins-2 -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
Après avoir exécuté la commande ci-dessus, le nouveau conteneur Docker doit être créé et entrer dans l'état d'exécution. Vous pouvez vérifier que le conteneur est en cours d'exécution à l'aide de la commande docker ps.
Répertorier tous les conteneurs en cours d'exécution
Recherche des données Jenkins sur l'hôte Docker
Alors, où est le dossier de données Jenkins maintenant ? D'après la commande que vous avez utilisée pour créer le conteneur my-jenkins-2, le volume monté est jenkins_home . Pour savoir où se trouve le jenkins_home dans le système de fichiers l'emplacement peut être trouvé, utilisez le docker volume
commande.
La commande ci-dessous affichera les détails de jenkins_home volume sur l'hôte Docker.
docker volume inspect jenkins_home
La capture d'écran ci-dessous montre les informations sur le jenkins_home volume à la suite de l'exécution de la commande ci-dessus.
Maintenant que vous savez où trouver les données Jenkins, vous pouvez confirmer en explorant l'emplacement du point de montage. Dans cet exemple, le jenkins_home le point de montage du volume est dans /var/lib/docker/volumes/jenkins_home/_data .
Maintenant que les données Jenkins persistent en dehors du conteneur, vous pouvez sauvegarder le répertoire pour le conserver. De plus, même si le conteneur Jenkins est supprimé, les données resteront sur l'hôte Docker.
Exécuter Jenkins à l'aide de Docker Compose avec des volumes
Une autre façon d'exécuter Jenkins consiste à utiliser le docker-compose
commande. Avec Docker Compose , vous pouvez déployer une ou plusieurs instances de Jenkins, si nécessaire. Mais avant cela, vous devez créer un fichier Docker Compose pour chaque instance.
Création des fichiers Docker Compose
Par défaut, le docker-compose
la commande lit le fichier avec le nom docker-compose.yml ou docker-compose.yaml dans le même répertoire de travail où vous émettez la commande.
À l'aide de l'éditeur de texte disponible de votre choix, ouvrez un nouveau fichier vierge. Ensuite, copiez le code YAML ci-dessous, collez-le dans votre éditeur, puis enregistrez le docker-compose.yml fichier.
# docker-compose.yml
version: '3.7'
services:
jenkins:
image: jenkins/jenkins:lts
privileged: true
user: root
ports:
- 8083:8080
- 50003:50000
container_name: my-jenkins-3
volumes:
- ~/jenkins_data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
Cet article ne couvre pas l'anatomie d'un fichier Docker Compose. Vous pouvez consulter la documentation officielle de référence du fichier de composition pour mieux comprendre ce que signifie chaque paramètre dans le fichier de composition.
Mais, dans cet exemple, vous pouvez répartir les paramètres les plus importants dans les deux fichiers Docker Compose comme indiqué ci-dessous.
- image :Il s'agit de l'image de base à utiliser pour créer l'instance de conteneur Docker.
- ports :C'est ici que vous définissez le mappage de port entre l'hôte Docker et le conteneur.
- volumes :Il s'agit des volumes mappés entre l'hôte Docker et le conteneur.
- nom_du_conteneur :Il s'agit du nom que vous souhaitez attribuer au conteneur que vous créez. Dans cet exemple, le nom du conteneur est my-jenkins-3 .
Démarrage du conteneur Jenkins à l'aide de Docker Compose
Maintenant que vous avez enregistré les deux fichiers Docker Compose, vous pouvez maintenant les utiliser pour démarrer les deux instances de conteneur Jenkins Docker.
Pour démarrer le my-jenkins-3 conteneur, utilisez la commande ci-dessous. Notez que la commande ci-dessous suppose que le docker-compose.yml le fichier se trouve dans le même répertoire où vous exécutez la commande.
# Start the my-jenkins-3 container
docker-compose up -d
# Get the initial admin password
docker exec my-jenkins-3 cat /var/jenkins_home/secrets/initialAdminPassword
# Confirm the my-jenkins-3 container is running
docker ps
Le my-jenkins-3 le conteneur démarre alors et passe à l'état d'exécution, comme vous pouvez le voir ci-dessous.
Accédez à l'URL http://localhost:8083 à l'aide de votre navigateur pour accéder à Jenkins et terminer la configuration initiale.
Après avoir terminé la configuration initiale de Jenkins pour my-jenkins-3 conteneur, vous pouvez confirmer que le dossier ~/jenkins_data est rempli avec les fichiers de données Jenkins.
Étant donné que les fichiers de données Jenkins persistent sur l'hôte Docker, même si le my-jenkins-3 docker est supprimé, la configuration survivra. Pour tester davantage la persistance de la configuration Jenkins, arrêtez my-jenkins-3 conteneur en utilisant la commande ci-dessous.
docker-compose down
Notez qu'en utilisant le downer-compose down
La commande supprime automatiquement le conteneur lui-même.
Maintenant, démarrez my-jenkins-3 à nouveau en utilisant la commande ci-dessous.
docker-compose up -d
Et lorsque vous accédez à l'interface Web Jenkins, la première page que vous verrez est la page de connexion au lieu de la page de configuration initiale. Vous constaterez que la même configuration Jenkins est conservée, y compris vos identifiants de connexion.
Résumé
Dans cet article, vous avez appris à exécuter Jenkins à l'aide de Docker de différentes manières. Vous avez appris à exécuter Jenkins dans Docker avec et sans volume monté. Et vous avez appris à sauvegarder les données Jenkins de l'intérieur du conteneur vers l'hôte.
Vous avez également appris à exécuter une instance Jenkins à l'aide de Docker Compose avec des volumes mappés à l'hôte Docker. Les fichiers de données Jenkins sont ensuite enregistrés dans l'hôte Docker, ce qui rend les paramètres Jenkins persistants et cohérents même si le conteneur Docker est supprimé.
L'utilisation de Docker et Docker Compose avec des volumes vous donne la possibilité de sauvegarder et de réutiliser les données de Jenkins. Selon vous, quelle méthode d'exécution de Jenkins dans Docker utiliseriez-vous le plus ?
Lectures complémentaires
- Déploiement de votre premier conteneur avec Docker pour Windows
- Comment créer (et gérer) des volumes Docker sous Windows
- Comment installer Ubuntu 20.04 [étape par étape]