Gitlab + CI Inria (Jenkins)

Table of Contents

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.

  1. 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.
  2. 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.

deploy-keys.png

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

git-url.png

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:

build-trigger.png

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

secret-token.png

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

webhook-gitlab.png

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 :

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

pipeline.png

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

outPipeLine.png

Figure 7: Pipeline output

Date: 26 mars 2017

Author: Fuentes Marc, Pruvost Florent

Created: 2019-11-15 or. 18:49

Validate