Iintialisation du conteneur Jenkins
Pour commencer, nous devons récupérer l'image officielle de Jenkins et lancer le conteneur. Nous allons mapper les ports et configurer un volume persistant pour les données.
# Télécharger l'image Docker de Jenkins
docker pull jenkins/jenkins:lts
# Lancer le conteneur avec les configurations réseau et de stockage
docker run -d \
--name jenkins-server \
--restart=always \
-u root \
-p 9090:8080 \
-p 9091:50000 \
-v /opt/jenkins_data:/var/jenkins_home \
jenkins/jenkins:lts
Une fois le conteneur démarré, accédez à l'interface web via http://<votre-ip>:9090. Récupérez le mot de passe administrateur initial en exécutant :
cat /opt/jenkins_data/secrets/initialAdminPassword
Configuration initiale et installation des plugins
Saisissez le mot de passe récupéré pour débloquer l'assistant d'installation. Choisissze l'option pour installer les plugins recommandés. Une fois l'installation terminée, créez votre premier compte administrateur et configurez l'URL de l'instance Jenkins.
Configuration de la langue
Pour modifier la langue de l'interface, rendez-vous dans Manage Jenkins > Plugins > Available plugins. Recherchez et installez le plugin Locale. Redémarrez Jenkins si nécessaire.
Ensuite, allez dans Manage Jenkins > System. Recherchez la section Locale, définissez le Default Language sur fr_FR, et cochez l'option pour forcer cette langue pour tous les utilisateurs. Sauvegardez les modifications.
Pipeline de déploiement pour une applictaion .NET Core
Créez un nouveau projet de type Freestyle dans Jenkins. Dans la section Build Steps, ajoutez une étape Execute shell pour gérer le cycle de vie de l'application .NET Core via Docker.
Voici un script optimisé pour générer une nouvelle image, nettoyer les anciens conteneurs et déployer la nouvelle version :
#!/bin/bash
# Génération d'un identifiant unique basé sur l'horodatage
BUILD_TAG=$(date +%Y%m%d_%H%M%S)
APP_NAME="dotnet-web-api"
echo "Construction de l'image Docker avec le tag : $BUILD_TAG"
# Compilation de l'image Docker et création du tag latest
docker build -t $APP_NAME:$BUILD_TAG .
docker tag $APP_NAME:$BUILD_TAG $APP_NAME:latest
echo "Nettoyage des conteneurs obsolètes..."
# Récupération de l'ID du conteneur existant s'il y en a un
EXISTING_CONTAINER=$(docker ps -q -f name=$APP_NAME)
if [ -n "$EXISTING_CONTAINER" ]; then
echo "Arrêt et suppression du conteneur $EXISTING_CONTAINER"
docker stop $EXISTING_CONTAINER
docker rm $EXISTING_CONTAINER
fi
echo "Démarrage du nouveau conteneur..."
# Lancement de la nouvelle version
docker run -d \
--name $APP_NAME \
-p 8000:80 \
--restart unless-stopped \
$APP_NAME:$BUILD_TAG
# Vérification des logs pour s'assurer du bon démarrage
docker logs --tail 20 $APP_NAME