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:
- Évolutivité : agrandissez l'instance AWS et ajoutez plus d'exécuteurs.
- Scale Up : Faire exemple AWS plus et ajouter un autre processus jenkins esclave.
- 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?
jenkins
continuous-integration
capacity-planning
Oscar Foley
la source
la source
Réponses:
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:
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.
la source
Utilisez Kubernetes et Helm.
Je recommanderais d'utiliser le tableau Jenkins Helm. Il s'installe avec
helm install stable/jenkins
et évolue automatiquement.https://github.com/kubernetes/charts/tree/master/stable/jenkins
la source
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.
la source
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.
la source