2.4.2 : La configuration du CI
Dans cette section, nous allons écrire le fichier de configuration de l'intégration continue de
Gitlab :
.gitlab-ci.yml :
Il faut tout d'abord définir l'image
docker que l'on veut utiliser :
1
|
image: gitlab-registry.in2p3.fr/cta-lapp/cours/tests/testgitlabci/base_ubuntu_ci:0.1
|
Note : Il est possible de spécifier une image différente dans les jobs que l'on définit, mais ce n'est pas nécessaire dans notre cas.
Ensuite, on indique les différentes étapes de notre intégration (sachant que chaque étape peut contenir plusieurs jobs) :
1
2
3
4
|
stages:
- BuildTestinstall
- DocCoverage
- deploy
|
La première étape permet de tester que tout fonctionne, sans changer les options de compilation :
On attache notre job à la première étape
BuildTestinstall :
1
|
stage: BuildTestinstall
|
On définie le script qui compilera, installera et testera notre projet :
1
2
3
4
5
6
7
8
9
10
11
12
|
script:
- export LD_LIBRARY_PATH=/usr/lib
- env
- mkdir -p build
- cd build
- >
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr
-DSELF_TESTS_MODE=yes
- make all
- make install
- make test
|
On peut spécifier que l'on veux lancer ce job sur toutes les branches et les tags que l'on créé. De cette manière on peut désactiver un job suivant le contexte.
1
2
3
4
|
only:
- branches
- tags
tags:
|
Le deuxième job sera lancé à la seconde étape et se chargera de la couverture des tests :
On Spécifie l'étape
DocCoverage :
Ensuite on définie le script de ce job :
Il commence de la même manière que le précédent. Il faut cependant spécifier à
cmake que l'on veut construire notre projet avec l'option
-DCMAKE_BUILD_TYPE=Coverage :
1
2
3
4
5
6
7
8
9
10
11
12
|
- export LD_LIBRARY_PATH=/usr/lib
- env
- mkdir -p build coverage
- cd build
- >
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr
-DSELF_TESTS_MODE=yes
-DCMAKE_BUILD_TYPE=Coverage
- make all
- make install
- make test
|
À la fin du script, on appele
gcovr de différente manière pour obtenir un rapport html, xml et un résumé qui sera parsé par
gitlab :
1
2
3
4
|
- cd ../coverage
- gcovr -r ../ --exclude-throw-branches --html cov_report.html --html-details
- gcovr -r ../ --exclude-throw-branches --xml Coverage.xml
- gcovr -r ../ --exclude-throw-branches
|
La concept d'
artifacts permet de sauvegarder le résultat d'un job, dans notre cas le dossier
coverage, on peut définir une date limite de sauvegarde pour l'
artifacts, ici une journée (cela permet de ne pas stocker trop d'information dans la durée, cela sera particulièrement intéressant pour le prochain job) :
1
2
3
4
|
artifacts:
paths:
- coverage
expire_in: 1d
|
Comme pour le job précédent, on peut spécifier dans quel contexte il doit être déclenché :
1
2
3
4
|
only:
- branches
- tags
tags:
|
Maintenant, nous définissons le job générant la documentation du projet qui sera lancer en même temps que le précédent. Donc il est également relié à l'étape
DocCoverage :
1
2
|
Doc:
stage: DocCoverage
|
Enuite, nous écrivons le script de ce job :
1
2
3
4
5
6
7
8
9
10
11
12
|
script:
- export LD_LIBRARY_PATH=/usr/lib
- env
- rm -fr build public
- mkdir -p build
- mkdir -p public
- cd build
- >
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr
-DDOC_MODE=yes
- make all
|
Après avoir compilé le projet
Puis, on copie la documentation dans le dossier
public qui sera définit comme
artifacts :
1
|
- scp -r doc/html/* ../public
|
On définie le dossier
public comme
artifacts :
1
2
3
4
|
artifacts:
paths:
- public
expire_in: 1d
|
Comme pour le job précédent, on peut spécifier dans quel contexte il doit être déclenché :
1
2
3
4
|
only:
- branches
- tags
tags:
|
Ce dernier job (à l'étape
deploy) va mettre en ligne l'
artifacts qu'il contient. Il doit donc s'appeler
pages, sinon il ne sera pas reconnu par
Gitlab :
Nous allons juste déplacer le dossier
coverage (du job
TestCoverage) dans
public (du job
Doc) :
1
2
|
script:
- mv coverage public/
|
Enfin, nous définissons l'
artifacts :
1
2
3
4
|
artifacts:
paths:
- public
expire_in: 1d
|
Le fichier
.gitlab-ci.yml complet :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
image: gitlab-registry.in2p3.fr/cta-lapp/cours/tests/testgitlabci/base_ubuntu_ci:0.1
stages:
- BuildTestinstall
- DocCoverage
- deploy
dailyBuildMasterAll:
stage: BuildTestinstall
script:
- export LD_LIBRARY_PATH=/usr/lib
- env
- mkdir -p build
- cd build
- >
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr
-DSELF_TESTS_MODE=yes
- make all
- make install
- make test
only:
- branches
- tags
tags:
TestCoverage:
stage: DocCoverage
script:
- export LD_LIBRARY_PATH=/usr/lib
- env
- mkdir -p build coverage
- cd build
- >
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr
-DSELF_TESTS_MODE=yes
-DCMAKE_BUILD_TYPE=Coverage
- make all
- make install
- make test
- cd ../coverage
- gcovr -r ../ --exclude-throw-branches --html cov_report.html --html-details
- gcovr -r ../ --exclude-throw-branches --xml Coverage.xml
- gcovr -r ../ --exclude-throw-branches
artifacts:
paths:
- coverage
expire_in: 1d
only:
- branches
- tags
tags:
Doc:
stage: DocCoverage
script:
- export LD_LIBRARY_PATH=/usr/lib
- env
- rm -fr build public
- mkdir -p build
- mkdir -p public
- cd build
- >
cmake ..
-DCMAKE_INSTALL_PREFIX=/usr
-DDOC_MODE=yes
- make all
- make doc
- scp -r doc/html/* ../public
artifacts:
paths:
- public
expire_in: 1d
only:
- branches
- tags
tags:
pages:
stage: deploy
script:
- mv coverage public/
artifacts:
paths:
- public
expire_in: 1d
|
Vous pouvez le télécharger
ici.