Sign in Join
Wiki copytemporary

Jenkins/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Jenkins/fr

OldNewLine
1+# Généralités
2+
3+[Jenkins](https://fr.wikipedia.org/wiki/Jenkins_(logiciel)) est un serveur d'intégration continue qui peut être utilisé pour construire automatiquement et tester des projets basé sur des commits vers votre gestionnaire de version.
4+
5+Cet article décrit comment installer/régler Jenkins pour construire automatiquement FPC quand un commit survient dans SVN. Vous pouvez bien sûr adapter des instructions à vos propres projets.
6+
7+# Réglage de Jenkins
8+
9+Une version possible à utiliser est Turnkey Linux Jenkins sur Debian 6.0.5 (Squeeze) ; cette article est testé avec Jenkins 1.464.
10+
11+De quelques façon que vous installiez Jenkins, assurez-vous que le plugin SVN est activé.
12+
13+# Réglage du compilateur de ressource
14+
15+Au moins les paquets Debian FPC n'installent pas un [[Lazarus Resources/fr|compilateur de ressource]], qui est demandé dans la section ci-dessous.
16+
17+``` bash
18+# Get resource compiler, not provided by fpc 2.6 packages:
19+apt-get install mingw32-binutils
20+# symlink:
21+ln -s /usr/bin/i586-mingw32msvc-windres /usr/bin/windres
22+```
23+
24+# Réglage du pilote de base de données
25+
26+Pour tester les connections de base de données/l'écriture des résultats dans les base de données, assurez-vous que les pilotes de base de données du système d'exploitation/pilotes de connexion pertinents sont installés, p.ex. :
27+
28+``` bash
29+apt-get install libfbembed2.5 firebird2.5-super firebird2.5-dev \
30+postgresql-client libpq-dev \
31+freetds-bin freetds-dev \
32+mysql-client libmysqlclient-dev \
33+libsqlite3-0 libsqlite3-dev \
34+unixodbc unixodbc-dev tdsodbc #adjust to taste/distribution
35+# we install the -dev packages so we get the correct driver names for older FPC versions (e.g. libfbclient.so.2.5 instead of libfbclient). Alternatively: symlink these or specify explicit .so names in any code using databases
36+#freetds should pull in unixodbc, but we specify it explicitly.
37+#Strangely, on Debian, we need to explicilty specify tdsodbc to get the actual FreeTDS ODBC driver!?
38+```
39+
40+# Réglages des travaux
41+
42+Utilisez l'écran de travail par lot pour définir la source svn du tronc FPC ou la branche que vous voulez utiliser (p.ex. <http://svn.freepascal.org/svn/fpc/trunk>).
43+
44+Définissez 'Use svn update as much as possible'.
45+
46+La scrutation (*polling*) toutes les 5 minutes pourrait être un bon réglage. De manière alternative, vous pouvez définir votre propre serveur SVN et écrire un *commit hook script* pour cela. Cela amènera à cette entrée :
47+
48+``` bash
49+# every 20 minutes
50+*/20 * * * *
51+```
52+
53+# Tâche de fond : la construction normale & problèmes
54+
55+> **Note:** Cette section est incluse pour la complétude ; les problèmes avec le fpc.cfg global au système et le tronc courant FPC (oct. 2012) peut rendre l'utilisation de fpcup plus facile. Voir plus bas pour cela.
56+
57+## Réglage de FPC stable
58+
59+Installez les binutils + le compilateur de ressource + FPC stable - pour quelques raison, les paquets debian ne tirent pas les dépendances requises :
60+
61+``` bash
62+apt-get install build-essential mingw32-binutils
63+# now make an easier name for the resource compiler; adjust to your specific version
64+# you could also adjust -FC<resourcecompilername> in /etc/fpc.cfg
65+ln -s /usr/bin/i586-mingw32msvc-windres /usr/bin/windres
66+
67+#fpc would get old FPC 2.4 on this Debian Squeeze=> symptom in Jenkins build log:
68+#generic.inc(2505,13) Fatal: Internal error 8
69+#Fatal: Compilation aborted
70+#make[7]: *** [system.ppu] Error 1
71+
72+#get stable compiler (2.6 at time of writing); we're on a 32 bit system:
73+cd /root
74+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-compiler-2.6.0_2.6.0-0_i386.deb/download
75+mv download fp-compiler-2.6.0_2.6.0-0_i386.deb
76+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-compiler_2.6.0-0_i386.deb/download
77+mv download fp-compiler_2.6.0-0_i386.deb
78+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-units-rtl_2.6.0-0_i386.deb/download
79+mv download fp-units-rtl_2.6.0-0_i386.deb
80+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-units-rtl-2.6.0_2.6.0-0_i386.deb/download
81+mv download fp-units-rtl-2.6.0_2.6.0-0_i386.deb
82+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-units-i386-2.6.0_2.6.0-0_i386.deb/download
83+mv download fp-units-i386-2.6.0_2.6.0-0_i386.deb
84+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-units-i386_2.6.0-0_i386.deb/download
85+mv download fp-units-i386_2.6.0-0_i386.deb
86+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-utils-2.6.0_2.6.0-0_i386.deb/download
87+mv download fp-utils-2.6.0_2.6.0-0_i386.deb
88+wget http://sourceforge.net/projects/freepascal/files/Linux/2.6.0/deb/fp-utils_2.6.0-0_i386.deb/download
89+mv download fp-utils_2.6.0-0_i386.deb
90+
91+dpkg -i fp-units-rtl-2.6.0_2.6.0-0_i386.deb
92+dpkg -i fp-units-rtl_2.6.0-0_i386.deb
93+dpkg -i fp-compiler-2.6.0_2.6.0-0_i386.deb
94+dpkg -i fp-utils-2.6.0_2.6.0-0_i386.deb
95+#no idea what the other .debs are for that we downloaded
96+#todo: this could be trimmed down a bit, but this seems to work
97+```
98+
99+## Commandes de construction de Jenkins
100+
101+Comme commandes de construction dans Jenkins, vous pourriez utiliser les commandes shell :
102+
103+``` bash
104+make all
105+```
106+
107+et, pour installer dans l'"espace de travail" ou au sommet de l'environnement du répertoire de construction (*build directory environment*) :
108+
109+``` bash
110+make install PREFIX=$WORKSPACE
111+```
112+
113+Note : l'installation quelque part ailleurs pourrait être une bonne idée, veuillez vous reporter à FAQ de construction.
114+
115+Make install ne génére pas un does fpc.cfg pour vous ; vous devez le faire vous-mêmes :
116+
117+``` bash
118+$WORKSPACE/bin/fpcmkcfg -o $WORKSPACE/bin/fpc.cfg
119+```
120+
121+## Un problème : /etc/fpc.cfg
122+
123+La version stable que nous compilons en utilisant des paquets fonctionne, mais elle pose un fpc.cfg dans le répertoire /etc. Ce fpc.cfg est ramassé par défaut et il n'y a aucun moyen de le désactiver à moins que vous par exemple n'appeliez un script fpc.sh en tant que votre compilateur au lieu de l'exécutable fpc. Ce script passe les options au compilateur réel ainsi il ignore /etc/fpc.cfg.
124+
125+Cela donnera des problèmes à l'exécution p.ex. la suite de test du compilateur. Ces problèmes pourront être résolus en :
126+
127+- utilisant une variable d'environnement PPC_CONFIG_PATH ou un fpc.cfg dans le répertoire d'accueil, ce qui pourrait marcher.
128+- peut-être qu'une solution plus simple est de ne pas installer FPC/les sources de FPC, mais de télécharger un compilateur bootstrap. Ainsi aucun fpc.cfg et pas de problème. Le bonus est que nous le construisons de manière plus proche de la "version officielle" (qui est toujours une installation complète de la précédente version).
129+
130+Pour contourner cela, vous pouvez utiliser fpcup ; voir la prochaine section.
131+
132+## Un problème : make clean
133+
134+Le tronc actuel de FPC (octobre 2012) ne nettoie pas tous les fichiers significatifs en exécutant make clean/make distclean.
135+
136+# Solution : obtenir un FPC utilisant fpcup
137+
138+L'outil [[Projects using Lazarus|fpcup]] peut télécharger et installer FPC et Lazarus à partir de rien (ne demande pas de compilateur de départ), aussi une solution pourrait être de :
139+
140+- placer fpcup dans votre espace de travail
141+- modifier les étapes de construction pour appeler fpcup avec --only=fpc --fpcrevision=\$SVN_REVISION
142+
143+Nous aurions pu lancer fpcup pour qu'il télécharge la dernière version de SVN, mais nous perdons l'intégration avec subversion.
144+
145+Assurez-vous que vous avez un compilateur de ressource (vois la section d'installation du dessus). Téléchargez fpcup (la largeur, 32bit/64bit doit correspondre avec celle de la machine jenkins). Posez p.ex. fpcup_linux_x86 dans votre répertoire /usr/local/bin, ensuite :
146+
147+``` bash
148+chmod ugo+rx /usr/local/bin/fpcpup_linux_x86
149+```
150+
151+(Si utilisation d'un Linux x64, le nommage peut évidemment différer)
152+
153+Ensuite configurez vos étapes de construction comme ceci. Note : Nous pourrions avoir utilisé un gros script shell, mais l'avantage de mettre les commandes dans les commandes d'exécution shell est que la construction s'arrêtera sur la première erreur (statut de sortie non nul) rencontrée ; vous auriez à détecter les erreurs dans un script.
154+
155+``` bash
156+rm --force $WORKSPACE/fpcup.log #remove any existing logs; use force to not generate error message if log does not exist
157+```
158+
159+Téléchargez/installer en utilisant fpcup. Note : il obtient l'URL SVN et l'ID révision désirée depuis des variables d'environnement définies par le plugin SVN de Jenkins. Une fois de plus, ajustez si vous n'utilisez pas un Linux x86.
160+
161+``` bash
162+/usr/local/bin/fpcup_linux_x86 --fpcbootstrapdir=$WORKSPACE/fpcbootstrap --fpcdir=$WORKSPACE --fpcuplinkname= --fpcURL=$SVN_URL --fpcrevision=$SVN_REVISION --keeplocalchanges --lazdir=$WORKSPACE/lazarus --lazlinkname= --logfilename=$WORKSPACE/fpcup.log --noconfirm --primary-config-path=$WORKSPACE/lazarusconfig --only=fpc
163+```
164+
165+Maintenant vérifiez la sortie FPC dans une autre étape de construction. Remarquez que fpcup utilise un script fpc.sh personnalisé pour éviter des problèmes avec un fpc.cfg global au système. Une fois de plus, ajustez si vous n'utilisez pas un Linux x86.
166+
167+``` bash
168+$WORKSPACE/bin/i386-linux/fpc.sh -iD; $WORKSPACE/bin/i386-linux/fpc.sh -iW #get FPC version output to check if it was built correctly
169+```
170+
171+La dernière étape de construction fait exécuter la "suite de test du compilateur".
172+
173+``` bash
174+cd $WORKSPACE/tests; make all TEST_FPC=$WORKSPACE/bin/i386-linux/fpc.sh #make full doesn't work, can't delete file
175+```
176+
177+Vous pourrez archiver les résultats de la suite de test en utilisant une étape post-construction de Jenkins.
178+
179+# Tests FPCUnit/DBTestframework avec une sortie en base de données
180+
181+Si vous voulez exécuter les tests de [[Databases/fr|dbtestframework]] et sortir les résultats vers un serveur de base de données séparé, vous pouvez utiliser les programmes testdbwriter. Il vous laisse comparer les exécutions de diverses révisions - qui sont automatiquement construites par Jenkins.
182+
183+Cette méthode de sortie des résultats de test vers des bases de données peut aussi être utilisée par d'autres projets qui utilisent les tests fpcunit - vous auriez à utiliser l'écouteur testdbwriter et à ajuster le console runner pour inclure cela.
184+
185+Bien que cette section contienne une bonne quantité de réglages, c'est heureusement fait une fois pour toutes ; chaque tâche réutilisera la configuration existante.
186+
187+Vous pourrez bien sûr aussi exécuter le code normal de dbtestframework avec une sortie en texte brut ou en XML. Vérifiez si Mercurial/hg est installé :
188+
189+``` bash
190+hg --help
191+```
192+
193+Sinon, installez-le, p.ex.
194+
195+``` bash
196+apt-get install mercurial
197+```
198+
199+Obtenez la version du référentiel dans un répertoire défini :
200+
201+``` bash
202+mkdir -p /opt/testdbwriter
203+cd /opt
204+hg clone https://bitbucket.org/reiniero/testdbwriter #will create /opt/testdbwriter
205+cd /opt/testdbwriter
206+# the following 2 steps are not necessary but show you how you can update with newest changes in the repository if needed:
207+hg pull #get newest changes from remote repo
208+hg up #adapt local version to newest changes we just downloaded
209+```
210+
211+## Réglage de la base de données
212+
213+Maintenant les fichiers dans ce répertoire peuvent être utilisés pour compiler le programme de tests avec le FPC dans chaque construction. Nous aurons aussi besoin de configurer notre connexion de base de données.
214+
215+### Bases de données testées
216+
217+D'abord, considérons les bases de données sur lesquelles les tests tourneront. Veuillez créer une base de données vide (ou au moins une dans laquelle le test utilisateur peut se débattre (*thrash*)) sur chaque serveur de base de données que vous voulez tester et avoir un nom d'utilisateur et un mot de passe prêts.
218+
219+Ensuite, éditez le database.ini, utilisé par les test du framework db test (voir l'[[Databases/fr|exécution de tests de bases de données de FPC]].
220+
221+``` bash
222+cd /opt/testdbwriter/dbtests2db
223+cp database.ini.txt database.ini #copy over template to config file
224+nano database.ini # or another editor.
225+# now set up your credentials in each section
226+```
227+
228+### Résultats de test de la base de données
229+
230+Maintenant la base de données où les résultats pourraient aller.
231+
232+Configurez une base de données avec les instructions soulignées dans le fichier readme.txt (p.ex. utilisez le *testdbwriter.sql* pour les bases de données Firebird/Interbase et *testdbwriter_postgresql.sql* pour les bases de données PostgreSQL).
233+
234+Maintenant éditez le fichier ini :
235+
236+``` bash
237+cd /opt/testdbwriter/dbtests2db
238+cp ../testdbwriter.ini.txt testdbwriter.ini #copy over template to config file
239+nano testdbwriter.ini #or another editor
240+# now set up your credentials in the right section, and choose your profile/database in the [Database] section
241+```
242+
243+## Ajout des tests à votre lot de travail Jenkin
244+
245+`* * * A FINIR  * * * `
246+
247+We'll put the dbtests2db.lpr console runner and the db output writer code it needs (testdbwriter.pas) into the directory where the dbtestframework tests live so dbtests2db can pick up those tests. Then we'll compile the test suite, and run it for each database you want to test.
248+
249+In your Jenkins job configuration, add an Execute shell build step to set up the test environment. Note: we copy forcing overwrites to avoid the script aborting the Jenkins job if the target exists:
250+
251+``` bash
252+cp -f /opt/testdbwriter/testdb* \
253+/opt/testdbwriter/dbtests2db/database.ini \
254+/opt/testdbwriter/dbtests2db/dbtests2db.lpr \
255+-t $WORKSPACE/packages/fcl-db/tests/; \
256+cd $WORKSPACE/packages/fcl-db/tests; \
257+$WORKSPACE/bin/i386-linux/fpc.sh $WORKSPACE/packages/fcl-db/tests/dbtests2db.lpr \
258+#copy & compile db test program using the fpc dbtestframework tests
259+```
260+
261+Then for each database you want to test, add test runs. The names of the database connectors you specify as arguments must match the section names in database.ini, e.g. postgresql, mysql40, mysql41, mysql50, oracle, interbase etc.
262+
263+> **Note:** The dbtests2db program requires that the database connector is the first parameter; we also pick up the subversion revision number from the Jenkins subversion module we use. The examples below show how you can add more information to the test results database.
264+
265+If you are testing multiple branches/versions of FPC (e.g. 2.6 and trunk) at the same time, you have a problem: the SVN revision number does not apply to branches but to the whole repository.
266+
267+This means that the code in the FPC fixes26 branch commit 2500 may be older than the code in the FPC trunk branch 2300. Fortunately, there is a solution: we prepend the revision number passed to the executable with a value (e.g. 020701 for FPC 2.7.1, 020600 for FPC 2.6.0). This serves to preserve the relative "newness" of the various branches... and permits running regression queries on the database to show e.g. that FPC trunk has a failing test where 2.6.0 succeeded.
268+
269+> **Note:** Older versions of this instruction proposed using
270+>
271+> ``` bash
272+> --svnbranch="trunk"
273+> ```
274+>
275+> which can also be done, but then you separate your testsuite hierarchies into different trees in the database. This does not allow running regression queries so easily.
276+
277+Examples:
278+
279+``` bash
280+cd $WORKSPACE/packages/fcl-db/tests; \
281+$WORKSPACE/packages/fcl-db/tests/dbtests2db interbase --revisionid=020701$SVN_REVISION --comment="Jenkins trunk interbase"
282+```
283+
284+With MySQL, as usual, the client version you installed on the Jenkins server has to match the version you specify here - in the example version 5.1:
285+
286+``` bash
287+cd $WORKSPACE/packages/fcl-db/tests; \
288+$WORKSPACE/packages/fcl-db/tests/dbtests2db mysql51 --revisionid=020701$SVN_REVISION --comment="Jenkins trunk mysql51"
289+```
290+
291+``` bash
292+cd $WORKSPACE/packages/fcl-db/tests; \
293+$WORKSPACE/packages/fcl-db/tests/dbtests2db postgresql --revisionid=020701$SVN_REVISION --comment="Jenkins trunk postgresql"
294+```
295+
296+``` bash
297+cd $WORKSPACE/packages/fcl-db/tests; \
298+$WORKSPACE/packages/fcl-db/tests/dbtests2db sqlite --revisionid=020701$SVN_REVISION --comment="Jenkins trunk sqlite"
299+```
300+
301+``` bash
302+cd $WORKSPACE/packages/fcl-db/tests; \
303+$WORKSPACE/packages/fcl-db/tests/dbtests2db bufdataset --revisionid=020701$SVN_REVISION --comment="Jenkins trunk bufdataset"
304+```
305+
306+``` bash
307+cd $WORKSPACE/packages/fcl-db/tests; \
308+$WORKSPACE/packages/fcl-db/tests/dbtests2db dbase4 --revisionid=020701$SVN_REVISION --comment="Jenkins trunk dbase4"
309+```
310+
311+Note: with all this building and testing, your job running time may extend a bit. Please make sure you set the SVN polling interval to a big enough value to avoid building all the time.
312+
313+If this works, you can see the test results on your database server, analyze regressions, test succcess percentages, etc.
314+
315+# Windows/Linux... construire l'esclave
316+
317+Vous pouvez configurer d'autres machines en dehors du serveur Jenkins pour agir comme des "esclaves" : elles sont contrôlées par Jenkins et utilisées pour exécuter des tâches.
318+
319+Ceci peut être utile lors de l'exécution d'un construction/test Windows depuis un serveur Linux.
320+
321+Voir [1](https://wiki.jenkins-ci.org/display/JENKINS/Windows+slaves+fail+to+start+via+DCOM) pour des détails sur comment configurer des esclaves de construction Windows via DCOM (note : il y a d'autres façons pour configurer des esclaves de construction (Windows) ; veuillez vous référer à la documentation Jenkins).
322+
323+# Améliorations
324+
325+Améliorations possibles :
326+
327+- exécuter make install dans un préfixe différent
328+- exécuter une compilation Lazarus
329+- enregistrer les résultats dbtests2db en XML, voir si Jenkins prend en charge cela.
330+- ajouter un installateur de constructeurs
331+
332+# Dépannage
333+
334+## Echecs de construction
335+
336+Vos constructions peuvent échouer parce que l'utilisateur Jenkins exécute un shell différent sous un utilisateur différent avec un chemin d'accès différent de celui que vous attendiez.
337+
338+## Découvrez quel utilisateur travaille sous Jenkins
339+
340+Si vous rencontrez des problèmes avec les scripts/commandes shell dans les travaux ne disposant pas d'autorisations, il est utile de connaître l'utilisateur sous lequel Jenkins s'exécute.
341+
342+Essayez cette commande (ou bien sûr la documentation) :
343+
344+``` bash
345+ps aux |grep jenkins | grep -v grep | cut -d" " -f1 | uniq #perhaps only works if jenkins is running a job
346+```
347+
348+Sur Debian, il donne l'utilisateur tomcat6.
349+
350+---
351+*From the Free Pascal wiki, page "Jenkins/fr", as it stood on 2017-10-27 after a change by E-ric, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history