8
votes

Multiples files d'attente de construction à Jenkins

J'ai un certain nombre d'emplois différents à Jenkins, partitionné dans des projets avec leurs propres "pipelines" de construction / test / analyse. La plupart de ces travaux sont en réalité des commandes distantes au lieu de constructions sur la boîte.

Cependant, Jenkins hors de la boîte ne supporte qu'une file d'attente pour tous les bâtiments . Je veux définir une file d'attente par projet (ou vue).

Comment puis-je accomplir cela?


0 commentaires

6 Réponses :


5
votes

Autant que je sache que cela ne soit pas possible sans changer le code Jenkins, mais je pense que vous pouvez atteindre le même objectif avec un minimum de maintenance en utilisant Construire des esclaves. Différentes constructions peut fonctionner simultanément sur les esclaves ou même sur le même esclave si vous définissez plusieurs exécuteurs (si la machine esclave a> 1 CPU). Vous pouvez étiqueter les esclaves pour contrôler quels travaux sont exécutés sur chacun. Vous pourriez donc avoir un ensemble séparé d'esclaves pour chacun de vos pipelines.

Outre les frais généraux de veiller à ce que les machines d'esclaves de base restent en cours d'exécution, les surcharges spécifiques à Jenkins pour exécuter un esclave sont minimes. Vous pouvez utiliser un processus sur le maître pour conserver le fichier JAR esclave et les outils de construction dont vous avez besoin à jour; Dans mon magasin, nous utilisons un simple script RSYNC qui fonctionne à chaque fois que le maître ou l'esclave est redémarré pour copier les derniers outils du maître à l'esclave et redémarrer le processus esclave.

Cette approche réduit également la mesure dans laquelle le maître Jenkins est un point de défaillance unique.


6 commentaires

Non, je demande la possibilité d'avoir plusieurs queues . Je peux augmenter le nombre d'emplois simultanés dans une file d'attente.


Pouvez-vous développer pourquoi vous avez besoin de plusieurs files d'attente?


J'ai plusieurs projets. Chaque projet a son propre pipeline. Chaque projet peut construire simultanément avec les autres, jusqu'à une limite X - Say Limited par des licences pour ses outils. Une construction peut être lancée localement (rare) ou à distance (commune). Idéalement, Jenkins ne s'installe pas sur chaque machine de construction (le coût de l'administrateur est très élevé) - Il existe un répartiteur central d'envoi de commandes sur les compilateurs distants.


Cela peut être fait avec un seul maître Jenkins et plusieurs esclaves. Le maître dispose de toutes les définitions du projet et maintient un pool d'esclaves distants qui exécutent les constructions. Différentes bâties peuvent fonctionner simultanément sur les esclaves ou même sur le même esclave si vous définissez plusieurs exécuteurs (si la machine esclave a> 1 processeur). Vous pouvez étiqueter les esclaves pour contrôler quels travaux sont exécutés sur chacun, de sorte que vous pourriez avoir un ensemble séparé d'esclaves pour chacun de vos pipelines. Les esclaves doivent simplement avoir un seul fichier JAR installé, qui peut être contrôlé à partir du maître afin de minimiser les frais de maintenance.


Ah, l'objectif est de éviter avoir des esclaves, car ceux-ci produisent des frais généraux administratifs.


Vous pouvez avoir plusieurs "esclaves" en cours d'exécution sur la même machine pour réduire les coûts administrateurs; Demagez-vous simplement que la boîte Jenkins exécute plusieurs connexions à elles-mêmes de manière à ce que vous puissiez avoir plusieurs files d'attente. J'utilise un esclave "sur le maître" pour obtenir l'un de mes tests pour être dirigé dans l'espace utilisateur sur Win7 et rien ne muck ne rien augmenter.



0
votes

Ce que vous voulez ne peut être accompli que en exécutant un maître Jenkins distinct pour chaque projet.

Habituellement, les gens pensent qu'un maître Jenkins a plus de frais généraux administratifs qu'un esclave, mais si cela ne vous contient pas pour vous, vous pouvez exécuter plusieurs maîtres sur un serveur, vous attribuez simplement des ports différents.

Si ce n'est pas bon pour vous, alors peut-être que Jenkins n'est pas le bon outil pour vous. Ce n'est pas le seul serveur CI là-bas. Jenkins est très facile à installer, mais d'autre part, il n'est pas possible de faire une personnalisation approfondie, comme plusieurs files d'attente de construction.


0 commentaires

0
votes

Je sais que ce fil est vieux, mais je pensais que je voudrais commenter quand même.

imo

J'utiliserais un maître et plusieurs esclaves. Mais gérez les exigences de la configuration des outils via un outil de gestion de la configuration ou CMT comme (chef, marionnette, ansile, etc.), je verrouillerais les pipelines à des esclaves de construction spécifiques via des étiquettes spécifiques (Windows, Linux, Mac, VisualStudio, Maven, Android-SDK, etc.). Étant donné que les esclaves sont configurés dans votre CMT, vous pouvez simplement faire tourner une nouvelle machine très facilement, même s'il s'agit d'une machine virtuelle / matérielle physique. Un maître Jenkins peut gérer plus de 200 esclaves de construction.


0 commentaires

0
votes

Je suis d'accord avec @sti. Considérez plusieurs projets, si cela reste un besoin. En outre, considérez également https://wiki.jenkins-ci.org/display/jenkins/gudique + Plugin pour les regrouper pour les rendre transparents.


0 commentaires

2
votes

Tout d'abord, j'aimerais souligner que, comme les autres réponses décrivant, vous trouverez les différentes files d'attente de construction à différents esclaves serait la solution recommandée, mais il existe un moyen d'accomplir le même effet avec le noeud principal.

Il y a un plugin appelé Construction simultanée de l'accélérateur . Il permet de définir le niveau de consolidation de la concurrence soit sur une base de travail, soit entre les travaux.

La documentation était un peu vague, ce sont donc les étapes qui ont fonctionné pour moi:

  1. Après avoir installé le plugin, allez à Gérer les Jenkins -> Configurer le système . .
  2. dans la section Constructions simultanées Définissez les groupes de travail et leurs niveaux de concurrence respectifs.
  3. Maintenant pour chaque travail que vous souhaitez manifester, allez à sa configuration, activer Construction de l'accélérance d'accélérance ( Général Section), sélectionnez Accélérez ce projet dans le cadre de une ou plusieurs catégories et attribuer une ou plusieurs des catégories définies à l'étape précédente (pas besoin de définir les limites ici à nouveau).

0 commentaires

0
votes

Je pense que le plug-in Build Build Blocker est ce que vous recherchez.

Plugin de bloqueur de construction GitHub

Jenkins Build Builer Plugin Informations

Ce plugin peut être installé via Gérer les plugins à Jenkins.


0 commentaires