Déployer Jenkins sur AWS
Jenkins est à mon avis l’outil de référence quand on parle d’intégration continue et de déploiement continu.
Il commence toutefois à être concurrencé par GitHub Actions d’une part et par les outils proposées par les fournisseurs de Cloud d’autre part. On peut citer par exemple les services CodePipeline et CodeDeploy pour le cas d’AWS.
Ajoutons à cela qu’il est parfois difficile de trouver une machine que l’on peut dédier pour héberger un serveur Jenkins.
Il se trouve qu’il est possible de déployer un Jenkins sur AWS rapidement et dans certains cas cela ne vous coûtera rien !
Avertissement sur les coûts AWS
Il est envisageable de n’utiliser que le “free tiers” d’Amazon pour déployer un serveur Jenkins. En effet un utilisateur nouvellement inscrit bénéficie de 750 heures d’instances EC2 de type t2 micro pendant 12 mois. Je tiens à vous avertir qu’il est aisé de sortir de cette offre “free tiers” sans s’en rendre compte.
Par exemple en déployant plusieurs instances micro dans différentes régions. Pensez à vérifier votre consommation fréquemment et/ou à paramétrer une alerte dans votre budget AWS. Je ne saurais être tenu responsable de vos factures exorbitantes en fin de mois !
Rappels sur le service EC2
Maintenant que le disclaimer est posé et avant d’attaquer le vif du sujet je vous propose de revoir brièvement ce qu’est le service EC2.
EC2, aussi connu sous le nom de Elastic Compute Cloud, est un service qui permet de déployer des machines virtuelles dans le cloud d’Amazon. Ces machine virtuelles sont appelées des instances.
Ces instances se basent sur des images préconfigurées, les AMIs (Amazon Machine Images). Il possible de choisir un type d’instance, c’est à dire une combinaison de CPU, mémoire et IOs. Il est aussi possible de configurer de nombreux autres aspects (disque, mise en réseau, sécurité, etc…)
Création d’une instance EC2
Pour démarrer une instance EC2 il vous faudra tout d’abord vous logger dans la console AWS.
Cette console est disponible sur : https://console.aws.amazon.com
Si vous n’avez pas de compte vous pourrez alors en créer un.
Choisissez ensuite le service EC2, puis cliquez sur “Démarrer une instance”.
Vous devriez voir un écran qui ressemble à ceci :
Sur cet écran vous pouvez choisir votre image de départ, le fameux AMI.
Choisissez Amazon Linux 2 en cliquant sur le bouton “Sélectionner”
Vous devriez avoir un nouvel écran qui s’affiche :
Sur cet écran vous pouvez choisir votre type d’instance.
Choisissez “t2.micro” et cliquez sur “Suivant : Configurer les détails de l’instance”
Vous devriez avoir un nouvel écran qui s’affiche :
Sur cet écran vous pouvez choisir diverses options liées à la facturation (instances spots, instances réservées) ou à la sécurité (IAM role).
Laissez toute les options par défaut et saisissez dans la partie données utilisateur le script suivant:
#!/bin/bash
yum update -y
yum install java-1.8.0-devel -y
yum install git -y
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins -y
service jenkins start
chkconfig --add jenkins
Ce script sera exécuté au démarrage de l’instance et permet d’installer un JDK, Git ainsi que le serveur Jenkins. Il configure aussi le démarrage de Jenkins à chaque fois que l’instance redémarre.
Cliquez sur “Suivant : Ajouter le stockage”, laissez les options par défaut.
Cliquez sur “Suivant : Ajouter des balises”, laissez les options par défaut.
Cliquez sur “Suivant : Configurer le groupe de sécurité”.
Vous devriez avoir un nouvel écran qui s’affiche :
Sur cet écran vous pouvez configurer le groupe de sécurité de votre instance. Un groupe de sécurité fonctionne comme un firewall et permet d’autoriser le trafic vers ou depuis l’instance. Pour se faire on spécifie un port TCP ainsi qu’une plage d’adresse IP en utilisant la notation de bloc CIDR.
Dans notre cas nous souhaitons ouvrir le port 22 pour le SSH et le port 8080 pour le serveur Jenkins.
Sélectionnez “Créez un nouveau groupe de sécurité” puis changez le nom du groupe en “jenkins-security-group”. Le port 22 est normalement déjà configuré, rajoutez le port 8080 en cliquant sur “Ajouter une règle”.
Cliquez ensuite sur “Vérifier et lancer”.
Vous devriez avoir un nouvel écran qui s’affiche :
Cliquer sur “Lancer”.
Vous devriez avoir un nouvel écran qui s’affiche :
Cet écran vous permet de configurer la paire de clés qui sera utilisée pour se logger sur l’instance via SSH.
Sélectionnez “Créer une nouvelle paire de clés” et saisissez le nom “jenkins”.
Cliquez ensuite sur “Télécharger une paire de clés”.
Conservez précieusement ce fichier car vous ne pouvez le télécharger qu’une seule fois.
Une fois la paire de clés téléchargée vous pouvez cliquer sur “Lancer des instances”.
Si vous retournez sur la vue d’affichage des instances, vous devriez voir votre instance en cours de création :
Configuration du serveur Jenkins
Une fois l’instance créée il vous faudra attendre quelques minutes pour qu’elle soit démarrée. Sur l’écran d’affichage des instances sélectionnez votre instance et copier la valeur du champ DNS public (IPv4) (en bas à droite).
Ouvrez un nouvel onglet de votre navigateur et collez cette valeur suivie du port 8080, par exemple http://ec2-35-180-211-169.eu-west-3.compute.amazonaws.com:8080
Vous devriez voir une page similaire à :
Ouvrez un terminal et rendez-vous dans le répertoire où vous avez téléchargé la paire de clefs. Ensuite il faut vous logger dans l’instance via SSH :
ssh ec2-user@ec2-35-180-211-169.eu-west-3.compute.amazonaws.com -i jenkins.pem
Vous obtiendrez peut-être ce message d’erreur :
Permissions 0644 for 'jenkins.pem' are too open.It is recommended that your private key files are NOT accessible by others.
Dans ce cas changez d’abord les permissions du fichier jenkins.pem :
chmod 400 jenkins.pem
Une fois loggé dans l’instance EC2 tapez la commande suivante :
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Copiez le résultat obtenu et collez le dans votre navigateur, au niveau du champ “Mot de passe administrateur”.
Vous allez être dirigé vers un nouvel écran, choisissez d’installer les plugins par défaut :
Choisissez ensuite un nom d’utilisateur et un mot de passe pour l’administrateur et validez.
Sur l’écran suivant laissez la valeur par défaut pour l’URL de Jenkins et cliquez sur “Sauver et terminer”.
Configuration des outils
Il va ensuite falloir configurer les outils qui vont être utilisées dans vos pipelines.
Dans notre exemple ils sont au nombre de trois : Java, Git et Maven.
Pour Java il va falloir renseigner le répertoire d’installation du JDK :
Pour la configuration de Git il n’y a rien à modifier. Je constate qu’un avertissement est affiché sur la page de configuration des outils, mais tout fonctionne correctement par la suite.
Enfin il faut rajouter une installation de Maven que vous nommerez “M3” :
Création d’un Pipeline
Notre serveur est enfin prêt, vous allez pouvoir vous amusez !
Cliquez sur “créer un nouveau job”, saisissez un nom pour votre job, sélectionnez “pipeline” et cliquez sur OK.
Dans la nouvelle page qui s’affiche descendez tout en bas, puis saisissez le code suivant dans le champ pipeline :
Cliquez sur “Sauver”.
Vous pouvez maintenant lancer votre premier pipeline :
Félicitations votre serveur Jenkins est installé et vous avez réussi à exécuter votre pipeline !
Notez bien que la sécurité est pour l’instant assez faible et je vous conseille de blinder votre installation si vous souhaitez l’utiliser au quotidien.
J’espère que cet article vous a plu !
N’hésitez pas à me faire part de vos commentaires ou questions en bas de cet article ou en m’envoyant un message sur LinkedIn :
http://www.linkedin.com/in/jbleduigou/en.
Cet article a initialement été publié sur Medium.