Comment dimensionner correctement Jenkins?


27

Dans mon projet, nous avons un serveur AWS exécutant Jenkins Master + 1 Jenkins slave (2 executors) ... et nous en avons besoin de plus
Pour augmenter notre puissance de construction, nous avons trois options:

  1. Évolutivité : agrandissez l'instance AWS et ajoutez plus d'exécuteurs.
  2. Scale Up : Faire exemple AWS plus et ajouter un autre processus jenkins esclave.
  3. Sur l' échelle : Créer une autre instance AWS avec jenkins esclaves et connectez - le à maître

Nous voulons faire 2. car nous sommes dans une grande organisation et notre maître Jenkins actuel a déjà accès à tous les endroits dont il a besoin. Option 3. Le "nouveau serveur" est compliqué car il nécessite plus d'approbations bureaucratiques qui prendront des semaines.

Mes questions sont donc:

  • Y a-t-il des problèmes techniques dans l'option 2? . Peut-être que les exécuteurs de chaque esclave Jenkins ne connaissent pas les autres exécuteurs esclaves?
  • En général, quelle est la meilleure approche pour mettre à l'échelle Jenkins? Augmenter ou évoluer?

Vous aurez un piège, changer un type d'instance pourrait être problématique si vous passez à un autre type de matériel, car votre volume devrait être sauvegardé et restauré dans la nouvelle instance.
Tensibai

2
Pourquoi pas le numéro 3? La façon habituelle d'envoyer des travaux à Jenkins est de maîtriser. Et en fonction de certains critères, le maître l'enverra sans problème à l'esclave approprié
Romeo Ninov

FWIW, vous devez également analyser votre structure de build pour voir comment elle utilise les ressources de la machine de build - la mise à l'échelle peut ne pas aider - j'ai rencontré des cas dans lesquels le temps de build pour 2 builds parallèles sur la même machine était plus long que les temps de build combinés de les 2 mêmes builds exécutés séquentiellement, sans chevauchement. Dans un tel cas, # 3 serait vraiment la seule option pratique disponible.
Dan Cornilescu

Je suis d'accord que le n ° 3 est meilleur mais je n'ai pas d'arguments pour cela ni d'arguments contre les n ° 1 et n ° 2 ...
Oscar Foley

Si vous en avez la possibilité dans votre environnement, je chercherais une solution éphémère. Étant donné que vous êtes déjà dans AWS, vous pouvez facilement monter et descendre des machines selon vos besoins tout en gérant la charge de travail. wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
casey vega

Réponses:


11

Il n'y a aucun problème technique fondamental avec l'exécution de plusieurs esclaves Jenkins sur la même machine. En fait, l' exécution de plusieurs esclaves sur la même machine répertorie plusieurs bonnes raisons de le faire:

Bien que l'utilisation correcte des exécuteurs élimine largement la nécessité de plusieurs instances esclaves sur la même machine, il existe des cas d'utilisation uniques à considérer:

  • Vous souhaitez plus de configurabilité entre les nœuds configurés. Supposons qu'un ensemble de nœuds soit utilisé autant que possible et que l'autre nœud soit utilisé uniquement en cas de besoin.
  • Vous pouvez avoir plusieurs installations maître Jenkins construisant des choses différentes, et donc cette configuration vous permettrait d'avoir des esclaves pour plus d'un maître sur la même boîte. C'est vrai, avec Jenkins, vous pouvez vraiment servir deux maîtres.
  • Vous souhaiterez peut-être tirer parti de la facilité de démarrage / arrêt / remplacement de machines virtuelles, peut-être en conjonction avec des plug-ins Jenkins tels que le plug -in Libvirt Slaves .
  • Vous souhaitez maximiser votre investissement et votre utilisation du matériel, tout en minimisant les coûts d'exploitation (par exemple, les frais d'utilité pour le fonctionnement des esclaves au ralenti).

En général, la mise à l'échelle est préférable, principalement parce que la capacité de mise à l'échelle est généralement limitée par les types / tailles des ressources physiques disponibles.

En particulier pour augmenter la puissance de construction, je recommanderais une analyse de votre construction réelle pour déterminer comment elle utilise les ressources de la machine, quels / où se trouvent ses goulots d'étranglement et quelles limitations d'évolutivité elle soulève pour révéler si la mise à l'échelle aide même.

Par exemple, j'ai rencontré des cas dans lesquels le temps de génération de 2 générations parallèles sur la même machine était plus long que les temps de génération combinés des 2 mêmes générations exécutées séquentiellement (sans chevauchement) sur la même machine. Dans un tel cas, je n'envisagerais même pas de passer à l'échelle car cela diminuerait en fait la capacité globale de construction.



3

Je pense que vous ne devriez faire ni l'un ni l'autre;)

Enfin un peu. Je pense que vous avez besoin de plus d'exécuteurs, peut-être que vos builds sont vraiment gourmands en ressources? Je courrais au moins 4 mais nous courons 6 à 8 selon des travaux. J'aime faire correspondre le nombre de cœurs aux execteurs. Donc, vous voudrez peut-être augmenter vos nœuds, je pense que nous exécutons un M4 grand pour nos 4-8 exécuteurs.

Je pense également que vous devriez évoluer, mais vous devez le faire intelligemment. Jenkins a un plugin pour évoluer automatiquement sur AWS en fonction de ce qui se trouve dans la file d'attente de génération. Fondamentalement, vous lui dites combien de travaux et combien de temps l'attente avant qu'il ne lève un esclave et n'envoie les travaux au nouvel esclave. Vous pouvez également définir la quantité maximale d'esclaves, la quantité minimale, etc.


2

J'évoluerais au lieu d'augmenter, en optant pour l'option 3. Nous avons fait une configuration où nous avons tous les agents Jenkins exécutés sur un ECS (Jenkins personnalisé basé sur Docker) avec un groupe de mise à l'échelle automatique. Nous avons tous nos maîtres Jenkins communiquant avec l'ECS, partageant ainsi la charge de travail sur l'ECS, et pas besoin de recréer le maître Jenkins dans un exercice de mise à l'échelle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.