D’hudson, l’outil le plus connu pour effectuer des intégration et livraison continues s’est transformé voilà quelques années en Jenkins.
Jenkins, c’est un outil formidable, totalement gratuit et open source. Il vous permet de paramétrer votre intégration continue, vos livraisons continues.
Et si nous l’utilisions en local, avec docker ? Ca serait merveilleux, non ?
Une première tentative avec docker et jenkins
Quand on travaille avec docker, nous devons prendre comme réflexe de bien choisir notre image. Chaque image peut être récupérée et construite en local.
De plus, point fort et merveilleux avec docker, on peut construire une image docker en local, faite de plusieurs conteneur récupérés : c’est l’assemblage de container !
Images venant du hub des images
Nous avons le choix entre deux images à récupérer :
- jenkins de base, celle à priori officielle
- jenkins dite totalement fonctionnelle, ici, officielle aussi, mais mise à jour régulièrement.
Bon déjà, on voit ici la confusion … laquelle choisir …
Et puis, il y a un point qui peut être bien bien bloquant : le système d’exploitation de l’image !
Les actions pour installer lancer jenkins en local
- Récupérer l’une des deux images, mettons : docker pull jenkins/jenkins
- Lancement de docker pour exécuter le container en local : docker run -d -p 8080:8080 -p 50000:50000 -v C:\Users\evan\jenkins:/var/jenkins_home jenkins/jenkins
point important ici, nous utilisons le –v, qui permet de sauvegarder les données de jenkins sur notre pc
le –d lance l’exécution en tâche de fond
Que ce soit pour l’une ou l’autre image, la récupération et le lancement en local se passe sans encombre … si vous ne souhaitez pas :
- installer dotnet dans le container créé
- utiliser l’extension Blue Ocean, qui paraît pourtant très prometteuse pour améliorer les livraisons continues
Zoom sur Blue Ocean
De tous nos essais, nous n’avons pas encore réussi à bien faire fonctionner Blue Ocean, avec :
- un pc windows (une surface windows 10 pro)
- un projet simple sous github
- une seul étape de build
- une seule branche dans le pipeline des builds
Ah oui, pour avoir Blue Ocean, vous devez aller dans les extensions de jenkins, une fois installé. Et cocher tout ce qui a rapport à Blue Ocean.
Ou bien utiliser une image avec jenkins et Blue Ocean de pré-installée.
Bon pour nous, même avec cette astuce, rien n’a changé : Blue Ocean buggue et ne veut pas lancer la récupération de notre espace de travail github …
Test avec un projet freestyle
Dans jenkins, à la place de Blue Ocean, vous pouvez aussi utiliser les projets de base, eux qui existent depuis les débuts de jenkins.
Prenons par exemple, le projet FreeStyle.
Ici, vous pouvez, grâce à l’extension Github récupérer votre projet Github et lancer un pull en local, dans votre container !
Tout fonctionne bien ici !
Un gros problème arrive : utiliser dotnet cli
Nous souhaitons compiler notre projet dotnet depuis notre container jenkins.
Or, le container est sous linux Alpine. Et même si l’installation de dotnet est possible depuis un Alpine … elle est douloureuse, et bugguée !
Changement de stratégie : construction d’une image personnalisée
Pour pallier à ce problème, nous avons fait … l’inverse :
-
- Création d’un fichier DockerFile.
Vous pouvez le récupérer pour une configuration dotnet jenkins - Construction de notre image grâce au fichier DockerFile
Avec la commande (il faut se placer dans le dossier où se trouve le fichier DockerFIle):
- Création d’un fichier DockerFile.
docker build –t jenkinsdotnet .
- Exécution de notre container depuis notre image personnalisée.
Et là, au miracle, tout fonctionne !
Installation de nodejs et npm pour installer TypeScript
Enfin, notre projet contenant et du dotnet et de l’angular, nous avons besoin d’installer TypeScript dans le docker.
Deux choix s’offrent à nous :
- Mettre à jour le DockerFile pour l’inclure dans la construction de l’image
- L’installer depuis le container créé et exécuté.
Nous avons choisi l’option deux, en nous connectant en sh à notre container :
docker exec -u root -t -i container_id /bin/bash
Et lancer les commandes suivantes :
And voilà, tout est installé et prêt pour les prochaines étapes pour notre projet Angular / dotnet core !
Nous reviendrons très prochainement sur la suite de nos aventures avec jenkins, dotnet et Angular.