Objectif
L'objectif de cette séance est de vous familiariser avec l'utilisation d'un moteur de production, ici Gradle, dans un pipeline
PARTIE 1 : Initialisation du projet : Gradle / IDE / GitLab
Exercice 1:
Pour commencer, vous allez créer un projet à l'aide de Gradle, quelque part dans votre arborescence.
Pour ce faire, dans un terminal, positionnez-vous dans un répertoire appelé Gradle_CICD, créé pour l'occasion, et tapez la commande gradle init.
Choisissez application pour le type du projet -> langage Java -> subprojects : no -> syntaxe groovy pour le DSL des fichiers de build, de préférence, -> Junit Jupiter pour les tests.
Exercice 2:
Vérifiez que le projet fonctionne bien, tout d'abord en ligne de commande, en tapant, dans le répertoire du projet, la commande ./gradlew run
Exercice 3:
Importerez le projet dans votre IDE favori et vérifierez que tout fonctionne, avec le squelette de base : c'est un Hello World. Si vous utilisez Eclipse, n'oubliez de modifier préalablement le fichier build.gradle du dossier app afin de rajouter le plugin eclipse pour gradle. Une fois fait, ajouter le plugin Eclipse appelé EGradle, puis faites l'importation du projet : 'Import a gradle root project with all subprojects'.
Exercice 4:
Créez maintenant dans GitLab un projet vide ayant pour nom Gradle_CICD, préfixé par votre nom de famille, par exemple Dupont_Gradle_CICD.
Exercice 5:
Synchronisez votre projet local avec le dépôt distant, comme vous l'avez fait dans le premier TP.
Initialisation d'un pipeline utilisant Gradle
Exercice 6:
Dans l'interface de GitLab, à gauche, allez dans la section build, puis pipelines. Vous devriez tomber sur une page intitulée "Get started with GitLab CI/CD". Sélectionnez le template pour Gradle.
Exercice 7:
Testez le résultat depuis l'interface de GitLab en lançant le pipeline et observez les sorties obtenues.
Exercice 8:
Vous devriez constater un certains nombres de défauts par rapport à ce qui a été dit en cours (section 2 notamment). Corrigez donc le script du pipeline, au fur et à mesure, en suivant pas à pas les diapositives de la section 2 du cours afin d'appeler les bonnes commandes de Gradle depuis le script de CI/CD, dans un environnement d'exécution entièrement contrôlé.
Exercice 9:
Au final, vous ne devez plus avoir aucun warning dans les sorties (hormis un warning pour le job de build et qui concerne le cache). Régler notamment le projet pour qu'il utilise le JDK 17. Vérifiez que c'est bien le cas.
Gestion du cache depuis le script de CI/CD
Exercice 10:
Comme nous l'avons vu en cours, la gestion du cache est un point-clé pour l'efficacité d'un pipeline. Relisez la partie du cours correspondante.
Exercice 11:
La section key, du bloc cache sert à donner un identifiant à un cache pour qu'il puisse être utilisé dans d'autres jobs. Pour bien vous en rendre compte, essayez de créer un job fictif qui remplira un cache, avec un identifiant, dans lequel seront mis des fichiers créés par le job, peu importe le contenu des fichiers. Ensuite, essayez d'accéder à ces fichiers depuis un autre job.
Exercice 12:
De la même manière, testez les différentes stratégies de gestion d'un cache que nous avons vues en cours, push/pull, pull, push, en créant des jobs spécifiquement pour l'occasion afin de voir qu'on obtient bien le comportement attendu.
Déploiement sur un site Web
Exercice 13:
Testez le déploiement sur un site Web (cf. TP1) d'une archive créée par Gradle (cf. diapo 39 du cours). Pour information, le fichier jar obtenu avec Gradle se trouve dans le dossier 'app/build/libs'. D'autres formats se trouvent dans le dossier distributions qui se trouve à côté.
Exercice 14:
Vérifiez le résultat depuis votre site Web personnel de l'IUT.
Déploiement et exécution d'une image Docker V1
Exercice 15:
Testez le déploiement d'une image Docker sur le dépôt Harbor de l'IUT, cf diapo 40 pour la première version du docker file.
Exercice 16:
Récupérer l'image sur votre ordinateur dans Docker avec un 'docker pull'. Testez son exécution en ligne de commande ou dans l'interface de Docker desktop.
Déploiement et exécution d'une image docker V2
Exercice 17:
Même chose en modifiant le Dockerfile : cf. diapo 44. Ce nouveau code suppose de modifier le script de CI de façon appropriée. Prenez le temps de bien comprendre l'ensemble des lignes de code de ces deux fichiers.
Déploiement et exécution d'une image docker V3
Exercice 18:
Essayez d'obtenir une image la plus petite possible, comme expliqué dans la dernière partie du cours.
Aller plus loin
Exercice 19:
Si vous avez terminé, n'hésitez pas à créer un nouveau projet GitLab pour étudier les autres templates de pipeline disponibles : php, nodejs, etc.
Puis prenez aussi le temps d'étudier les différents mots-clés et variable décrites dans la documentation de GitLab : des liens se trouvent dans le premier cours.