web-dev-qa-db-fra.com

Travaux Jenkins et multi-configuration (matrice)

Pourquoi Jenkins a-t-il deux types d’emplois: le projet multi-configuration et le projet de style libre? J'ai lu quelque part qu'une fois que vous avez choisi l'un d'entre eux, vous ne pouvez pas convertir (facilement). Pourquoi ne choisirais-je pas toujours le projet multi-configuration afin d’être en sécurité pour les modifications futures?

Je voudrais installer une construction pour un projet de construction à la fois sous Windows et Unix (et d'autres plates-formes). J'ai trouvé cette question ), qui demande la même chose, mais je ne comprends pas vraiment la réponse. Pourquoi aurais-je besoin de trois projets matriciels (et non de trois projets de style libre), un pour chaque plate-forme? Pourquoi ne puis-je pas les garder tous dans une matrice, avec les plateformes ET (par exemple) la version de gcc sur un axe et (mes) versions de logiciel sur l'autre?

J'ai aussi lu cet article de blog , mais cela construit tout sur le même ordinateur, avec juste différentes versions de Python.

En bref, comment la plupart des gens configurent-ils un projet multi-configuration ciblant plusieurs plates-formes différentes?

38
joscarsson

Les deux types de travaux ont des fonctions distinctes:

  • Travaux de style libre: ils vous permettent de construire votre projet sur un seul ordinateur ou une seule étiquette (groupe d'ordinateurs, par exemple "Windows-XP-32"). 
  • Travaux multi-configuration: ils vous permettent de construire votre projet sur plusieurs ordinateurs ou étiquettes, ou une combinaison des deux, par exemple Windows-XP, Windows-Vista, Windows-7 et RedHat - utile pour vérifier la compatibilité ou la construction pour plusieurs plates-formes (programmes qt?)

Si vous souhaitez créer un projet sous Windows & Unix, vous avez deux options:

  • Créez un travail distinct de style libre pour chaque configuration. Dans ce cas, vous devez les gérer individuellement.
  • Vous avez un travail multi-configuration, et vous sélectionnez 2 (ou plus) étiquettes/ordinateurs/esclaves - 1 pour Windows et 1 pour Unix. Dans ce cas, vous ne devez conserver qu'un seul travail pour la construction.

Vous pouvez conserver les versions de votre gcc sur un axe et les versions du logiciel sur un autre. Il n'y a aucune raison pour laquelle vous ne devriez pas pouvoir. 

La question que vous associez a un bon point, mais elle n’a pas de rapport direct avec votre question: dans son cas, il occupait un travail multi-configurationA, ce qui, en cas de succès, a entraîné un autre emploiB. Désormais, dans un travail multi-configuration, si l'une des configurations échoue, l'intégralité du travail échoue (bien entendu, car vous voulez que votre projet soit construit avec succès sur toutes vos configurations). 

IMHO, pour construire le même projet sur plusieurs plates-formes, la meilleure solution consiste à utiliser un travail de style multi-configuration. 

42
Sagar

Une autre option consiste à utiliser une étape de construction python pour vérifier le système d'exploitation actuel, puis appeler un script d'installation ou de construction approprié. Dans le script python, vous pouvez enregistrer l'environnement mis à jour dans un fichier et réinjecter l'environnement à l'aide du plug-in EnvInject pour les étapes de construction suivantes. En fonction de la taille de votre environnement de construction, vous pouvez également utiliser un outil de construction multiplate-forme tel que SCons.

6
Michael

Une option consiste à utiliser un axe défini par l'utilisateur associé à des esclaves (windows, linux, ...). Vous devez donc ajouter un filtre pour chaque combinaison et utiliser le plug-in Conditional BuildStep pour définir l'étape de construction propre à chaque plate-forme (Executar Shell). , Commande Windows, ...) 

Ce lien contient un tutoriel mais il est en portugais, mais il est facile de le définir en fonction de l'image ... http://manhadalasanha.wordpress.com/2013/06/20/projeto-de-multiplas -configuracoes-matrix-no-jenkins/

4
pauloremoli

Vous pouvez créer un script (par exemple build ) et un fichier de traitement par lots (par exemple build.bat ) qui seront archivés avec votre code source. Dans Jenkins, dans votre étape de construction, vous pouvez appeler $ WORKSPACE/build - Windows exécutera build.bat alors que Linux exécutera build .

