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?
Les deux types de travaux ont des fonctions distinctes:
Si vous souhaitez créer un projet sous Windows & Unix, vous avez deux options:
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.
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.
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/
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 .
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.
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.
Pourquoi ne choisissez-vous pas toujours le type de travail multi-configuration?
Quelques raisons me viennent à l’esprit:
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.
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
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.)