2017-04-03 3 views
1

J'ai un serveur Jenkins avec environ 50 esclaves attachés. J'essaie de faire un test de stress sur Jenkins Build Queue parce que je n'ai trouvé aucune documentation à ce sujet.Ajout de tâches à 15K Jenkins construire la file d'attente

J'ai un travail simple avec paramétrés plus qu'à une étape, BRANCH et COUNT sont les paramètres du travail. Le sommeil de l'emploi pour un laps de temps aléatoire entre 10 et 30 secondes:

#bash 

RESULT="/path/to/results_dir/$BRANCH/$BUILD_ID.txt" 
SEC=$(shuf -i10-30 -n1) 
sleep $SEC 
echo -e "$NODE_NAME\t$BUILD_TAG\t$SEC\t$COUNT" > $RESULT 

Je voudrais exécuter ce travail 15K fois. Au début, j'essayé d'utiliser l'API REST Jenkins de la ligne de commande:

for c in $(seq 1 15000); do curl -X POST http://<server ip>:8080/job/TEST_SIMPLE/buildWithParameters --data-urlencode "token=TEST" --data-urlencode "BRANCH=<branch name>" --data-urlencode "COUNT=${c}"; done 

Mais après une heure seulement 4K tâches ont été soumises, alors je tué la boucle et de purge Jenkins construire la file d'attente. Mon deuxième essai consistait à utiliser un autre travail qui déclenche ce travail 'TEST_SIMPLE' en utilisant le script système groovy et en appelant l'API 'job.scheduleBuild'. Il fonctionne actuellement pendant une heure et demie et n'a soumis que 8K tâches sur 15K.

Il semble que les tâches sont ajoutées à la file d'attente que lorsqu'un esclave prend une de la file d'attente

Le but de cet effort est de remplacer un très ancien exécuteur/répartiteur pour notre suite de tests qui contiennent beaucoup de nombreux tests (~ 15K) et je fais un POC avec Jenkins parce que nous l'utilisons déjà pour nos builds et pour exécuter ce vieil exécuteur.

Mes questions sont les suivantes: 1. Y at-il une limite à la taille de la file d'attente de construction? 2. Existe-t-il un moyen de soumettre autant de demandes très rapidement?

Merci.

Répondre

0

Si je comprends bien votre message que vous voulez savoir correctement:

  1. Y at-il une limite à la file d'attente de construction?
  2. Comment puis-je soumettre beaucoup de requêtes à Jenkins très rapidement?

Permettez-moi de répondre à la deuxième question. Pour soumettre des demandes plus rapidement, vous pouvez utiliser le parallèle xargs avec curl. Cela vous permettra d'utiliser plusieurs threads pour soumettre vos demandes curl.

seq 1 20 | xargs -n 1 -P 10 -I cnt curl -X POST http://<server ip>:8080/job/TEST_SIMPLE/buildWithParameters --data-urlencode "token=TEST" --data-urlencode "BRANCH=<branch name>" --data-urlencode "COUNT=cnt" 

La commande passe xargs -n 1 -P 10 -I cnt arguments un à la fois (-n 1) à l'aide du nom curl variable 'cnt' (-I cnt) en parallèle (-P 10 avec 10 threads).

En fonction du nombre de processeurs sur la machine que vous utilisez pour générer la charge, vous pouvez utiliser un nombre très élevé de fils. Allez trop haut et votre capacité à générer de la charge diminuera au fur et à mesure que les threads seront en concurrence pour le processeur. Sur la plupart des ordinateurs portables modernes, je commençais à 50 et je poussais jusqu'à ce que les fans ressemblent à un moteur à réaction, mais c'est juste moi.

En ce qui concerne la limite de file d'attente, il sera certainement limité par la mémoire et le disque, mais je dois creuser dans la source pour voir s'il y a d'autres contraintes.