2017-09-30 1 views
0

Nous avons un certain nombre de travaux multiples qui exécutent un travail parent et plusieurs sous-jobs. Le parent effectue un pré-traitement, puis lance le premier sous-job. Exemple:Jenkins - exécute uniquement un travail sur un noeud avec 2+ exécutants gratuits

  • Parent - vérifie les mises en pension git et PREPS le code
    • Construire le code
    • tests unitaires
    • Ajouter à HockeyApp

Depuis le parent s'exécute pendant toute la durée d'exécution des sous-jobs, le processus démarre avec h un exécuteur, puis prend une seconde chaque fois qu'un sous-travail commence. le laisse tomber et le ramasse quand le prochain commence.

Nous avons 4 nœuds avec 3 - 4 exécuteurs sur chacun d'entre eux. Nous n'avons pas non plus de lecteur en réseau, de sorte que le sous-job doit rester sur le même exécuteur que le parent pour éviter de devoir passer tout l'espace de travail entre les jobs. Le problème est que si un travail est en cours d'exécution et qu'il a deux exécuteurs, un autre est lancé, puis un autre juste après cela, il y a une chance qu'ils se retrouvent tous sur le même nœud et quelque chose comme ci-dessous:

Node 1

  • Executor 1 - Parent1
  • Executor 2 - Child1
  • Executor 3 - Parent2
  • Executor 4 - Parent3

Maintenant Parent2 et Parent3 restent assis en attendant un exécuteur libre. Finalement, le travail d'enfant sur Parent1 se termine, puis 2 r 3 attrape l'exécuteur et tous se battent pour cela.

Existe-t-il un moyen de dire à Jenkins de ne lancer ce parent que sur un noeud avec au moins 2 exécutants gratuits? Je sais que si quelqu'un a commencé suffisamment de travail assez rapidement, nous pourrions toujours nous retrouver avec un problème d'homme, mais cela en réduirait considérablement les chances.

Répondre

1

Je pense que vous pouvez utiliser - https://wiki.jenkins.io/display/JENKINS/Heavy+Job+Plugin, et de définir pour chaque étape le nombre d'exécuteurs libres dont vous avez besoin.

+0

Impressionnant, je vais tester ça! –

+0

Il sauve l'exécuteur, mais ne lui attribue pas le sous-travail, il en a encore besoin d'un autre pour assigner le sous-travail afin qu'il ne résout pas mon problème. J'ai besoin de quelque chose de similaire, mais cela prend en compte la fonctionnalité multi-tâches. Merci à vous, j'apprécie l'effort! –

+0

à vous voulez exécuter seulement 1 travail Parent en même temps? ou vous pouvez définir le poids du parent comme 3 exécuteurs ... –