Avant de commencer, vérifiez que vous pouvez utiliser votre compte Gitlab avec une connection SSH
Voici les exercices que nous avons fait en direct que vous pouvez refaire. Ils peuvent être légèrement différents de ceux réalisés en direct.
Faire uniquement avec les shared runners GitLab (Linux). Chaque TP contient les objectifs, les fichiers à créer, le .gitlab-ci.yml, ce que l’on doit voir pour valider.
shared runners GitLab
.gitlab-ci.yml
Voici la création d’un Projet “premierPipeline” sur GitLab :
Maintenant, il faut créer votre fichier .gitlab-ci.yaml sur votre machine en local. Nous pourrions le faire directement sur GitLab mais nous allons faire un push depuis notre répertoire de pseudo projet vers notre repository GitLab.
.gitlab-ci.yaml
push
stages: # Liste des étapes (stages) avec les "jobs" - build - test - deploy # Ce "job" est associé au stage "build", il est lancé en premier build-job: stage: build script: - echo "Compilation du code..." - echo "Compilation complete." # Ce "job" est associé au stage "test" unit-test-job: stage: test # Il démarre seulement lorsque le job du "build" est "successful" ! script: - echo "Lancement des tests unitaires... ça prend 30 secondes, patientez" - sleep 30 - echo "Code est couvert à 90%" # Ce "job" est aussi associé au stage "test" lint-test-job: stage: test # Il se lancera en même temps que le "unit-test-job" (en parallèle). script: - echo "Linter du code... amélioration du code (statique) avec une durée de 10 secondes" - sleep 10 - echo "Pas de code à améliorer ;)" # Ce "job" est associé au stage "deploy". deploy-job: stage: deploy # Il sera lancé uniquement si les 2 jobs du stage "test" sont OK. environment: production script: - echo "Deploiement de l'application..." - echo "Votre application est déployée avec succès, youpi !"
Ensuite, vous allez pusher votre repo local vers votre projet/repo Gitlab
pusher
git init --initial-branch=main --object-format=sha1 git remote add origin git@gitlab.com:Phil75013/premierpipeline.git git add . git commit -m "Initial commit" git push --set-upstream origin main
puis le push
On constate qu’il y a bien notre fichier yaml .gitlab-ci.ymlprésent dans notre repository GitLab.
il reste à l’exécuter soit depuis notre machine locale soit sur GitLab directement !
On constate que tout est ok le premier stage/job est passed
Dans “Jobs” on voit tous les jobs du pipeline en ordre décroissant, le plus récent étant le premier (deploy).
Si on va dans “Jobs”, on en sélectionne un, le premier par exemple, et l’on voit le processus complet relatif à notre fichier de pipeline :
Votre pipeline est terminé (Passed / Failed)
Le bouton “Retry” n’apparaît que si un ou plusieurs jobs ont échoué !
Si tout ce passe bien (tous les jobs sont verts (Passed), GitLab n’ajoute pas de bouton pour relancer le Pipeline depuis l’interface GitLab.
Voici une manière de le relancer :
Aller dans CI/CD –> Pipelines –> New pipeline pour le relancer manuellement.
Relancer le pipeline complet (même s’il est vert) : “Build –> Pipelines –> New pipeline”
La branche main Puis cliquer sur Run pipeline, c’est exactement le même effet qu’un Retry All.
Lancer depuis votre répertoire de votre projet sur votre machine :
git init --initial-branch=main --object-format=sha1 git remote add origin git@gitlab.com:Phil/badpipeline.git git add . git commit -m "Initial commit" git push --set-upstream origin main
Quelques explications des commandes si vous n’avez pas l’habitude :
git init --initial-branch=main --object-format=sha1 :
git init --initial-branch=main --object-format=sha1
git init
.git/
--initial-branch=main
master
--object-format=sha1
git remote add origin git@gitlab.com:Philippe/badpipeline.git :
git remote add origin git@gitlab.com:Philippe/badpipeline.git
git remote add
origin
git@gitlab.com:Philippe/badpipeline.git
Permet de pousser vos commits vers le dépôt distant appelé origin
Ici, c’est juste pour voir les URLs de fetch et push :
git remote -v
git add . :
git add .
git add
.
puis l’habituel git commit -m "Initial commit"
git commit -m "Initial commit"
et notre git push :
git push --set-upstream origin main :
git push --set-upstream origin main
git push
--set-upstream origin main
main
origin/main
Résultat attendu :
Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Writing objects: 100% (8/8), 1.24 KiB | 1.24 MiB/s, done. Branch 'main' set up to track remote branch 'main' from 'origin'.
Après avoir écrit votre fichier gitlab-ci.yml dans le répertoire de votre projet :
gitlab-ci.yml
Il y a volontairement une erreur dans les commandes du unit-test-job pour provoquer un arrêt du pipeline
unit-test-job
stages: # Liste des étapes (stages) avec les "jobs" - build - test - deploy # Ce "job" est associé au stage "build", il est lancé en premier build-job: stage: build script: - echo "Compilation du code..." - echo "Compilation complete." # Ce "job" est associé au stage "test" unit-test-job: stage: test # Il démarre seulement lorsque le job du "build" est "successful" ! script: - echos "Lancement des tests unitaires... ça prend 30 secondes, patientez" - sleep 30 - echos "Code est couvert à 90%" # Ce "job" est aussi associé au stage "test" lint-test-job: stage: test # Il se lancera en même temps que le "unit-test-job" (en parallèle). script: - echo "Linter du code... amélioration du code (statique) avec une durée de 10 secondes" - sleep 10 - echo "Pas de code à améliorer ;)" # Ce "job" est associé au stage "deploy". deploy-job: stage: deploy # Il sera lancé uniquement si les 2 jobs du stage "test" sont OK. environment: production script: - echo "Deploiement de l'application..." - echo "Votre application est déployée avec succès, youpi !"
Voici notre pipeline en cours d’éxécution :
Vous constatez bien un arrêt du processus sur le unit-test-job qui est Failed jobsdu stage test
Failed jobs
test
Il vous suffit de cliquer sur le job concerné pour arriver sur les logs d’exécution et constater d’où vient l’erreur :
Vous allez sur “Pipeline editor”
et vous corrigez les 2 erreurs dans les commandes :
Vous faites un commit et le pipeline est relancé ! Et voyons le résultat :
Tout est OK ! Pensez à faire un git pull depuis votre machine.
git pull
But : déclencher un pipeline et voir les logs.
Fichiers .gitlab-ci.yml
stages: - salut hello-message: stage: salut script: - echo "Salut depuis GitLab CI" - uname -a - ls -la
Validation : pipeline vert, logs avec “Salut depuis GitLab CI” et Linux.
Bonus : ajouter rules: pour ne lancer que sur un push.
rules:
rules: - if: '$CI_PIPELINE_SOURCE == "push"'
Pour les Rules et les Tags, on verra cela dans un autre cours/tp.