Dans la section précédente, nous avons vu comment attribuer des libellés à vos noeuds esclaves. C'est un moyen commode pour grouper vos esclaves en fonction de caractéristiques telles que le système d'exploitation, l'environnement cible, le type de base de données, ou tout autre critère pertinent dans votre processus de build. Une application commune de cette pratique est d'exécuter des tests fonctionnels spécifiques à un OS sur des noeuds esclaves dédiés, ou de réserver une machine particulière aux tests de performance).
Une fois que vous avez affecté vos libellés à vos noeuds esclaves, vous devez aussi dire à Jenkins où il peut exécuter les tâches de build. Par défaut, Jenkins utilisera simplement le premier noeud esclave disponible, ce qui offre généralement le meilleur temps de traitement global. Si vous avez besoin d'attacher une tâche de build à une machine ou un groupe de machines particulier, vous devez cocher la case “Resteindre les emplacements où ce projet peut s'exécuter” dans la page de configuration du build (voir Figure 11.15, “Exécuter une tâche de build sur un noeud esclave particulier”). Ensuite, entrez le nom de la machine, ou un libellé identifiant un groupe de machines, dans le champ Expression de libellé. Jenkins fournira une liste déroulante dynamique montrant les noms de machines et libellés de au fur et à mesure que vous tapez.
Ce champ admet aussi des expressions booléennes, ce qui vous permet de définir des contraintes plus compliquées spécifiant où votre build devrait s'exécuter. Le plus simple pour expliquer comment utiliser ces expressions est de montrer des exemples. Supposez que vous avez une ferme de construction avec des noeuds esclaves Windows et Linux (identifiés par les libellés “windows” et “linux”), distribués sur trois sites (“sydney”, “sanfrancisco”, et “london”). Votre application nécessite aussi d'être testée sur différentes bases de données (“oracle”, “db2”, “mysql”, et “postgres”). Vous pouvez aussi utiliser des libellés pour distinguer les noeuds esclaves utilisés pour déployer vers différents environnements (test, test d'acceptation, production).
L'utilisation la plus simple des expressions de libellés est de définir où une tâche de build peut ou ne peut pas être exécutée. Si vos tests web nécessitent Internet Explorer, par exemple, vous aurez besoin de les exécuter sur une machine Windows. Vous pourriez exprimer cela en indiquant simplement le libellé suivant :
windows
Sinon, vous pourriez vouloir exécuter vos tests sur Firefox, mais
seulement sur des machines Linux. Vous pourriez exclure les machines Windows
de l'éventails des noeuds candidats en utilisant l'opérateur !
:
!windows
Vous pouvez aussi utiliser les opérateurs et (&&
)
et ou (!!
) pour combiner les expressions. Par exemple,
supposez que la base Postgres soit uniquement testée pour Linux. Vous
pourriez dire à Jenkins d'exécuter une tâche de build particulière seulement
sur les machines Linux sur lesquelles est installé Postgres en utilisant
l'expression suivante :
linux && postgres
Ou vous pourriez spécifier qu'une tâche de build particulière doit uniquement tourner sur l'environnement de test d'acceptation utilisateur de Sydney ou Londres :
uat && (sydney || london)
Si votre nom de machine contient des espaces, vous devrez les entourer de double quotes :
"Windows 7" || "Windows XP"
Il y a aussi deux opérateurs logiques plus avancés que vous pourriez
trouver utile. L'opérateur implique
(=>
) vous permet de définir une
contrainte logique de la forme “si A est vrai, alors B doit aussi être
vrai.” Par exemple, supposez que vous ayez une tâche de build qui peut
s'exécuter sur n'importe quelle distribution Linux, mais que si c'est une
machine Windows, ce doit être Windows 7. Vous pourriez exprimer cette
contrainte comme suit :
windows -> "Windows 7"
L'autre opérateur logique est l'opérateur si-et-seulement-si (<=>
. Cette opération vous permet de définir
des contraintes plus fortes de la forme "Si A est vrai, alors B doit être
vrai, mais si A est faux, alors B doit être faux". Par exemple, supposez que
les tests Windows 7 doivent uniquement être exécutés sur l'environnement de
tests d'acceptation utilisateur, et que seuls les tests Windows 7 doivent
être exécutés dans l'environnement de tests d'acceptation. Vous pourriez
exprimer cela comme montré ici :
"Windows 7" <-> uat