Gitlab + CI Inria (Jenkins)
Table of Contents
- 1. pré-requis
- 2. Plan
- 3. Ce que cette présentation n'abordera pas (mais ça peut être l'objet d'un
- 4. Récuperer un projet Gitlab sur ses esclaves
- 5. Activer un déclic «post-commit» pour lancer la compilation sur Jenkins
- 6. Tester merge request via le greffon "Gitlab Merge Request Builder"
- 7. Afficher un rapport de test ou de compilation avec un badge dans le README.md
- 8. Utiliser succintement les pipeline Jenkins
Salut à toi ! Bienvenue dans la bidouille !
Ce fichier est disponible à http://sed.bordeaux.inria.fr/org/gitlab-ci.org
1 pré-requis
- avoir déjà configurer un projet CI sur la plate-forme nationale
- connaître un peu Gitlab ou la forge
2 Plan
- récuperer un projet Gitlab sur ses esclaves
- activer un déclic «post-commit» pour lancer la compilation sur Jenkins
- afficher un rapport de test ou de compilation avec un badge dans le README.md
- utiliser succintement les «pipelines» Jenkins
3 Ce que cette présentation n'abordera pas (mais ça peut être l'objet d'un
autre MDB)
- les outils CI de Gitlab (orchestration coté Gitlab)
4 Récuperer un projet Gitlab sur ses esclaves
4.1 projet public
Pas de problème d'accès au dépôt
ssh ci@vm_name.ci
git clone public_project.git
devrait fonctionner sans problème
4.2 projet privé
Dans le cas d'un projet privé l'esclave ci doit pouvoir cloner le projet git.
On utilise pour cela une clef de déploiement (clef SSH), cf. FAQ du wiki sur ci.
- On génère une clef SSH qui sera dupliquée (à faire à la main nécessairement?) sur chaque esclave associé aux jobs Jenkins ayant besoin de cloner le projet privé hébergé sur Gitlab.
- La clef publique est à copier dans la configuration du projet
Gitlab à la main. Dans l'interface Gitlab, au niveau du projet
- clic sur l'engrenage à droite (paramètres du projet),
- clic sur "Deploy keys",
- mettre un titre arbitraire à la clef ssh,
- copier la clef publique qui sera utilisée par les esclaves CI.
Figure 1: Page Deploy keys
5 Activer un déclic «post-commit» pour lancer la compilation sur Jenkins
Dans Jenkins :
- installer l'extension "GitLab Plugin"
- créer un job, par exemple un projet free-style
- dans la section Gestion de code source, cocher Git et
ajouter l'URL de votre dépôt Git
- par exemple git@gitlab.inria.fr:fuentes/testgitlabCI.git
- ignorer le message d'erreur, si vous avez bien déployé la clef SSH sur les esclaves et sur GitLab l'accès au dépôt fonctionnera
- dans la section Gestion de code source, cocher Git et
ajouter l'URL de votre dépôt Git
Figure 2: Gestion de code source
- dans la section Ce qui déclenche le build (triggers), cocher Build when a change is pushed to GitLab. et copier l'adresse suivant GitLab CI Service URL:
Figure 3: Ce qui déclenche le build
- ensuite aller dans Avancé…
- et génerer un Secret token (cliquer sur Generate)
- puis copier le code
Figure 4: Secret token
Dans GitLab :
- aller dans les paramètres du projet (engrenage à droite) puis dans Integrations
- ici coller l'adresse GitLab Service URL précédemment copiée
- ainsi que le Secret token
Figure 5: Webhooks GitLab
- cocher les cases évènements déclencheur de build qui vous intéressent
Grâce à ce mécanisme le job Jenkins associé sera déclenché dès lors qu'un des évènements choisi dans Trigger aura lieu.
6 Tester merge request via le greffon "Gitlab Merge Request Builder"
Dans Jenkins :
- installer le greffon "Gitlab Merge Request Builder"
- configurer cf. https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin, section Installation
- créer un job Jenkins
cf. https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin,
section Creating a Job
- dans la partie Ce qui déclenche le build en plus de cocher et paramétrer Gitlab Merge Requests Builder, penser à cocher aussi Build when a change is pushed to GitLab et paramétrer comme précedemment en générant un token associé à ce job qui sera ensuite copié dans le partie Integration -> webhooks de Gitlab. Ajouter bien "merge request events" à la liste des évènements déclencheurs
7 Afficher un rapport de test ou de compilation avec un badge dans le README.md
- via le greffon Gitlab, on a accès à de nouvelles fonctionnalités dans la section Add Post-build action, on peut selectionner Publish build status to GitLab commit, ce qui informera Gitlab lors d'une compilation réussie.
- on peut ajouter un badge dans le README.md avec une ligne du genre
[![Build status](https://gitlab.inria.fr/fuentes/testgitlabCI/badges/master/build.svg)](https://gitlab.inria.fr/fuentes/testgitlabCI/commits/master)
8 Utiliser succintement les pipeline Jenkins
- avec Jenkins >=2.x , on peut faire aussi le même travail en nettement moins de clics , en utilisant le greffon pipeline qui se présente sous la forme
Figure 6: Pipeline script
avec une syntax Groovy
node {
stage 'Checkout'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [],
submoduleCfg: [], userRemoteConfigs: [[url: 'git@gitlab.inria.fr:fuentes/testgitlabCI.git']]])
gitlabBuilds(builds: ["configure","build", "test"]) {
stage "configure"
gitlabCommitStatus("configure") {
sh 'mkdir -p build && cd build && cmake ..'
}
stage "build"
gitlabCommitStatus("build") {
sh 'cd build && make '
}
stage "test"
gitlabCommitStatus("test") {
sh 'cd build && ctest'
}
}
}
- pour découvrir la syntaxe Groovy associée à une étape, on peut utiliser l'outil Pipeline Syntax après compilation on obtient des comptes-rendus agréables cotés Jenkins
Figure 7: Pipeline output