3
decocijo

Vous pouvez utiliser la variable créée par jenkins lorsque vous définissez un axe de matrice de configuration. Par exemple: Vous créez un axe esclave portant le nom OSTYPE et vérifiez les deux esclaves (Windows et Linux). Ensuite, vous créez deux étapes de construction distinctes et recherchez la variable d’environnement OSTYPE.

Vous pouvez utiliser un langage de script amélioré à la place, comme python, qui est multi-plateforme et peut obtenir les mêmes fonctionnalités, indépendamment du nom des esclaves et en une seule étape de construction. 

2
Lucas Ces

Si vous passez par la route des matrices avec Windows et autre chose, vous aurez besoin du plugin XShell. Vous venez de créer vos deux scripts de construction, tels que "build.bat" pour cmd et "build" pour bash, et demandez à XShell d'exécuter "build". Le bon sera exécuté dans chaque cas.

2
Todd Greer

Pourquoi ne choisissez-vous pas toujours le type de travail multi-configuration? 

Quelques raisons me viennent à l’esprit:

  1. Parce que les tâches doivent être faciles à créer et à configurer. S'il est difficile de configurer un travail dans votre environnement, vous faites probablement quelque chose de mal en dehors du travail du travail jenkins. Si vous êtes heureux d’avoir réussi à créer ce travail et que celui-ci s’exécute enfin, et que vous êtes réticent à refaire tout ce travail, c’est là que vous devriez essayer de vous améliorer.
  2. Parce que les tâches de configuration multiple sont plus complexes. Ils exigent généralement que vous réfléchissiez à la fois au travail principal et aux différentes variables de sous-emploi, et leur complexité a tendance à devenir de plus en plus complexe, au-delà de ce qui est gérable. Ainsi, dans un scénario à un seul emploi, vous perdriez probablement la pensée de ne pas utiliser cette complexité, et lors de l'extension des variables de construction, les choses pourraient évoluer dans le mauvais sens. Je suggérerais d'utiliser les travaux simples par défaut et les travaux de configuration multiple uniquement si plusieurs configurations sont nécessaires.
  3. Parce que l'exécution de tâches à configuration multiple peut nécessiter plus d'emplacements sur les esclaves que des tâches uniques. Un travail principal sera toujours exécuté sur un emplacement invisible spécial (ce n’est pas un problème en soi) et déclenchera les sous-travaux, mais si ces sous-travaux déclenchent eux-mêmes des sous-travaux, vous risquez facilement de vous retrouver dans une impasse. plus de sous-travaux que de logements, et certains sous-travaux déclenchent à nouveau des sous-travaux qui ne peuvent alors pas s'exécuter car il n'y a plus de logements ouverts. Ce problème peut être contourné en utilisant certaines configurations de la configuration sur les esclaves, mais il est présent et peut uniquement se produire si plusieurs tâches multiples sont exécutées simultanément.

Essentiellement, le travail multi-configuration est une tâche plus complexe et, parce que la complexité doit être évitée sauf si nécessaire, le travail freestyle classique est un meilleur choix par défaut.

1
Sven

Un hack pour que des fichiers batch soient exécutés sur des scripts Windows et Shell sous Unix:

Sous Unix, les fichiers de commandes sortent avec le statut 0:

ln -s /bin/true /bin/cmd

Sous Windows, recherchez un true.exe, nommez-le sh.exe et placez-le quelque part dans PATH.

Si vous avez un sh.exe installé sur Windows (à partir de Cygwin, Git ou une autre source), ajoutez-le en haut du script Shell dans Jenkins:

[ -n "$WINDIR" ] && exit 0

1
larsch

Si vous souhaitez sélectionner l'esclave sur lequel vous exécutez le travail, vous devez utiliser un projet multi-configuration (sinon, vous ne pourrez pas sélectionner/limiter les esclaves sur lesquels vous l'exécutez. Il existe trois façons de le faire. Les ai tous essayés (le plug-in Tie ne fonctionne que pour le travail principal; les restrictions dans les options de projet avancées ne sont pas non plus un déclencheur à l'abri de toute éventualité, vous devez donc utiliser un axe esclave dont l'efficacité a été prouvée aujourd'hui.) 

0
igraczech